- 단일 프로세스 추적: W&B로 rank 0 프로세스(“리더” 또는 “코디네이터”라고도 함)를 추적합니다. 이는 PyTorch Distributed Data Parallel (DDP) 클래스에서 분산 학습 실험을 로깅할 때 일반적으로 사용하는 방법입니다.
- 여러 프로세스 추적: 여러 프로세스가 있는 경우, 다음 중 하나를 선택할 수 있습니다:
- 프로세스당 하나의 실행을 사용해 각 프로세스를 개별적으로 추적합니다. 필요에 따라 W&B App UI에서 이들을 하나의 그룹으로 묶을 수 있습니다.
- 모든 프로세스를 하나의 실행으로 추적합니다.
단일 프로세스 추적
wandb.init()을(를) 사용해 W&B 실행을 초기화한 다음, 해당 실행에 실험을 기록하기 위해 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로깅을 설정합니다.


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

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

x_label 매개변수에 지정하는 고유한 레이블(rank_0, rank_1, rank_2)을 가집니다.

예제 사용 사례
스폰된 프로세스
wandb.setup() 메서드를 사용하세요:
문제 해결
- 학습 시작 시 멈춤 - 분산 학습에서 사용하는 multiprocessing과
wandb의 multiprocessing이 서로 간섭하면wandb프로세스가 멈출 수 있습니다. - 학습 종료 시 멈춤 - 학습 작업이 종료 시점에
wandb프로세스가 언제 종료해야 하는지 알지 못하면 멈출 수 있습니다. Python 스크립트의 마지막에서wandb.Run.finish()API를 호출해 실행이 완료되었음을 W&B에 알려야 합니다.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"로 설정하여 멀티스레딩을 사용하십시오.