메인 콘텐츠로 건너뛰기
W&B Python SDK를 사용하여 메트릭, 미디어 또는 사용자 정의 객체의 딕셔너리를 step 단위로 로깅합니다. W&B는 각 step마다 key-value 쌍을 수집하고, wandb.Run.log()으로 데이터를 로깅할 때마다 이를 하나의 통합 딕셔너리에 저장합니다. 스크립트에서 로깅된 데이터는 먼저 로컬 머신의 wandb 디렉터리에 저장된 뒤, W&B 클라우드 또는 private server로 동기화됩니다.
key-value 쌍은 각 step에 대해 동일한 값을 전달한 경우에만 하나의 통합 딕셔너리에 저장됩니다. step에 서로 다른 값을 로깅하면, W&B는 수집된 모든 key와 value를 메모리에 기록합니다.
기본적으로 wandb.Run.log()을 호출할 때마다 새로운 step이 됩니다. W&B는 차트와 패널을 생성할 때 step을 기본 x축으로 사용합니다. 필요에 따라 사용자 정의 x축을 생성해 사용할 수 있고, 사용자 정의 요약 메트릭을 수집할 수도 있습니다. 자세한 내용은 Customize log axes를 참고하세요.
step(0, 1, 2, …)에 순차적인 값을 로깅하려면 wandb.Run.log()를 사용하십시오. 특정 history step에 직접 기록하는 것은 불가능합니다. W&B는 “현재” step과 “다음” step에만 기록합니다.

자동으로 로깅되는 데이터

W&B는 W&B 실험 동안 다음 정보를 자동으로 로깅합니다:
  • 시스템 메트릭: CPU 및 GPU 사용량, 네트워크 등. GPU 메트릭은 nvidia-smi로 가져옵니다.
  • 명령줄: stdout과 stderr가 수집되어 실행 페이지의 Logs 탭에 표시됩니다.
계정의 Settings 페이지에서 Code Saving을 켜서 다음 항목도 로깅합니다:
  • Git 커밋: 최신 git 커밋을 가져와 실행 페이지의 Overview 탭에 표시하며, 커밋되지 않은 변경 사항이 있는 경우 diff.patch 파일도 함께 표시합니다.
  • Dependencies: requirements.txt 파일이 업로드되어 실행 페이지의 Files 탭에 표시되며, 해당 실행을 위해 wandb 디렉터리에 저장하는 모든 파일도 함께 표시됩니다.

특정 W&B API 호출에서 어떤 데이터가 기록되나요?

W&B에서는 어떤 내용을 기록할지 정확하게 지정할 수 있습니다. 아래는 일반적으로 많이 기록하는 객체들입니다:
  • 데이터셋: 이미지나 기타 데이터셋 샘플을 W&B로 스트리밍하려면 명시적으로 로그해야 합니다.
  • 플롯(Plots): wandb.Run.log()와 함께 wandb.plot()을 사용해 차트를 추적하세요. 자세한 내용은 플롯 로깅을 참고하세요.
  • 테이블(Tables): wandb.Table을 사용해 W&B에서 시각화하고 조회할 데이터를 로그하세요. 자세한 내용은 테이블 로깅을 참고하세요.
  • PyTorch 그래디언트: wandb.Run.watch(model)을 추가해 가중치의 그래디언트를 UI에서 히스토그램으로 확인할 수 있습니다.
  • 설정 정보(Configuration information): 하이퍼파라미터, 데이터셋 링크, 사용 중인 아키텍처 이름 등을 설정(config) 파라미터로 로그하세요. 다음과 같이 전달합니다: wandb.init(config=your_config_dictionary).
  • 메트릭(Metrics): wandb.Run.log()을 사용해 모델에서 나오는 메트릭을 기록하세요. 정확도, 손실(loss) 등의 메트릭을 학습 루프 내부에서 로그하면 UI에서 실시간으로 업데이트되는 그래프를 볼 수 있습니다.

메트릭 이름 제약 조건

GraphQL의 제한 사항으로 인해 W&B의 메트릭 이름은 특정 명명 규칙을 따라야 합니다:
  • 허용 문자: 알파벳(A–Z, a–z), 숫자(0–9), 밑줄 문자(_)
  • 첫 글자: 이름은 알파벳 또는 밑줄로 시작해야 합니다
  • 패턴: 메트릭 이름은 /^[_a-zA-Z][_a-zA-Z0-9]*$/ 패턴과 일치해야 합니다
쉼표, 공백, 특수 기호와 같은 유효하지 않은 문자를 메트릭 이름에 사용하는 것은 피하십시오. 이러한 문자는 W&B UI에서 정렬, 쿼리, 표시 과정에서 문제를 일으킬 수 있습니다.
올바른 메트릭 이름:
with wandb.init() as run:
  run.log({"accuracy": 0.9, "val_loss": 0.1, "epoch_5": 5})
  run.log({"modelAccuracy": 0.95, "learning_rate": 0.001})
잘못된 메트릭 이름(피해야 함):
with wandb.init() as run:
  run.log({"acc,val": 0.9})  # 쉼표 포함
  run.log({"loss-train": 0.1})  # 하이픈 포함
  run.log({"test acc": 0.95})  # 공백 포함
  run.log({"5_fold_cv": 0.8})  # 숫자로 시작

일반적인 워크플로

  1. 최고 정확도 비교: 여러 실행 간에 특정 메트릭의 최댓값을 비교하려면 해당 메트릭의 summary 값을 설정합니다. 기본적으로 summary는 각 키에 대해 마지막으로 로깅한 값으로 설정됩니다. 이는 UI의 테이블에서 summary 메트릭을 기준으로 실행을 정렬하고 필터링하여, 최종 정확도 대신 최고 정확도를 기준으로 테이블이나 막대 차트에서 실행을 비교할 때 유용합니다. 예를 들어: wandb.run.summary["best_accuracy"] = best_accuracy
  2. 하나의 차트에 여러 메트릭 보기: 한 번의 호출에서 여러 메트릭을 로깅합니다. 예를 들어:
    with wandb.init() as run:
      run.log({"acc": 0.9, "loss": 0.1})
    
    그런 다음 UI에서 두 메트릭을 모두 그래프로 그릴 수 있습니다.
  3. x축 사용자 정의: 동일한 로그 호출에 사용자 정의 x축을 추가하여, W&B 대시보드에서 다른 축을 기준으로 메트릭을 시각화합니다. 예를 들어:
    with wandb.init() as run:
      run.log({'acc': 0.9, 'epoch': 3, 'batch': 117})
    
    특정 메트릭에 대한 기본 x축을 설정하려면 Run.define_metric()을 사용하세요.
  4. 리치 미디어 및 차트 로깅: wandb.Run.log()이미지와 비디오 같은 미디어부터 테이블차트까지 다양한 데이터 타입의 로깅을 지원합니다.

모범 사례와 팁

실험과 로깅에 대한 모범 사례와 팁은 모범 사례: 실험과 로깅을 참고하세요.