Skip to main content
Kubeflow Pipelines (kfp) is 도커 컨테이너를 기반으로 이식 가능하고 확장 가능한 머신 러닝(ML) 워크플로를 빌드하고 배포하는 플랫폼입니다. 이 인테그레이션을 사용하면 사용자가 kfp Python 함수형 컴포넌트에 데코레이터를 적용해 파라미터와 아티팩트를 W&B에 자동으로 로깅할 수 있습니다. 이 기능은 wandb==0.12.11부터 지원되며 kfp<2.0.0이 필요합니다.

가입하고 API 키 만들기

API 키는 머신이 W&B에 인증되도록 합니다. 사용자 프로필에서 API 키를 발급할 수 있습니다.
더 간편하게 하려면 User Settings로 바로 이동해 API 키를 생성하세요. 새로 생성한 API 키는 즉시 복사해 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
  1. 오른쪽 상단에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음 API Keys 섹션까지 스크롤합니다.

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

로컬 환경에 wandb 라이브러리를 설치하고 로그인하려면 다음 단계를 따르세요.
  1. WANDB_API_KEY 환경 변수를 API 키로 설정합니다.
    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.
    pip install wandb
    
    wandb login
    

컴포넌트에 데코레이터 적용하기

@wandb_log 데코레이터를 추가하고 평소처럼 컴포넌트를 만드세요. 그러면 파이프라인을 실행할 때마다 입력/출력 파라미터와 아티팩트가 자동으로 W&B에 로깅됩니다.
from kfp import components
from wandb.integration.kfp import wandb_log


@wandb_log
def add(a: float, b: float) -> float:
    return a + b


add = components.create_component_from_func(add)

컨테이너에 환경 변수 전달하기

컨테이너에 환경 변수를 명시적으로 전달해야 할 수 있습니다. 양방향 연결을 사용하려면 WANDB_KUBEFLOW_URL 환경 변수도 Kubeflow Pipelines 인스턴스의 기본 URL로 설정해야 합니다. 예를 들면 https://kubeflow.mysite.com입니다.
import os
from kubernetes.client.models import V1EnvVar


def add_wandb_env_variables(op):
    env = {
        "WANDB_API_KEY": os.getenv("WANDB_API_KEY"),
        "WANDB_BASE_URL": os.getenv("WANDB_BASE_URL"),
    }

    for name, value in env.items():
        op = op.add_env_variable(V1EnvVar(name, value))
    return op


@dsl.pipeline(name="example-pipeline")
def example_pipeline(param1: str, param2: int):
    conf = dsl.get_pipeline_conf()
    conf.add_op_transformer(add_wandb_env_variables)

코드로 데이터에 액세스하기

Kubeflow Pipelines UI를 통해

W&B로 로깅된 Kubeflow Pipelines UI의 Run을 아무거나 클릭하세요.
  • Input/OutputML Metadata 탭에서 입력과 출력에 대한 세부 정보를 확인하세요.
  • Visualizations 탭에서 W&B 웹 앱을 확인하세요.
Kubeflow UI의 W&B

웹 앱 UI를 통해

웹 앱 UI에는 Kubeflow Pipelines의 Visualizations 탭과 같은 내용이 있지만, 더 넓은 화면에서 볼 수 있습니다. 웹 앱 UI에 대해 자세히 알아보려면 여기를 참조하세요.
run 상세 정보
파이프라인 DAG

Public API를 통해 (프로그래밍 방식으로 액세스)

Kubeflow Pipelines에서 W&B로의 개념 매핑

다음은 Kubeflow Pipelines의 개념을 W&B에 대응시킨 표입니다.
Kubeflow PipelinesW&BW&B 내 위치
입력 스칼라configOverview tab
출력 스칼라summaryOverview tab
입력 Artifact입력 ArtifactArtifacts tab
출력 Artifact출력 ArtifactArtifacts tab

세밀한 로깅

로깅을 더 세밀하게 제어하려면 컴포넌트 곳곳에 wandb.logwandb.log_artifact calls를 추가할 수 있습니다.

명시적인 wandb.log_artifacts 호출 사용

아래 이 예제에서는 모델을 트레이닝합니다. @wandb_log 데코레이터는 관련 입력과 출력을 자동으로 추적합니다. 트레이닝 과정을 로깅하려면 다음과 같이 해당 로깅을 명시적으로 추가할 수 있습니다:
@wandb_log
def train_model(
    train_dataloader_path: components.InputPath("dataloader"),
    test_dataloader_path: components.InputPath("dataloader"),
    model_path: components.OutputPath("pytorch_model"),
):
    with wandb.init() as run:
        ...
        for epoch in epochs:
            for batch_idx, (data, target) in enumerate(train_dataloader):
                ...
                if batch_idx % log_interval == 0:
                    run.log(
                        {"epoch": epoch, "step": batch_idx * len(data), "loss": loss.item()}
                    )
            ...
            run.log_artifact(model_artifact)

암시적 wandb 인테그레이션 사용 시

지원되는 프레임워크 인테그레이션을 사용 중이라면 콜백을 직접 전달할 수도 있습니다:
@wandb_log
def train_model(
    train_dataloader_path: components.InputPath("dataloader"),
    test_dataloader_path: components.InputPath("dataloader"),
    model_path: components.OutputPath("pytorch_model"),
):
    from pytorch_lightning.loggers import WandbLogger
    from pytorch_lightning import Trainer

    trainer = Trainer(logger=WandbLogger())
    ...  # 트레이닝 수행