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

> Python SDK를 사용해 run 초기화, 하이퍼파라미터, metric logging을 추적하는 W&B 실험을 생성합니다.

# Experiment 만들기

W\&B Python SDK를 사용해 머신 러닝 실험을 추적하세요. 그런 다음 대화형 대시보드에서 결과를 확인하거나, 데이터를 Python으로 내보내 [W\&B Public API](/ko/models/ref/python/public-api/)를 통해 프로그래밍 방식으로 액세스할 수 있습니다.

이 가이드에서는 W\&B의 building blocks를 사용해 W\&B 실험을 만드는 방법을 설명합니다.

<div id="how-to-create-a-wb-experiment">
  ## W\&B 실험을 생성하는 방법
</div>

다음 네 단계로 W\&B 실험을 생성하세요:

1. [W\&B run 초기화](#initialize-a-wb-run)
2. [하이퍼파라미터 딕셔너리 캡처](#capture-a-dictionary-of-hyperparameters)
3. [트레이닝 루프 안에서 메트릭 기록](#log-metrics-inside-your-training-loop)
4. [W\&B에 아티팩트 로깅하기](/ko/models/track/create-an-experiment#log-an-artifact-to-w%26b)

<div id="initialize-a-wb-run">
  ### W\&B run 초기화
</div>

[`wandb.init()`](/ko/models/ref/python/functions/init)을 사용해 W\&B run을 생성합니다.

다음 스니펫은 `“cat-classification”`라는 이름의 W\&B 프로젝트에서, 이 run을 쉽게 파악할 수 있도록 설명을 `“My first experiment”`로 지정해 run을 생성합니다. `“baseline”` 및 `“paper1”` 태그도 포함되어 있으며, 이 run이 향후 논문 출판을 위한 기준선 실험임을 나타냅니다.

```python theme={null}
import wandb

with wandb.init(
    project="cat-classification",
    notes="My first experiment",
    tags=["baseline", "paper1"],
) as run:
    ...
```

`wandb.init()`은 [Run](/ko/models/ref/python/experiments/run) 객체를 반환합니다.

<Note>
  참고: `wandb.init()`을 호출할 때 해당 프로젝트가 이미 존재하면 Runs는 기존 프로젝트에 추가됩니다. 예를 들어 `“cat-classification”`이라는 프로젝트가 이미 있으면, 그 프로젝트는 계속 유지되며 삭제되지 않습니다. 대신 해당 프로젝트에 새 run이 추가됩니다.
</Note>

<div id="capture-a-dictionary-of-hyperparameters">
  ### 하이퍼파라미터 딕셔너리 기록하기
</div>

학습률이나 모델 유형과 같은 하이퍼파라미터를 딕셔너리로 저장합니다. 설정에 저장해 둔 모델 설정은 나중에 결과를 정리하고 쿼리하는 데 유용합니다.

```python theme={null}
with wandb.init(
    ...,
    config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
    ...
```

실험을 설정하는 방법에 대한 자세한 내용은 [Experiments 설정](./config)을 참조하세요.

<div id="log-metrics-inside-your-training-loop">
  ### 트레이닝 루프 내에서 메트릭 로깅하기
</div>

accuracy, loss와 같은 각 트레이닝 step의 메트릭을 로깅하려면 [`run.log()`](/ko/models/ref/python/experiments/run/#method-runlog)을 호출하세요.

```python theme={null}
model, dataloader = get_model(), get_data()

for epoch in range(run.config["epochs"]):
    for batch in dataloader:
        loss, accuracy = model.training_step()
        run.log({"accuracy": accuracy, "loss": loss})
```

W\&B에 로깅할 수 있는 다양한 데이터 유형에 대한 자세한 내용은 [객체 및 미디어 로깅하기](/ko/models/track/log/)를 참조하세요.

<div id="log-an-artifact-to-wb">
  ### W\&B에 Artifact 로깅하기
</div>

선택적으로 W\&B Artifact를 로깅할 수 있습니다. Artifacts를 사용하면 데이터셋과 모델의 버전을 쉽게 관리할 수 있습니다.

```python theme={null}
# 파일이나 디렉토리를 저장할 수 있습니다. 이 예제에서는 모델에
# ONNX 파일을 출력하는 save() 메서드가 있다고 가정합니다.
model.save("path_to_model.onnx")
run.log_artifact("path_to_model.onnx", name="trained-model", type="model")
```

[Artifacts](/ko/models/artifacts/)에 대해 자세히 알아보거나 [레지스트리](/ko/models/registry/)에서 모델 버전 관리에 대해 알아보세요.

<div id="putting-it-all-together">
  ### 모두 종합하기
</div>

앞서 살펴본 코드 스니펫을 모두 포함한 전체 스크립트는 아래와 같습니다:

```python theme={null}
import wandb

with wandb.init(
    project="cat-classification",
    notes="",
    tags=["baseline", "paper1"],
    # run의 하이퍼파라미터를 기록합니다.
    config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
    # 모델과 데이터를 설정합니다.
    model, dataloader = get_model(), get_data()

    # 메트릭을 로깅하면서 트레이닝을 실행하여 모델 성능을 시각화합니다.
    for epoch in range(run.config["epochs"]):
        for batch in dataloader:
            loss, accuracy = model.training_step()
            run.log({"accuracy": accuracy, "loss": loss})

    # 트레이닝된 모델을 artifact로 업로드합니다.
    model.save("path_to_model.onnx")
    run.log_artifact("path_to_model.onnx", name="trained-model", type="model")
```

<div id="next-steps-visualize-your-experiment">
  ## 다음 단계: 실험 시각화
</div>

프로젝트의 Workspace를 머신 러닝 모델의 결과를 정리하고 시각화하는 공간으로 활용하세요. [병렬 좌표 플롯](/ko/models/app/features/panels/parallel-coordinates/), [파라미터 중요도 분석](/ko/models/app/features/panels/parameter-importance/), [기타 차트 유형](/ko/models/app/features/panels/)과 같은 대화형 차트를 만들 수 있습니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-brace-expansion-upgrade/Cib-aCOngdBZ572A/images/sweeps/quickstart_dashboard_example.png?fit=max&auto=format&n=Cib-aCOngdBZ572A&q=85&s=d98db41b15c39afeaf74a924790395eb" alt="퀵스타트 Sweeps Workspace 예시" width="4302" height="3048" data-path="images/sweeps/quickstart_dashboard_example.png" />
</Frame>

실험과 특정 run을 확인하는 방법에 대한 자세한 내용은 [실험 결과 보기](/ko/models/track/workspaces/)를 참조하세요.

<div id="best-practices">
  ## 모범 사례
</div>

다음은 실험을 만들 때 고려할 수 있는 몇 가지 권장 지침입니다.

* **컨텍스트 관리자로 Runs 관리**: `with` 문에서 `wandb.init()`를 사용하면 코드 실행이 끝나거나 예외가 발생했을 때 run이 자동으로 종료됩니다.
  * Jupyter notebook에서는 run object를 직접 관리하는 편이 더 나을 수 있습니다. 이 경우 `finish()`를 호출해 완료로 표시하세요.

    ```python theme={null}
    # notebook cell에서:
    run = wandb.init()

    # 다른 cell에서:
    run.finish()
    ```
* **Config**: 모델을 재현하는 데 필요한 하이퍼파라미터, 모델 아키텍처, 데이터셋 정보 및 기타 값을 추적하세요. 자세한 내용은 [View the config in the Overview section of a run in the W\&B App](/ko/models/track/config#view-config-values-in-the-w\&b-app)을 참고하세요.
* **Project**: [projects](/ko/models/track/project-page)를 사용해 실험을 한곳에서 구성하세요. 여기에서 결과를 시각화하고, Runs를 비교하고, 아티팩트를 보고 다운로드하고, 자동화를 만들 수 있습니다.
* **Notes**: `baseline model` 또는 `tuned hyperparameters`처럼 run의 목적을 설명하는 notes를 추가하세요. 나중에 W\&B App의 run 개요에서 notes를 편집할 수 있습니다.
* **Job types**: 작업(`train`, `test`, `inference` 등)별로 Runs를 구성하고 필터링할 수 있도록 [Runs에 job type 추가](/ko/models/runs/grouping#organize-runs-by-job-type)하세요.
* **Tags**: 로깅된 메트릭이나 아티팩트만으로는 분명하지 않을 수 있는 특성이나 속성으로 Runs에 레이블을 지정하려면 [Runs에 tags 추가](/ko/models/runs/tags)하세요.

다음 예시에서는 이러한 모범 사례를 사용해 W\&B run을 초기화하는 방법을 보여줍니다.

```python theme={null}
import wandb

config = {
    "learning_rate": 0.01,
    "momentum": 0.2,
    "architecture": "CNN",
    "dataset_id": "cats-0192",
}

with wandb.init(
    project="detect-cats",
    notes="tweak baseline",
    tags=["baseline", "paper1"],
    config=config,
) as run:
    ...
```

사용 가능한 Parameter에 대한 자세한 내용은 [Python SDK 레퍼런스 가이드](/ko/models/ref/python/)의 [`wandb.init()`](/ko/models/ref/python/functions/init)을 참조하세요.
