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 키 생성하기
더 간편하게 하려면 User Settings로 바로 이동해 API 키를 생성하세요. 새로 생성한 API 키는 즉시 복사해 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
- 오른쪽 상단에서 사용자 프로필 아이콘을 클릭합니다.
- User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
wandb 라이브러리 설치 및 로그인
wandb 라이브러리를 설치하고 로그인하려면 다음 단계를 따르세요.
- 명령줄
- Python
- Python notebook
-
WANDB_API_KEY환경 변수에 API 키를 설정합니다. -
wandb라이브러리를 설치하고 로그인합니다.
PyTorch Lightning의 WandbLogger 사용
WandbLogger 클래스가 여러 개 있습니다.
Lightning와 통합하려면 WandbLogger를 인스턴스화한 후 Lightning의 Trainer 또는 Fabric에 전달하세요.
- PyTorch Logger
- Fabric Logger
일반적인 로거 인수
WandbLogger에서 가장 자주 사용되는 매개변수입니다. 모든 로거 인수에 대한 자세한 내용은 PyTorch Lightning 문서를 참고하세요.
| Parameter | Description |
|---|---|
project | 로깅할 wandb 프로젝트를 지정합니다 |
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를 사용할 때는 LightningModule 내에서(예: training_step 또는 validation_step 메서드) self.log('my_metric_name', metric_vale)를 호출해 메트릭을 W&B에 로깅할 수 있습니다.아래 code snippet은 메트릭과 LightningModule 하이퍼파라미터를 로깅하도록 LightningModule을 정의하는 방법을 보여줍니다. 이 예제에서는 메트릭을 계산하기 위해 torchmetrics 라이브러리를 사용합니다.메트릭의 최소/최대값 로깅
define_metric 함수를 사용하면 해당 메트릭에 대해 W&B summary 메트릭에 최소값, 최대값, 평균값 또는 최적값 중 무엇을 표시할지 지정할 수 있습니다. define_metric _를 사용하지 않으면 마지막으로 로깅된 값이 summary 메트릭에 표시됩니다. 자세한 내용은 define_metric 레퍼런스 문서와 가이드를 참조하세요.
W&B summary 메트릭에서 최대 검증 정확도를 추적하도록 하려면, 트레이닝 시작 시 wandb.define_metric()을 한 번만 호출하세요:
- PyTorch Logger
- Fabric Logger
모델 체크포인트 저장
ModelCheckpoint 콜백을 사용하고 WandbLogger에서 log_model 인자를 설정하세요.
- PyTorch Logger
- Fabric Logger
python trainer = Trainer(logger=wandb_logger, callbacks=[checkpoint_callback]) - Logger를 통해
- wandb를 통해
python # download checkpoint locally (if not already cached) wandb_logger.download_artifact(checkpoint_reference, artifact_type="model") - PyTorch Logger
- Fabric Logger
이미지, 텍스트 등 로깅하기
WandbLogger에는 미디어를 로깅하는 log_image, log_text, log_table 메서드가 있습니다.
또한 wandb.log() 또는 trainer.logger.experiment.log()를 직접 호출해 오디오, Molecules, Point Clouds, 3D 객체 등 다른 미디어 유형도 로깅할 수 있습니다.
- 이미지 로깅
- 텍스트 로깅
- Tables 로깅
WandbLogger를 통해 W&B에 로깅할 시점을 제어할 수 있습니다. 이 예제에서는 검증 이미지와 예측 샘플을 로깅합니다:
Lightning과 W&B에서 여러 GPU 사용하기
wandb.run 객체에 접근할 수 있는 것은 rank 0 프로세스뿐이며, 0이 아닌 rank 프로세스에서는 wandb.run = None입니다. 이로 인해 0이 아닌 프로세스가 실패할 수 있습니다. 이런 상황에서는 이미 중단된 0이 아닌 rank 프로세스들이 join하지 못한 채 rank 0 프로세스가 이들을 기다리게 되므로 데드락이 발생할 수 있습니다.
따라서 트레이닝 코드를 어떻게 구성할지 주의해야 합니다. 권장되는 방식은 코드가 wandb.run 객체와 독립적으로 동작하도록 작성하는 것입니다.
예제
자주 묻는 질문
W&B는 Lightning과 어떻게 통합되나요?
loggers API를 기반으로 하며, 이를 통해 로깅 코드의 상당 부분을 프레임워크에 구애받지 않는 방식으로 작성할 수 있습니다. Logger는 Lightning Trainer에 전달되며, 해당 API의 풍부한 hook-and-callback system에 따라 트리거됩니다. 이렇게 하면 연구 코드와 엔지니어링 및 로깅 코드를 깔끔하게 분리할 수 있습니다.
추가 코드 없이 인테그레이션은 무엇을 로깅하나요?
wandb.run을 트레이닝 설정에서 사용해야 한다면 어떻게 해야 하나요?
os.environ["WANDB_DIR"]를 사용해 모델 체크포인트 디렉터리를 설정할 수 있습니다. 이렇게 하면 rank가 0이 아닌 모든 프로세스가 wandb.run.dir에 접근할 수 있습니다.