WandbLogger를 통해 PyTorch Lightning 라이브러리에 직접 통합되어 있습니다.
Lightning과 통합하기
- PyTorch Logger
- Fabric Logger
wandb.log() 사용 시 주의사항:
WandbLogger는 Trainer의 global_step을 사용하여 W&B에 로그를 남깁니다. 코드에서 직접 wandb.log를 추가로 호출하는 경우, wandb.log()에서 step 인수를 사용하지 마십시오.대신, 다른 메트릭과 마찬가지로 Trainer의 global_step을 로깅하십시오:
가입 및 API 키 생성
API 키는 사용자의 장비를 W&B에 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.For a more streamlined approach, create an API key by going directly to User Settings. Copy the newly created API key immediately and save it in a secure location such as a password manager.
- 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
- User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
wandb 라이브러리 설치 및 로그인
로컬에 wandb 라이브러리를 설치하고 로그인하려면:
- Command Line
- Python
- Python notebook
-
WANDB_API_KEY환경 변수를 해당 API 키로 설정합니다. -
wandb라이브러리를 설치하고 로그인합니다.
PyTorch Lightning의 WandbLogger 사용하기
PyTorch Lightning에는 메트릭, 모델 가중치, 미디어 등을 로깅하기 위한 여러 WandbLogger 클래스가 있습니다.
Lightning과 통합하려면 WandbLogger를 인스턴스화하고 이를 Lightning의 Trainer 또는 Fabric에 전달하십시오.
- PyTorch Logger
- Fabric Logger
일반적인 로거 인수
다음은WandbLogger에서 가장 많이 사용되는 파라미터들입니다. 모든 로거 인수에 대한 자세한 내용은 PyTorch Lightning 문서를 참조하십시오.
| 파라미터 | 설명 |
|---|---|
project | 로그를 보낼 wandb Projects 정의 |
name | wandb run에 이름 지정 |
log_model | log_model="all"인 경우 모든 모델을 로깅하고, log_model=True인 경우 트레이닝 종료 시 로깅 |
save_dir | 데이터가 저장되는 경로 |
하이퍼파라미터 로깅
- PyTorch Logger
- Fabric Logger
추가 구성 파라미터 로깅
그레이디언트, 파라미터 히스토그램 및 모델 토폴로지 로깅
모델 오브젝트를wandblogger.watch()에 전달하여 트레이닝 중에 모델의 그레이디언트와 파라미터를 모니터링할 수 있습니다. 자세한 내용은 PyTorch Lightning WandbLogger 문서를 참조하십시오.
메트릭 로깅
- PyTorch Logger
- Fabric Logger
WandbLogger를 사용할 때 training_step 또는 validation_step 메소드와 같이 LightningModule 내에서 self.log('my_metric_name', metric_vale)을 호출하여 메트릭을 W&B에 로깅할 수 있습니다.아래 코드 조각은 메트릭과 LightningModule 하이퍼파라미터를 로깅하기 위해 LightningModule을 정의하는 방법을 보여줍니다. 이 예제는 메트릭 계산을 위해 torchmetrics 라이브러리를 사용합니다.메트릭의 최소/최대값 로깅
wandb의define_metric 함수를 사용하여 W&B 요약 메트릭에 해당 메트릭의 최소값, 최대값, 평균값 또는 최적값을 표시할지 여부를 정의할 수 있습니다. define_metric을 사용하지 않으면 마지막으로 로깅된 값이 요약 메트릭에 나타납니다. 자세한 내용은 define_metric 참조 문서 및 가이드를 확인하십시오.
W&B 요약 메트릭에서 최대 검증 정확도를 추적하도록 하려면 트레이닝 시작 시점에 한 번만 wandb.define_metric을 호출하십시오:
- PyTorch Logger
- Fabric Logger
모델 체크포인트 생성
모델 체크포인트를 W&B Artifacts로 저장하려면, Lightning의ModelCheckpoint 콜백을 사용하고 WandbLogger에서 log_model 인수를 설정하십시오.
- PyTorch Logger
- Fabric Logger
- Via Logger
- Via wandb
- PyTorch Logger
- Fabric Logger
이미지, 텍스트 등 로깅
WandbLogger에는 미디어 로깅을 위한 log_image, log_text, log_table 메소드가 있습니다.
또한 wandb.log 또는 trainer.logger.experiment.log를 직접 호출하여 오디오, 분자, 포인트 클라우드, 3D 오브젝트 등과 같은 다른 미디어 유형을 로깅할 수도 있습니다.
- 이미지 로깅
- 텍스트 로깅
- Table 로깅
WandbLogger를 통해 W&B에 로깅하는 시점을 제어할 수 있습니다. 이 예제에서는 검증 이미지 샘플과 예측값을 로깅합니다:
Lightning 및 W&B와 함께 여러 GPU 사용하기
PyTorch Lightning은 DDP 인터페이스를 통해 멀티 GPU를 지원합니다. 그러나 PyTorch Lightning의 설계상 GPU를 인스턴스화하는 방법에 주의를 기울여야 합니다. Lightning은 트레이닝 루프의 각 GPU(또는 Rank)가 동일한 초기 조건으로 정확히 동일하게 인스턴스화되어야 한다고 가정합니다. 그러나 rank 0 프로세스만wandb.run 오브젝트에 엑세스할 수 있으며, 0이 아닌 rank 프로세스의 경우 wandb.run = None이 됩니다. 이로 인해 0이 아닌 프로세스가 실패할 수 있습니다. 이러한 상황은 rank 0 프로세스가 이미 충돌한 0이 아닌 rank 프로세스의 참여를 기다리게 되어 데드락(deadlock) 상태에 빠뜨릴 수 있습니다.
이러한 이유로 트레이닝 코드 설정 방식에 주의하십시오. 권장되는 방법은 코드가 wandb.run 오브젝트에 의존하지 않도록 구성하는 것입니다.
예제
Colab 노트북이 포함된 비디오 튜토리얼을 따라해 볼 수 있습니다.자주 묻는 질문(FAQ)
W&B는 Lightning과 어떻게 통합되나요?
핵심 통합은 Lightningloggers API를 기반으로 하며, 이를 통해 프레임워크에 구애받지 않는 방식으로 대부분의 로깅 코드를 작성할 수 있습니다. Logger는 Lightning Trainer에 전달되며, 해당 API의 풍부한 훅 및 콜백 시스템(hook-and-callback system)을 기반으로 트리거됩니다. 이를 통해 연구 코드를 엔지니어링 및 로깅 코드와 잘 분리된 상태로 유지할 수 있습니다.
추가 코드 없이 통합 시 로깅되는 것은 무엇인가요?
모델 체크포인트를 W&B에 저장하여 향후 run에서 확인하거나 다운로드하여 사용할 수 있습니다. 또한 GPU 사용량 및 네트워크 I/O와 같은 시스템 메트릭, 하드웨어 및 OS 정보와 같은 환경 정보, 코드 상태(git 커밋 및 diff 패치, 노트북 내용 및 세션 기록 포함), 표준 출력(stdout)에 출력되는 모든 내용을 캡처합니다.트레이닝 설정에서 wandb.run을 사용해야 하는 경우는 어떻게 하나요?
직접 엑세스해야 하는 변수의 범위를 확장해야 합니다. 즉, 모든 프로세스에서 초기 조건이 동일한지 확인하십시오.
os.environ["WANDB_DIR"]을 사용하여 모델 체크포인트 디렉토리를 설정할 수 있습니다. 이렇게 하면 0이 아닌 임의의 rank 프로세스가 wandb.run.dir에 엑세스할 수 있습니다.