> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-2626.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ML 파이프라인 컴포넌트 전반에서 실험을 추적하고 메트릭을 시각화할 수 있도록 W&B를 Kubeflow Pipelines와 통합하세요.

# Kubeflow Pipelines (kfp)

[Kubeflow Pipelines (kfp)](https://www.kubeflow.org/docs/components/pipelines/overview/) is 도커 컨테이너를 기반으로 이식 가능하고 확장 가능한 머신 러닝(ML) 워크플로를 빌드하고 배포하는 플랫폼입니다.

이 가이드에서는 파이프라인 컴포넌트의 파라미터와 아티팩트가 W\&B에서 자동으로 추적되도록 W\&B를 Kubeflow Pipelines와 통합하는 방법을 보여줍니다. 마지막에는 각 컴포넌트의 본문을 수정하지 않고도 kfp Python 함수형 컴포넌트에 데코레이터를 적용해 입력, 출력, 아티팩트를 W\&B에 로깅할 수 있습니다.

이 기능은 `wandb==0.12.11`부터 지원되며 `kfp<2.0.0`이 필요합니다.

<div id="sign-up-and-create-an-api-key">
  ## 가입하고 API 키 만들기
</div>

API 키는 머신이 W\&B에 인증되도록 합니다. 사용자 프로필에서 API 키를 발급할 수 있습니다.

<Note>
  더 간편하게 하려면 [User Settings](https://wandb.ai/settings)로 이동해 API 키를 생성하세요. API 키는 즉시 복사해 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
</Note>

1. 오른쪽 상단에 있는 사용자 프로필 아이콘을 클릭합니다.
2. **User Settings**를 선택한 다음 **API Keys** 섹션까지 스크롤합니다.

<div id="install-the-wandb-library-and-log-in">
  ## `wandb` 라이브러리 설치 및 로그인
</div>

로컬 환경에 `wandb` 라이브러리를 설치하고 로그인하려면 다음 단계를 따르세요.

<Tabs>
  <Tab title="명령줄">
    1. `WANDB_API_KEY` [환경 변수](/ko/models/track/environment-variables/)를 API 키로 설정합니다. `<>`로 묶인 값은 자신의 값으로 바꾸세요.

       ```bash theme={null}
       export WANDB_API_KEY=<your_api_key>
       ```

    2. `wandb` 라이브러리를 설치하고 로그인합니다.

       ```shell theme={null}
       pip install wandb

       wandb login
       ```
  </Tab>

  <Tab title="Python">
    ```bash theme={null}
    pip install wandb
    ```

    ```python theme={null}
    import wandb
    wandb.login()
    ```
  </Tab>

  <Tab title="Python notebook">
    ```notebook theme={null}
    !pip install wandb

    import wandb
    wandb.login()
    ```
  </Tab>
</Tabs>

<div id="decorate-your-components">
  ## 컴포넌트에 데코레이터 적용하기
</div>

`wandb` 라이브러리가 설치되어 있으면 이제 개별 파이프라인 컴포넌트에서 W\&B tracking을 활성화할 수 있습니다. `@wandb_log` 데코레이터를 추가하고 평소처럼 컴포넌트를 만드세요. 그러면 파이프라인을 실행할 때마다 입력 및 출력 파라미터와 아티팩트가 자동으로 W\&B에 로깅됩니다.

```python theme={null}
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)
```

<div id="pass-environment-variables-to-containers">
  ## 컨테이너에 환경 변수 전달하기
</div>

각 파이프라인 컴포넌트는 자체 컨테이너에서 실행되므로, 로컬 머신에서 사용 가능한 W\&B 인증 정보는 컴포넌트에 자동으로 전달되지 않습니다. 각 컴포넌트가 W\&B에 인증할 수 있도록 컨테이너에 [환경 변수](/ko/models/track/environment-variables/)를 명시적으로 전달해야 할 수 있습니다. 양방향 연결을 사용하려면 `WANDB_KUBEFLOW_URL` 환경 변수도 Kubeflow Pipelines 인스턴스의 기본 URL로 설정해야 합니다. 예를 들면 `https://kubeflow.mysite.com`입니다.

```python theme={null}
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)
```

<div id="access-your-data-programmatically">
  ## 프로그래밍 방식으로 데이터에 액세스하기
</div>

파이프라인 run이 W\&B에 로깅되기 시작하면, 추적된 데이터를 검토하거나 여러 방법으로 가져올 수 있습니다. 다음 섹션에서는 Kubeflow Pipelines UI, W\&B 웹 앱, 그리고 W\&B Public API에서 Runs에 액세스하는 방법을 설명합니다.

<div id="kubeflow-pipelines-ui">
  ### Kubeflow Pipelines UI
</div>

W\&B로 로깅된 Kubeflow Pipelines UI의 Run을 아무거나 클릭한 다음:

* **Input/Output** 및 **ML Metadata** 탭에서 입력과 출력에 대한 세부 정보를 확인하세요.
* **Visualizations** 탭에서 W\&B 웹 앱을 확인하세요.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2626/XhmnNyiZ55KfxLZn/images/integrations/kubeflow_app_pipelines_ui.png?fit=max&auto=format&n=XhmnNyiZ55KfxLZn&q=85&s=0a22436ac91a7d948dd64447c5e37dff" alt="Kubeflow UI의 W&B" width="1335" height="707" data-path="images/integrations/kubeflow_app_pipelines_ui.png" />
</Frame>

<div id="wb-web-app-ui">
  ### W\&B 웹 앱 UI
</div>

웹 앱 UI에는 Kubeflow Pipelines의 **Visualizations** 탭과 같은 내용이 있지만, 더 넓은 화면에서 볼 수 있습니다. 자세한 내용은 [W\&B 웹 앱 문서](/ko/models/app)를 참조하세요.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2626/XhmnNyiZ55KfxLZn/images/integrations/kubeflow_pipelines.png?fit=max&auto=format&n=XhmnNyiZ55KfxLZn&q=85&s=ab898a1abb5d81495206b117d7cb198e" alt="run 상세 정보" width="1856" height="1207" data-path="images/integrations/kubeflow_pipelines.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2626/XhmnNyiZ55KfxLZn/images/integrations/kubeflow_via_app.png?fit=max&auto=format&n=XhmnNyiZ55KfxLZn&q=85&s=e2543a9934ce8221ccec0ee49e21c586" alt="파이프라인 DAG" width="2556" height="1229" data-path="images/integrations/kubeflow_via_app.png" />
</Frame>

<div id="public-api">
  ### Public API
</div>

프로그래밍 방식으로 액세스하려면 [Public API를 참조하세요](/ko/models/ref/python/public-api/).

<div id="concept-mapping-from-kubeflow-pipelines-to-wb">
  ## Kubeflow Pipelines에서 W\&B로의 개념 매핑
</div>

다음 표는 Kubeflow Pipelines의 개념을 W\&B에 대응시킨 것입니다.

| Kubeflow Pipelines | W\&B                     | W\&B 내 위치                                       |
| ------------------ | ------------------------ | ----------------------------------------------- |
| 입력 스칼라             | [`config`](/ko/models/)  | [Overview tab](/ko/models/runs/#overview-tab)   |
| 출력 스칼라             | [`summary`](/ko/models/) | [Overview tab](/ko/models/runs/#overview-tab)   |
| 입력 아티팩트            | 입력 아티팩트                  | [Artifacts tab](/ko/models/runs/#artifacts-tab) |
| 출력 아티팩트            | 출력 아티팩트                  | [Artifacts tab](/ko/models/runs/#artifacts-tab) |

<div id="fine-grain-logging">
  ## 세밀한 로깅
</div>

`@wandb_log` 데코레이터는 입력과 출력을 자동으로 처리하지만, 각 에포크의 트레이닝 메트릭과 같은 중간 값은 캡처하지 않습니다. 로깅을 더 세밀하게 제어하려면 컴포넌트 곳곳에 `wandb.log()` 및 `wandb.log_artifact()` Call을 추가할 수 있습니다.

<div id="with-explicit-wandblog_artifact-calls">
  ### 명시적인 `wandb.log_artifact()` Call 사용
</div>

다음 예제에서는 모델을 트레이닝합니다. `@wandb_log` 데코레이터는 관련 입력과 출력을 자동으로 추적합니다. 트레이닝 과정을 로깅하려면 다음과 같이 해당 로깅을 명시적으로 추가할 수 있습니다:

```python theme={null}
@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)
```

<div id="with-implicit-wandb-integrations">
  ### 암시적인 `wandb` 인테그레이션 사용
</div>

[W\&B에서 지원하는 프레임워크 인테그레이션](/ko/models/integrations)을 사용 중인 경우, 콜백을 직접 전달할 수도 있습니다:

```python theme={null}
@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())
    ...  # 트레이닝 수행
```
