Metaflow

Metaflow와 W&B를 통합하는 방법

개요

Metaflow는 ML 워크플로우를 생성하고 실행하기 위해 Netflix에서 만든 프레임워크입니다.

이 인테그레이션을 통해 사용자는 Metaflow 단계 및 흐름에 데코레이터를 적용하여 파라미터와 Artifacts를 W&B에 자동으로 기록할 수 있습니다.

  • 단계를 데코레이팅하면 해당 단계 내의 특정 유형에 대한 로깅이 켜지거나 꺼집니다.
  • 흐름을 데코레이팅하면 흐름의 모든 단계에 대한 로깅이 켜지거나 꺼집니다.

퀵스타트

가입 및 API 키 생성

API 키는 사용자의 장치를 W&B에 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.

  1. 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
  3. Reveal을 클릭합니다. 표시된 API 키를 복사합니다. API 키를 숨기려면 페이지를 새로 고칩니다.

wandb 라이브러리 설치 및 로그인

wandb 라이브러리를 로컬에 설치하고 로그인하려면:

  1. WANDB_API_KEY 환경 변수를 API 키로 설정합니다.

    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.

    pip install -Uqqq metaflow fastcore wandb
    
    wandb login
    
pip install -Uqqq metaflow fastcore wandb
import wandb
wandb.login()
!pip install -Uqqq metaflow fastcore wandb

import wandb
wandb.login()

흐름 및 단계 데코레이팅

단계를 데코레이팅하면 해당 단계 내의 특정 유형에 대한 로깅이 켜지거나 꺼집니다.

이 예에서는 start의 모든 데이터셋과 Models가 기록됩니다.

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 -> upload as dataset
        self.model_file = torch.load(...)  # nn.Module    -> upload as model
        self.next(self.transform)

흐름을 데코레이팅하는 것은 구성 단계를 모두 기본값으로 데코레이팅하는 것과 같습니다.

이 경우 WandbExampleFlow의 모든 단계는 기본적으로 데이터셋과 Models를 기록하도록 기본 설정되어 있습니다. 이는 각 단계를 @wandb_log(datasets=True, models=True)로 데코레이팅하는 것과 같습니다.

from wandb.integration.metaflow import wandb_log

@wandb_log(datasets=True, models=True)  # decorate all @step 
class WandbExampleFlow(FlowSpec):
    @step
    def start(self):
        self.raw_df = pd.read_csv(...).    # pd.DataFrame -> upload as dataset
        self.model_file = torch.load(...)  # nn.Module    -> upload as model
        self.next(self.transform)

흐름을 데코레이팅하는 것은 모든 단계를 기본값으로 데코레이팅하는 것과 같습니다. 즉, 나중에 다른 @wandb_log로 단계를 데코레이팅하면 흐름 수준 데코레이션이 재정의됩니다.

이 예에서:

  • startmid는 데이터셋과 Models를 모두 기록합니다.
  • end는 데이터셋과 Models를 모두 기록하지 않습니다.
from wandb.integration.metaflow import wandb_log

@wandb_log(datasets=True, models=True)  # same as decorating start and mid
class WandbExampleFlow(FlowSpec):
  # this step will log datasets and models
  @step
  def start(self):
    self.raw_df = pd.read_csv(...).    # pd.DataFrame -> upload as dataset
    self.model_file = torch.load(...)  # nn.Module    -> upload as model
    self.next(self.mid)

  # this step will also log datasets and models
  @step
  def mid(self):
    self.raw_df = pd.read_csv(...).    # pd.DataFrame -> upload as dataset
    self.model_file = torch.load(...)  # nn.Module    -> upload as model
    self.next(self.end)

  # this step is overwritten and will NOT log datasets OR models
  @wandb_log(datasets=False, models=False)
  @step
  def end(self):
    self.raw_df = pd.read_csv(...).    
    self.model_file = torch.load(...)

프로그램 방식으로 데이터에 액세스

wandb 클라이언트 라이브러리를 사용하여 기록 중인 원래 Python 프로세스 내부, 웹 앱 UI 또는 Public API를 사용하여 프로그램 방식으로 캡처한 정보에 액세스할 수 있습니다. Parameter는 W&B의 config에 저장되며 Overview 탭에서 찾을 수 있습니다. datasets, modelsothersW&B Artifacts에 저장되며 Artifacts 탭에서 찾을 수 있습니다. 기본 Python 유형은 W&B의 summary 사전에 저장되며 Overview 탭에서 찾을 수 있습니다. API를 사용하여 외부에서 이 정보를 프로그램 방식으로 가져오는 방법에 대한 자세한 내용은 Public API 가이드를 참조하십시오.

빠른 참조

데이터 클라이언트 라이브러리 UI
Parameter(...) wandb.config Overview 탭, Config
datasets, models, others wandb.use_artifact("{var_name}:latest") Artifacts 탭
기본 Python 유형 (dict, list, str, etc.) wandb.summary Overview 탭, Summary

wandb_log kwargs

kwarg 옵션
datasets
  • True: 데이터셋인 인스턴스 변수 기록
  • False
models
  • True: 모델인 인스턴스 변수 기록
  • False
others
  • True: 직렬화 가능한 다른 모든 항목을 피클로 기록
  • False
settings
  • wandb.Settings(…): 이 단계 또는 흐름에 대한 사용자 지정 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.accuracy float
인스턴스 datasets=True인 경우 기록 self.df pd.DataFrame
인스턴스 datasets=False인 경우 기록 안 함 self.df pd.DataFrame
로컬 절대 기록 안 함 accuracy float
로컬 절대 기록 안 함 df pd.DataFrame

Artifact 계보가 추적됩니까?

예. Artifact가 A 단계의 출력이고 B 단계의 입력인 경우 계보 DAG가 자동으로 구성됩니다.

이 행동의 예는 이 노트북과 해당 W&B Artifacts 페이지를 참조하십시오.