Overview
Metaflow는 Netflix 에서 ML 워크플로우를 생성하고 실행하기 위해 만든 프레임워크입니다.
이 인테그레이션을 통해 사용자는 Metaflow steps and flows에 데코레이터를 적용하여 파라미터와 Artifacts를 W&B에 자동으로 로그할 수 있습니다.
- step에 데코레이터를 사용하면 해당 step 내의 특정 유형에 대해 로그 기록 여부를 설정할 수 있습니다.
- flow에 데코레이터를 사용하면 flow 내의 모든 step에 대해 로그 기록 여부를 설정할 수 있습니다.
Quickstart
회원 가입 및 API 키 생성
API 키는 W&B에서 사용자의 머신을 인증하는 역할을 합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.
For a more streamlined approach, create an API key by going directly to User Settings. Copy the newly created API key immediately and save it in a secure location such as a password manager.
- 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
- User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
wandb 라이브러리 설치 및 로그인
로컬에 wandb 라이브러리를 설치하고 로그인하려면 다음을 수행하세요:
wandb 버전 0.19.8 이하를 사용하는 경우, plum-dispatch 대신 fastcore 버전 1.8.0 이하(fastcore<1.8.0)를 설치하세요.
Command Line
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()
Flows 및 Steps 데코레이팅
step을 데코레이팅하면 해당 step 내의 특정 유형에 대해 로그 기록 여부를 설정할 수 있습니다.이 예시에서는 start에 있는 모든 Datasets와 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 -> dataset으로 업로드
self.model_file = torch.load(...) # nn.Module -> model로 업로드
self.next(self.transform)
flow를 데코레이팅하는 것은 구성된 모든 step을 기본값으로 데코레이팅하는 것과 같습니다.이 경우, WandbExampleFlow의 모든 step은 각 step을 @wandb_log(datasets=True, models=True)로 데코레이팅한 것과 마찬가지로 기본적으로 Datasets와 Models를 로그하도록 설정됩니다.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 -> dataset으로 업로드
self.model_file = torch.load(...) # nn.Module -> model로 업로드
self.next(self.transform)
flow를 데코레이팅하는 것은 모든 step을 기본값으로 데코레이팅하는 것과 같습니다. 즉, 나중에 Step을 다른 @wandb_log로 데코레이팅하면 flow 수준의 설정을 덮어씁니다.이 예시에서는 다음과 같습니다:
start와 mid는 Datasets와 Models를 모두 로그합니다.
end는 Datasets와 Models를 모두 로그하지 않습니다.
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # start와 mid를 데코레이팅하는 것과 동일
class WandbExampleFlow(FlowSpec):
# 이 step은 datasets와 models를 로그합니다
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> dataset으로 업로드
self.model_file = torch.load(...) # nn.Module -> model로 업로드
self.next(self.mid)
# 이 step도 datasets와 models를 로그합니다
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> dataset으로 업로드
self.model_file = torch.load(...) # nn.Module -> model로 업로드
self.next(self.end)
# 이 step은 설정을 덮어씌워 datasets와 models를 로그하지 않습니다
@wandb_log(datasets=False, models=False)
@step
def end(self):
self.raw_df = pd.read_csv(...).
self.model_file = torch.load(...)
데이터에 프로그래밍 방식으로 엑세스하기
캡처된 정보에 엑세스하는 방법은 세 가지가 있습니다: 로그가 기록되고 있는 원래 Python 프로세스 내부에서 wandb 클라이언트 라이브러리를 사용하거나, 웹 앱 UI를 사용하거나, Public API를 사용하여 프로그래밍 방식으로 엑세스할 수 있습니다. Parameter는 W&B의 config에 저장되며 Overview 탭에서 확인할 수 있습니다. datasets, models, others는 W&B Artifacts에 저장되며 Artifacts 탭에서 확인할 수 있습니다. 기본 Python 유형은 W&B의 summary 딕셔너리에 저장되며 Overview 탭에서 확인할 수 있습니다. 외부에서 API를 사용하여 이 정보를 프로그래밍 방식으로 가져오는 방법에 대한 자세한 내용은 Public API 가이드를 참조하세요.
빠른 참조
| 데이터 | 클라이언트 라이브러리 | UI |
|---|
Parameter(...) | wandb.Run.config | Overview 탭, Config |
datasets, models, others | wandb.Run.use_artifact("{var_name}:latest") | Artifacts 탭 |
기본 Python 유형 (dict, list, str 등) | wandb.Run.summary | Overview 탭, Summary |
wandb_log kwargs
| kwarg | 옵션 |
|---|
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}으로 설정됩니다
|
자주 묻는 질문 (FAQ)
정확히 무엇이 로그되나요? 모든 인스턴스 변수와 지역 변수가 로그되나요?
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 |
Artifact 계보(lineage)가 추적되나요?
네. step A의 출력이고 step B의 입력인 Artifact가 있는 경우, 자동으로 계보 DAG를 구성해 드립니다.
이 행동의 예시는 이 노트북과 그에 해당하는 W&B Artifacts 페이지에서 확인할 수 있습니다.