Skip to main content

Overview

Metaflow는 Netflix에서 만든 ML 워크플로 생성 및 실행용 프레임워크입니다. 이 인테그레이션을 사용하면 Metaflow의 step 및 플로우에 데코레이터를 적용해 파라미터와 artifact를 W&B에 자동으로 로깅할 수 있습니다.
  • step에 데코레이터를 적용하면 해당 step 내 특정 유형에 대한 로깅을 켜거나 끌 수 있습니다.
  • 플로우에 데코레이터를 적용하면 플로우의 모든 step에 대한 로깅을 켜거나 끌 수 있습니다.

퀵스타트

가입하고 API 키 생성하기

API 키는 사용 중인 머신을 W&B에 인증하는 데 사용됩니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.
더 간편하게 하려면 User Settings로 바로 이동해 API 키를 생성하세요. 새로 생성한 API 키는 즉시 복사해 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
  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 키를 설정합니다.
    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.
    pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
    
    wandb login
    

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

step에 데코레이터를 적용하면 해당 step 내 특정 유형에 대한 로깅을 켜거나 끌 수 있습니다.이 예제에서는 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 client library를 사용하거나, web app UI를 사용하거나, Public API를 사용해 프로그래밍 방식으로 접근할 수 있습니다. Parameter는 W&B의 config에 저장되며 Overview tab에서 확인할 수 있습니다. datasets, models, othersW&B Artifacts에 저장되며 Artifacts tab에서 확인할 수 있습니다. 기본 Python 유형은 W&B의 summary dict에 저장되며 Overview tab에서 확인할 수 있습니다. 외부에서 API를 사용해 이 정보를 프로그래밍 방식으로 조회하는 방법에 대한 자세한 내용은 Public API 가이드를 참조하세요.

빠른 레퍼런스

데이터클라이언트 라이브러리UI
Parameter(...)wandb.Run.configOverview tab, 설정
datasets, models, otherswandb.Run.use_artifact("{var_name}:latest")Artifacts tab
기본 Python 유형 (dict, list, str 등)wandb.Run.summaryOverview tab, 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는 인스턴스 변수만 로깅합니다. 로컬 변수는 절대 로깅되지 않습니다. 따라서 불필요한 데이터가 로깅되는 것을 방지할 수 있습니다.

어떤 데이터 유형이 로깅되나요?

현재는 다음 유형을 지원합니다:
로깅 설정유형
기본값(항상 켜짐)
  • 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 리니지가 추적되나요?

예. step A의 출력이면서 동시에 step B의 입력인 artifact가 있으면, 리니지 DAG를 자동으로 생성합니다. 이 동작의 예시는 다음 notebook 및 해당 W&B Artifacts 페이지를 참조하세요.