WandbLogger를 통해 PyTorch Lightning 라이브러리에 직접 통합되어 있습니다.
Lightning과 연동하기
- PyTorch 로거
- Fabric 로거
wandb.log() 사용:
WandbLogger는 Trainer의 global_step을 사용해 W&B에 로그를 기록합니다. 코드에서 추가로 wandb.log를 직접 호출하는 경우, wandb.log()에서 step 인자를 사용하지 마십시오.대신, 다른 지표와 마찬가지로 Trainer의 global_step을 함께 기록하십시오:
회원가입 후 API key 생성하기
보다 간편하게 설정하려면 User Settings로 바로 이동해 API key를 생성하세요. 새로 생성된 API key는 즉시 복사하여 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
- 오른쪽 상단의 사용자 프로필 아이콘을 클릭합니다.
- User Settings를 선택한 다음 아래로 스크롤하여 API Keys 섹션으로 이동합니다.
wandb 라이브러리를 설치하고 로그인하기
wandb 라이브러리를 설치하고 로그인하려면:
- 명령줄
- Python
- Python 노트북
-
WANDB_API_KEY환경 변수를 본인의 API key로 설정합니다. -
wandb라이브러리를 설치하고 로그인합니다.
PyTorch Lightning의 WandbLogger 사용
WandbLogger 클래스가 있습니다.
Lightning과 연동하려면 WandbLogger 인스턴스를 생성한 후 Lightning의 Trainer 또는 Fabric에 전달합니다.
- PyTorch 로거
- Fabric 로거
공통 logger 인자
WandbLogger에서 가장 많이 사용되는 파라미터입니다. 모든 logger 인자에 대한 자세한 내용은 PyTorch Lightning 문서를 확인하세요.
| Parameter | Description |
|---|---|
project | 로그를 기록할 wandb Project를 지정합니다 |
name | wandb 실행에 이름을 지정합니다 |
log_model | log_model="all"이면 모든 모델을, log_model=True이면 학습 종료 시점에 모델을 기록합니다 |
save_dir | 데이터가 저장될 경로입니다 |
하이퍼파라미터 기록하기
- PyTorch Logger
- Fabric Logger
추가 구성 파라미터 기록
그래디언트, 파라미터 히스토그램 및 모델 토폴로지 기록
wandblogger.watch()에 전달하면 됩니다. 자세한 내용은 PyTorch Lightning WandbLogger 문서를 참고하세요.
메트릭 로깅하기
- PyTorch Logger
- Fabric Logger
LightningModule 안에서, 예를 들어 training_step 또는 validation_step 메서드에서 self.log('my_metric_name', metric_vale)를 호출하여 WandbLogger를 사용할 때 메트릭을 W&B에 로깅할 수 있습니다.아래 코드 스니펫은 메트릭과 LightningModule 하이퍼파라미터를 로깅할 수 있도록 LightningModule을 정의하는 방법을 보여줍니다. 이 예제에서는 메트릭을 계산하기 위해 torchmetrics 라이브러리를 사용합니다.메트릭의 최소/최대값 로깅하기
define_metric 함수를 사용하면 W&B Summary 메트릭에 해당 메트릭의 최소값, 최대값, 평균값 또는 최적값 중 어떤 값을 표시할지 정의할 수 있습니다. define_metric _ 을 사용하지 않으면 마지막으로 로깅된 값이 Summary 메트릭에 표시됩니다. 자세한 내용은 define_metric 레퍼런스 문서와 가이드를 참고하세요.
W&B Summary 메트릭에서 검증 정확도(val_accuracy)의 최대값을 추적하려면, 학습 시작 시점에 단 한 번만 wandb.define_metric을 호출하세요:
- PyTorch Logger
- Fabric Logger
모델 체크포인트 저장
ModelCheckpoint 콜백을 사용한 다음 WandbLogger에서 log_model 인수를 설정하세요.
- PyTorch 로거
- Fabric 로거
- Logger 사용
- wandb 사용
- PyTorch Logger
- Fabric Logger
이미지, 텍스트 등을 로깅하기
WandbLogger에는 미디어를 로깅하기 위한 log_image, log_text, log_table 메서드가 있습니다.
wandb.log 또는 trainer.logger.experiment.log를 직접 호출해서 오디오, 분자 구조(Molecules), 포인트 클라우드(Point Clouds), 3D 객체(3D Objects) 등의 다른 미디어 유형도 로깅할 수 있습니다.
- 이미지 로깅(Log Images)
- 텍스트 로깅(Log Text)
- 테이블 로깅(Log Tables)
WandbLogger를 통해 W&B에 로그를 남기는 시점을 제어할 수 있습니다. 이 예시에서는 검증 이미지와 예측 결과 중 일부 샘플을 로깅합니다.
Lightning과 W&B로 여러 GPU 사용하기
wandb.run 객체에 접근할 수 있고, 0이 아닌 rank 프로세스에서는 wandb.run = None입니다. 이로 인해 rank가 0이 아닌 프로세스가 실패할 수 있습니다. 이런 상황에서는 rank 0 프로세스가 이미 크래시된 rank 0이 아닌 프로세스가 조인하기를 계속 기다리게 되어 **데드락(교착 상태)**에 빠질 수 있습니다.
이러한 이유로, 학습 코드를 설정하는 방식에 특히 주의해야 합니다. 권장되는 방법은 코드가 wandb.run 객체에 의존하지 않도록 구성하는 것입니다.
예시
자주 묻는 질문
W&B는 Lightning과 어떻게 통합되나요?
loggers API를 기반으로 하며, 이를 통해 프레임워크에 구애받지 않는 방식으로 대부분의 로깅 코드를 작성할 수 있습니다. Logger 인스턴스는 Lightning Trainer에 전달되며, 해당 API의 강력한 훅(hook) 및 콜백(callback) 시스템을 기반으로 동작합니다. 이를 통해 연구 코드와 엔지니어링/로깅 코드를 명확하게 분리할 수 있습니다.
별도의 코드를 작성하지 않아도 이 통합은 무엇을 기록하나요?
학습 설정에서 wandb.run을 사용해야 하는 경우에는 어떻게 하나요?
os.environ["WANDB_DIR"]를 사용해서 모델 체크포인트 디렉터리를 설정할 수 있습니다. 이렇게 하면 0이 아닌 rank의 프로세스도 wandb.run.dir에 접근할 수 있습니다.