메인 콘텐츠로 건너뛰기
W&B Python SDK를 사용하여 머신러닝 실험을 추적할 수 있습니다. 그런 다음 인터랙티브 대시보드에서 결과를 검토하거나, 데이터를 Python으로 내보내 W&B Public API를 통해 프로그래밍 방식으로 액세스할 수 있습니다. 이 가이드는 W&B의 구성 요소를 사용하여 W&B Experiment를 생성하는 방법을 설명합니다.

W&B Experiment 생성 방법

다음 네 단계로 W&B Experiment를 생성할 수 있습니다:
  1. W&B run 초기화
  2. 하이퍼파라미터 사전 캡처
  3. 트레이닝 루프에서 메트릭 로깅
  4. W&B에 아티팩트 로깅

W&B run 초기화하기

wandb.init()를 사용해서 W&B run을 생성합니다. 다음 스니펫은 “cat-classification”이라는 이름의 W&B 프로젝트에서 run을 생성하고, 이 run을 식별하기 쉽도록 설명을 “My first experiment”로 설정합니다. 또한 이 run이 향후 논문 발표를 위한 기준선 실험임을 기억하기 위해 “baseline”“paper1” 태그를 포함합니다.
import wandb

with wandb.init(
    project="cat-classification",
    notes="My first experiment",
    tags=["baseline", "paper1"],
) as run:
    ...
wandb.init()Run 객체를 반환합니다.
참고: wandb.init()를 호출할 때 동일한 이름의 프로젝트가 이미 존재하면, 새 run은 기존 프로젝트에 추가됩니다. 예를 들어 이미 "cat-classification"이라는 프로젝트가 있다면, 그 프로젝트는 계속 존재하며 삭제되지 않습니다. 대신 해당 프로젝트에 새로운 run이 추가됩니다.

하이퍼파라미터 사전 캡처하기

learning rate나 모델 타입과 같은 하이퍼파라미터를 사전 형태로 저장하세요. config에 캡처해 둔 모델 설정은 나중에 결과를 정리하고 조회하는 데 유용합니다.
with wandb.init(
    ...,
    config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
    ...
실험 구성 방법에 대한 자세한 내용은 Configure Experiments를 참조하세요.

트레이닝 루프 안에서 메트릭 기록하기

run.log()을(를) 호출하여 정확도, 손실과 같은 각 트레이닝 스텝에 대한 메트릭을 기록합니다.
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로 로깅할 수 있는 다양한 데이터 타입에 대해 더 알아보려면 Experiments에서 데이터 로깅하기를 참고하세요.

W&B에 Artifact 로깅하기

선택적으로 W&B Artifact를 로깅할 수 있습니다. Artifacts를 사용하면 데이터셋과 모델을 쉽게 버전 관리할 수 있습니다.
# 파일이나 디렉토리를 저장할 수 있습니다. 이 예시에서는 모델에
# ONNX 파일을 출력하는 save() 메서드가 있다고 가정합니다.
model.save("path_to_model.onnx")
run.log_artifact("path_to_model.onnx", name="trained-model", type="model")
Artifacts에 대해 자세히 알아보거나 Registry에서 모델 버전 관리 방법을 확인하세요.

지금까지 내용을 하나로 정리하기

앞에서 살펴본 코드 스니펫을 모두 포함한 전체 스크립트는 아래와 같습니다.
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})

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

다음 단계: 실험 시각화하기

W&B 대시보드를 머신러닝 모델 결과를 정리하고 시각화하는 중앙 허브로 활용하세요. 몇 번의 클릭만으로 평행좌표 플롯, 파라미터 중요도 분석, 추가 차트 유형과 같은 풍부하고 대화형 차트를 구성할 수 있습니다.
퀵스타트 Sweeps 대시보드 예시
실험과 개별 run을 시각화하는 방법에 대한 자세한 내용은 실험 결과 시각화를 참조하세요.

모범 사례

다음은 실험을 생성할 때 고려해야 할 몇 가지 권장 가이드라인입니다:
  1. run을 종료하세요: with 문 안에서 wandb.init()을 사용하면 코드가 완료되거나 예외가 발생할 때 run이 자동으로 종료된 것으로 표시됩니다.
    • Jupyter 노트북에서는 직접 Run 객체를 관리하는 것이 더 편리할 수 있습니다. 이 경우 Run 객체에서 finish()를 명시적으로 호출하여 완료되었음을 표시할 수 있습니다:
      # 노트북 셀에서:
      run = wandb.init()
      
      # 다른 셀에서:
      run.finish()
      
  2. Config: 하이퍼파라미터, 아키텍처, 데이터셋, 그리고 모델 재현에 사용하고 싶은 기타 모든 항목을 추적하세요. 이 값들은 열(column)에 표시되며, config 열을 사용해 앱에서 run을 동적으로 그룹화, 정렬, 필터링할 수 있습니다.
  3. Project: 프로젝트는 함께 비교할 수 있는 일련의 실험입니다. 각 프로젝트에는 전용 대시보드 페이지가 생성되며, 서로 다른 run 그룹을 쉽게 켜고 끄면서 다양한 모델 버전을 비교할 수 있습니다.
  4. Notes: 스크립트에서 바로 간단한 커밋 메시지를 설정하세요. W&B App의 run 개요(Overview) 섹션에서 노트를 편집하고 확인할 수 있습니다.
  5. Tags: 베이스라인 run과 즐겨찾는 run을 식별하세요. 태그를 사용하여 run을 필터링할 수 있습니다. 나중에 W&B App에서 프로젝트 대시보드의 개요(Overview) 섹션에서 태그를 수정할 수 있습니다.
  6. 실험을 비교하기 위해 여러 run 세트를 만드세요: 실험을 비교할 때는 여러 run 세트를 만들어 메트릭을 쉽게 비교할 수 있도록 하세요. 동일한 차트나 차트 그룹에서 run 세트를 켜거나 끌 수 있습니다.
다음 코드 스니펫은 위에 나열한 모범 사례를 사용하여 W&B Experiment를 정의하는 방법을 보여줍니다:
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:
    ...
W&B Experiment를 정의할 때 사용 가능한 파라미터에 대한 자세한 내용은 API Reference Guidewandb.init() API 문서를 참고하세요.