- 단일 프로세스 추적: W&B로 rank 0 프로세스(“리더” 또는 “코디네이터”라고도 함)를 추적합니다. 이는 PyTorch Distributed Data Parallel (DDP) 클래스와 함께 분산 트레이닝 실험을 로깅할 때 일반적으로 사용하는 방법입니다.
- 다중 프로세스 추적: 여러 프로세스가 있는 경우 다음 중 하나를 사용할 수 있습니다:
- 프로세스당 하나의 run을 사용해 각 프로세스를 개별적으로 추적합니다. 선택적으로 W&B App UI에서 이들을 함께 그룹화할 수 있습니다.
- 모든 프로세스를 단일 run에 추적합니다.
단일 프로세스 추적
wandb.init()으로 W&B run을 초기화하고, 해당 run에 실험을 (wandb.log) 로깅합니다.
다음 샘플 Python 스크립트 (log-ddp.py)는 단일 머신에서 두 개의 GPU에 대한 메트릭을 PyTorch DDP를 사용해 추적하는 한 가지 방법을 보여줍니다. PyTorch DDP (torch.nn의 DistributedDataParallel)는 분산 트레이닝을 위한 널리 사용되는 라이브러리입니다. 기본 원리는 어떤 분산 트레이닝 설정에도 적용되지만, 구현 방식은 다를 수 있습니다.
이 Python 스크립트는 다음을 수행합니다.
torch.distributed.launch로 여러 프로세스를 시작합니다.--local_rank커맨드라인 인수를 사용해 rank를 확인합니다.- rank가 0으로 설정된 경우,
train()함수에서 조건부로wandb로깅을 설정합니다.


여러 프로세스 추적
- 각 프로세스에 대해 run을 생성해서 각 프로세스를 개별적으로 추적하기
- 모든 프로세스를 단일 run으로 추적하기
각 프로세스를 개별적으로 추적하기
wandb.Run.finish()를 호출해 run이 완료되었음을 표시하면, 모든 프로세스가 올바르게 종료됩니다.
여러 Experiments에 걸쳐 run들을 추적하기가 어려울 수 있습니다. 이 문제를 줄이려면, W&B를 초기화할 때 (wandb.init(group='group-name')) group 파라미터에 값을 지정하여 각 run이 어떤 실험에 속하는지 추적하세요. Experiments에서 트레이닝과 평가 W&B Runs를 추적하는 방법에 대한 자세한 내용은 Group Runs를 참고하세요.
각 개별 프로세스의 메트릭을 추적하려는 경우 이 접근 방식을 사용하세요. 일반적인 예로는 각 노드의 데이터와 예측(데이터 분산 디버깅용)과 메인 노드 외부의 개별 배치에 대한 메트릭이 있습니다. 이 접근 방식은 모든 노드의 시스템 메트릭을 수집하거나 메인 노드에서 확인할 수 있는 요약 통계를 얻기 위해서는 필요하지 않습니다.
group 파라미터를 설정하는 방법을 보여줍니다:

