메인 콘텐츠로 건너뛰기

개요

Metaflow는 ML 워크플로를 생성하고 실행하기 위해 Netflix에서 만든 프레임워크입니다. 이 통합 기능을 사용하면 Metaflow steps 및 flows에 데코레이터를 적용하여 매개변수와 아티팩트를 W&B에 자동으로 로깅할 수 있습니다.
  • step에 데코레이터를 적용하면 해당 step 내 특정 유형에 대한 로깅을 켜거나 끌 수 있습니다.
  • flow에 데코레이터를 적용하면 flow의 모든 step에 대한 로깅을 켜거나 끌 수 있습니다.

빠르게 시작하기

가입하고 API key 생성하기

API key는 사용 중인 머신을 W&B에 인증하는 데 사용됩니다. 사용자 프로필에서 API key를 생성할 수 있습니다.
보다 간편하게 설정하려면 User Settings로 바로 이동해 API key를 생성하세요. 새로 생성된 API key는 즉시 복사하여 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
  1. 오른쪽 상단에서 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음, 아래로 스크롤하여 API Keys 섹션으로 이동합니다.

wandb 라이브러리를 설치하고 로그인하기

로컬 환경에 wandb 라이브러리를 설치하고 로그인하려면 다음 단계를 따르세요.
wandb 버전 0.19.8 이하를 사용하는 경우, plum-dispatch 대신 fastcore 1.8.0 이하 버전(fastcore<1.8.0)을 설치하세요.
  1. WANDB_API_KEY 환경 변수를 API key 값으로 설정합니다.
    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.
    pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
    
    wandb login
    

플로우와 스텝에 데코레이터 적용하기

스텝에 데코레이터를 적용하면 해당 스텝 내에서 특정 타입에 대한 로깅을 켜거나 끌 수 있습니다.이 예제에서는 start 안의 모든 데이터셋과 모델이 로깅됩니다.
from wandb.integration.metaflow import wandb_log

class WandbExampleFlow(FlowSpec):
    @wandb_log(datasets=True, models=True, settings=wandb.Settings(...))
    @step
    def start(self):
        self.raw_df = pd.read_csv(...).    # pd.DataFrame -> 데이터셋으로 업로드
        self.model_file = torch.load(...)  # nn.Module    -> 모델로 업로드
        self.next(self.transform)

프로그래밍 방식으로 데이터에 액세스하기

수집된 정보에 액세스하는 방법은 세 가지입니다. 로깅 중인 원본 Python 프로세스 안에서 wandb 클라이언트 라이브러리를 사용하거나, 웹 앱 UI를 사용하거나, 프로그래밍 방식으로 Public API를 사용할 수 있습니다. Parameter는 W&B의 config에 저장되며 Overview 탭에서 확인할 수 있습니다. datasets, models, othersW&B 아티팩트에 저장되며 Artifacts 탭에서 확인할 수 있습니다. 기본 Python 타입은 W&B의 summary dict에 저장되며 Overview 탭에서 확인할 수 있습니다. API를 사용해 원본 프로세스 외부에서 이 정보를 프로그래밍 방식으로 가져오는 방법에 대해서는 Public API 가이드를 참고하세요.

빠른 참조

데이터클라이언트 라이브러리UI
Parameter(...)wandb.Run.configOverview 탭, Config
datasets, models, otherswandb.Run.use_artifact("{var_name}:latest")Artifacts 탭
기본 Python 타입 (dict, list, str 등)wandb.Run.summaryOverview 탭, Summary

wandb_log kwargs

kwargOptions
datasets
  • True: 데이터셋인 인스턴스 변수를 로그합니다
  • False
models
  • True: 모델인 인스턴스 변수를 로그합니다
  • False
others
  • True: pickle로 직렬화할 수 있는 기타 모든 항목을 로그합니다
  • False
settings
  • wandb.Settings(…): 이 step 또는 flow에 사용할 사용자 정의 wandb 설정을 지정합니다
  • None: wandb.Settings()를 전달하는 것과 동일합니다

기본적으로, 다음과 같은 경우:

  • settings.run_groupNone이면 {flow_name}/{run_id}로 설정됩니다
  • settings.run_job_typeNone이면 {run_job_type}/{step_name}로 설정됩니다

자주 묻는 질문

정확히 무엇을 기록하나요? 인스턴스 변수와 로컬 변수를 모두 기록하나요?

wandb_log는 인스턴스 변수만 기록합니다. 로컬 변수는 절대 기록되지 않습니다. 이는 불필요한 데이터가 기록되는 것을 방지하는 데 유용합니다.

어떤 데이터 타입이 로깅되나요?

현재 다음 타입을 지원합니다:
Logging 설정타입
default (always on)
  • dict, list, set, str, int, float, bool
datasets
  • pd.DataFrame
  • pathlib.Path
models
  • nn.Module
  • sklearn.base.BaseEstimator
others

로깅 동작은 어떻게 설정할 수 있나요?

변수 종류동작 방식예시데이터 타입
인스턴스 변수자동으로 로깅됨self.accuracyfloat
인스턴스 변수datasets=True일 때 로깅됨self.dfpd.DataFrame
인스턴스 변수datasets=False일 때는 로깅되지 않음self.dfpd.DataFrame
지역 변수로깅되지 않음accuracyfloat
지역 변수로깅되지 않음dfpd.DataFrame

아티팩트 계보(artifact lineage)가 추적되나요?

네. 스텝 A의 출력이자 스텝 B의 입력인 아티팩트가 있는 경우, 계보 DAG가 자동으로 생성됩니다. 이 동작의 예는 이 노트북과 이에 대응하는 W&B 아티팩트 페이지를 참고하세요.