> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/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) 워크플로를 빌드하고 배포하는 플랫폼입니다.

이 인테그레이션을 사용하면 사용자가 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_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>

컨테이너에 [환경 변수](/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>

<div id="via-the-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/mVjDwbx0mC8gYx-b/images/integrations/kubeflow_app_pipelines_ui.png?fit=max&auto=format&n=mVjDwbx0mC8gYx-b&q=85&s=0c14c98504ea4e85f2f31fbc7e868e41" alt="Kubeflow UI의 W&B" width="1335" height="707" data-path="images/integrations/kubeflow_app_pipelines_ui.png" />
</Frame>

<div id="via-the-web-app-ui">
  ### 웹 앱 UI를 통해
</div>

웹 앱 UI에는 Kubeflow Pipelines의 `Visualizations` 탭과 같은 내용이 있지만, 더 넓은 화면에서 볼 수 있습니다. [웹 앱 UI에 대해 자세히 알아보려면 여기](/ko/models/app)를 참조하세요.

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

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

<div id="via-the-public-api-for-programmatic-access">
  ### 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)   |
| 입력 Artifact        | 입력 Artifact              | [Artifacts tab](/ko/models/runs/#artifacts-tab) |
| 출력 Artifact        | 출력 Artifact              | [Artifacts tab](/ko/models/runs/#artifacts-tab) |

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

로깅을 더 세밀하게 제어하려면 컴포넌트 곳곳에 `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())
    ...  # 트레이닝 수행
```