분산 run 구성하기
job_type 파라미터를 설정하세요 (wandb.init(job_type='type-name')). 예를 들어, 메인 조정 노드와 여러 개의 결과를 보고하는 워커 노드가 있을 수 있습니다. 메인 조정 노드에는 job_type을 main으로, 결과를 보고하는 워커 노드에는 worker로 설정할 수 있습니다:
job_type을 설정한 후에는 워크스페이스에서 saved views를 만들어 run을 정리할 수 있습니다. 오른쪽 상단의 … 액션 메뉴를 클릭한 다음 Save as new view를 클릭합니다.
예를 들어, 다음과 같은 saved view를 만들 수 있습니다:
-
Default view: 워커 노드를 필터링해 노이즈 줄이기
- Filter를 클릭한 다음 Job Type을
worker로 설정합니다. - 리포팅 노드만 표시합니다
- Filter를 클릭한 다음 Job Type을
-
Debug view: 트러블슈팅을 위해 워커 노드에 집중
- Filter를 클릭한 다음 Job Type을
==worker로 설정하고 State를INcrashed로 설정합니다. - 크래시됐거나 오류 상태인 워커 노드만 표시합니다
- Filter를 클릭한 다음 Job Type을
-
All nodes view: 모든 것을 한눈에 보기
- 필터 없음
- 전체 모니터링에 유용합니다
여러 프로세스를 하나의 run으로 추적하기
요구 사항여러 프로세스를 하나의 run으로 추적하려면 다음이 필요합니다.
-
W&B Python SDK 버전
v0.19.9이상 - W&B Server v0.68 이상
wandb.init()를 사용해 W&B run을 초기화합니다. settings 파라미터에 wandb.Settings 객체를 전달합니다(wandb.init(settings=wandb.Settings()))와 함께 다음을 설정합니다.
- 공유 모드를 활성화하기 위해
mode파라미터를"shared"로 설정합니다. x_label에 고유한 레이블을 지정합니다.x_label에 지정한 값은 W&B App UI의 로그 및 시스템 메트릭에서 데이터가 어떤 노드에서 왔는지 식별하는 데 사용됩니다. 지정하지 않으면 W&B가 호스트 이름과 무작위 해시를 사용해 레이블을 생성합니다.- 이 노드가 기본 노드임을 나타내기 위해
x_primary파라미터를True로 설정합니다. - 선택적으로
x_stats_gpu_device_ids에 GPU 인덱스 목록([0,1,2])을 제공하여 W&B가 어떤 GPU에 대해 메트릭을 추적할지 지정합니다. 목록을 제공하지 않으면 W&B는 머신의 모든 GPU에 대해 메트릭을 추적합니다.
x_primary=True는 기본 노드와 워커 노드를 구분합니다. 기본 노드만이 설정 파일, 텔레메트리 등 노드 간에 공유되는 파일을 업로드합니다. 워커 노드는 이러한 파일을 업로드하지 않습니다.wandb.init()를 사용해 W&B run을 초기화하고 다음을 제공합니다.
settings파라미터에wandb.Settings객체를 전달합니다(wandb.init(settings=wandb.Settings()))와 함께:- 공유 모드를 활성화하기 위해
mode파라미터를"shared"로 설정합니다. x_label에 고유한 레이블을 지정합니다.x_label에 지정한 값은 W&B App UI의 로그 및 시스템 메트릭에서 데이터가 어떤 노드에서 왔는지 식별하는 데 사용됩니다. 지정하지 않으면 W&B가 호스트 이름과 무작위 해시를 사용해 레이블을 생성합니다.- 이 노드가 워커 노드임을 나타내기 위해
x_primary파라미터를False로 설정합니다.
- 공유 모드를 활성화하기 위해
id파라미터에 기본 노드에서 사용한 run ID를 전달합니다.- 선택적으로
x_update_finish_state를False로 설정합니다. 이렇게 하면 기본 노드가 아닌 노드가 run의 상태를 조기에finished로 업데이트하는 것을 방지하여, run 상태가 기본 노드에 의해 일관되게 관리되도록 합니다.
- 모든 노드에서 동일한 entity와 프로젝트를 사용하세요. 이렇게 하면 올바른 run ID를 찾는 데 도움이 됩니다.
- 각 워커 노드에서 환경 변수를 정의해 기본 노드의 run ID를 설정하는 것을 고려하세요.
GKE의 다중 노드 및 다중 GPU Kubernetes 클러스터에서 모델을 트레이닝하는 방법에 대한 엔드 투 엔드 예시는 Distributed Training with Shared Mode 리포트를 참고하세요.
- run이 포함된 프로젝트로 이동합니다.
- 프로젝트 사이드바에서 Runs 탭을 클릭합니다.
- 확인하려는 run을 클릭합니다.
- 프로젝트 사이드바에서 Logs 탭을 클릭합니다.
x_label에 제공한 레이블을 기준으로 콘솔 로그를 필터링할 수 있습니다. 예를 들어, 아래 이미지는 x_label에 rank0, rank1, rank2, rank3, rank4, rank5, rank6 값을 제공했을 때 콘솔 로그를 필터링할 수 있는 옵션을 보여줍니다.

x_label 파라미터에 지정한 고유한 레이블(rank_0, rank_1, rank_2)을 가집니다.

예제 사용 사례
스폰된 프로세스
wandb.setup() 메서드를 사용하세요:
문제 해결
- 트레이닝 시작 시 멈춤 현상 -
wandb멀티프로세싱이 분산 트레이닝에서 사용하는 멀티프로세싱과 충돌하면wandb프로세스가 멈출 수 있습니다. - 트레이닝 종료 시 멈춤 현상 -
wandb프로세스가 언제 종료해야 하는지 알지 못하면 트레이닝 작업이 멈춘 상태가 될 수 있습니다. Python 스크립트의 마지막에서wandb.Run.finish()API를 호출하여 W&B에 해당 run이 완료되었음을 알려야 합니다.wandb.Run.finish()API는 데이터 업로드를 완료하고 W&B 프로세스가 종료되도록 합니다.
wandb service 명령 사용을 권장합니다. 앞서 언급한 두 가지 트레이닝 문제는 wandb service를 사용할 수 없는 버전의 W&B SDK에서 흔하게 발생합니다.
W&B Service 활성화
W&B SDK 0.13.0 이상
0.13.0 이상 버전에서는 기본적으로 W&B Service가 활성화되어 있습니다.
W&B SDK 0.12.5 이상
wandb.require 메서드를 사용하고 문자열 "service"를 전달하세요:
WANDB_START_METHOD 환경 변수를 "thread"로 설정하세요.