Metaflow는 Netflix에서 만든 ML 워크플로 생성 및 실행용 프레임워크입니다.
이 인테그레이션을 사용하면 Metaflow의 step 및 플로우에 데코레이터를 적용해 파라미터와 artifact를 W&B에 자동으로 로깅할 수 있습니다.
- step에 데코레이터를 적용하면 해당 step 내 특정 유형에 대한 로깅을 켜거나 끌 수 있습니다.
- 플로우에 데코레이터를 적용하면 플로우의 모든 step에 대한 로깅을 켜거나 끌 수 있습니다.
API 키는 사용 중인 머신을 W&B에 인증하는 데 사용됩니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.
더 간편하게 하려면 User Settings로 바로 이동해 API 키를 생성하세요. 새로 생성한 API 키는 즉시 복사해 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
- 오른쪽 상단에 있는 사용자 프로필 아이콘을 클릭합니다.
- User Settings를 선택한 다음 API Keys 섹션까지 스크롤합니다.
로컬 환경에 wandb 라이브러리를 설치하고 로그인하려면 다음 단계를 따르세요.
wandb 버전 0.19.8 이하에서는 plum-dispatch 대신 fastcore 버전 1.8.0 이하(fastcore<1.8.0)를 설치하세요.
명령줄
Python
Python notebook
-
WANDB_API_KEY 환경 변수에 API 키를 설정합니다.
export WANDB_API_KEY=<your_api_key>
-
wandb 라이브러리를 설치하고 로그인합니다.
pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
wandb login
pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
import wandb
wandb.login()
!pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
import wandb
wandb.login()
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)
플로우에 데코레이터를 적용하는 것은 플로우를 구성하는 모든 step에 기본값으로 데코레이터를 적용하는 것과 같습니다.이 경우 WandbExampleFlow의 모든 step은 기본적으로 데이터셋과 모델을 로깅하며, 이는 각 step에 @wandb_log(datasets=True, models=True)를 적용하는 것과 같습니다.from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # 모든 @step에 데코레이터 적용
class WandbExampleFlow(FlowSpec):
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> 데이터셋으로 업로드
self.model_file = torch.load(...) # nn.Module -> 모델로 업로드
self.next(self.transform)
플로우에 데코레이터를 적용하는 것은 모든 step에 기본값으로 데코레이터를 적용하는 것과 같습니다. 즉, 나중에 step에 다른 @wandb_log를 적용하면 플로우 수준 데코레이션을 재정의합니다.이 예제에서는 다음과 같습니다:
start와 mid는 데이터셋과 모델을 모두 로깅합니다.
end는 데이터셋과 모델을 모두 로깅하지 않습니다.
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # start와 mid에 데코레이터를 적용하는 것과 동일
class WandbExampleFlow(FlowSpec):
# 이 step은 데이터셋과 모델을 로깅합니다
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> 데이터셋으로 업로드
self.model_file = torch.load(...) # nn.Module -> 모델로 업로드
self.next(self.mid)
# 이 step도 데이터셋과 모델을 로깅합니다
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> 데이터셋으로 업로드
self.model_file = torch.load(...) # nn.Module -> 모델로 업로드
self.next(self.end)
# 이 step은 재정의되어 데이터셋이나 모델을 로깅하지 않습니다
@wandb_log(datasets=False, models=False)
@step
def end(self):
self.raw_df = pd.read_csv(...).
self.model_file = torch.load(...)
캡처된 정보에는 세 가지 방법으로 접근할 수 있습니다. 로깅 중인 원래 Python 프로세스 내부에서 wandb client library를 사용하거나, web app UI를 사용하거나, Public API를 사용해 프로그래밍 방식으로 접근할 수 있습니다. Parameter는 W&B의 config에 저장되며 Overview tab에서 확인할 수 있습니다. datasets, models, others는 W&B Artifacts에 저장되며 Artifacts tab에서 확인할 수 있습니다. 기본 Python 유형은 W&B의 summary dict에 저장되며 Overview tab에서 확인할 수 있습니다. 외부에서 API를 사용해 이 정보를 프로그래밍 방식으로 조회하는 방법에 대한 자세한 내용은 Public API 가이드를 참조하세요.
| 데이터 | 클라이언트 라이브러리 | UI |
|---|
Parameter(...) | wandb.Run.config | Overview tab, 설정 |
datasets, models, others | wandb.Run.use_artifact("{var_name}:latest") | Artifacts tab |
기본 Python 유형 (dict, list, str 등) | wandb.Run.summary | Overview tab, Summary |
| kwarg | Options |
|---|
datasets | True: 데이터셋인 인스턴스 변수를 기록합니다False
|
models | True: 모델인 인스턴스 변수를 기록합니다False
|
others | True: pickle로 직렬화할 수 있는 기타 모든 항목을 기록합니다False
|
settings | wandb.Settings(…): 이 step 또는 flow에 사용할 wandb 설정을 직접 지정합니다None: wandb.Settings()를 전달하는 것과 같습니다
기본적으로: settings.run_group가 None이면 {flow_name}/{run_id}로 설정됩니다settings.run_job_type가 None이면 {run_job_type}/{step_name}로 설정됩니다
|
정확히 무엇을 로깅하나요? 모든 인스턴스 변수와 로컬 변수를 로깅하나요?
wandb_log는 인스턴스 변수만 로깅합니다. 로컬 변수는 절대 로깅되지 않습니다. 따라서 불필요한 데이터가 로깅되는 것을 방지할 수 있습니다.
현재는 다음 유형을 지원합니다:
| 로깅 설정 | 유형 |
|---|
| 기본값(항상 켜짐) | dict, list, set, str, int, float, bool
|
datasets | |
models | nn.Modulesklearn.base.BaseEstimator
|
others | |
| 변수 종류 | 동작 | 예시 | 데이터 유형 |
|---|
| 인스턴스 | 자동으로 로깅됨 | self.accuracy | float |
| 인스턴스 | datasets=True인 경우 로깅됨 | self.df | pd.DataFrame |
| 인스턴스 | datasets=False인 경우 로깅되지 않음 | self.df | pd.DataFrame |
| 로컬 | 로깅되지 않음 | accuracy | float |
| 로컬 | 로깅되지 않음 | df | pd.DataFrame |
예. step A의 출력이면서 동시에 step B의 입력인 artifact가 있으면, 리니지 DAG를 자동으로 생성합니다.
이 동작의 예시는 다음 notebook 및 해당 W&B Artifacts 페이지를 참조하세요.