WandbLogger를 통해 W&B가 직접 포함되어 있습니다.
이 페이지에서는 WandbLogger를 사용해 메트릭을 추적하고, 하이퍼파라미터를 로깅하고, 모델 체크포인트를 아티팩트로 저장하고, 미디어를 로깅하고, PyTorch Lightning과 W&B를 사용해 멀티 GPU 트레이닝을 실행하는 방법을 보여줍니다.
Lightning와 통합하기
wandb 라이브러리를 설치하고, Lightning Trainer 또는 Fabric 인스턴스에 WandbLogger를 연결하는 방법을 보여줍니다.
- 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 문서를 참고하세요.
하이퍼파라미터를 로깅하세요
- PyTorch Logger
- Fabric Logger
추가 설정 매개변수 로깅
그라디언트, 파라미터 히스토그램 및 모델 토폴로지 로깅
wandb_logger.watch()에 전달하세요. PyTorch Lightning WandbLogger 문서를 참조하세요.
메트릭 로깅
- PyTorch Logger
- Fabric Logger
WandbLogger를 사용할 때는 LightningModule 내에서(예: training_step 또는 validation_step 메서드) self.log('my_metric_name', metric_value)를 호출해 메트릭을 W&B에 로깅할 수 있습니다.다음 코드 스니펫은 메트릭과 LightningModule 하이퍼파라미터를 로깅하도록 LightningModule을 정의하는 방법을 보여줍니다. 이 예제에서는 메트릭을 계산하기 위해 torchmetrics 라이브러리를 사용합니다.메트릭의 최소/최대값 로깅
define_metric 함수를 사용하면 W&B summary 메트릭에 해당 메트릭의 최소값, 최대값, 평균값 또는 최적값을 표시할지 지정할 수 있습니다. define_metric을 사용하지 않으면 마지막으로 로깅된 값이 summary 메트릭에 표시됩니다. 자세한 내용은 customize logging axes 가이드를 참조하세요.
W&B summary 메트릭에서 최대 검증 정확도를 추적하려면, 트레이닝 시작 시 wandb.define_metric()을 한 번만 호출하세요:
- PyTorch Logger
- Fabric Logger
모델 체크포인트 저장
ModelCheckpoint 콜백을 사용하고 WandbLogger에서 log_model 인수를 설정하세요.
- PyTorch Logger
- Fabric Logger
latest 및 best 별칭이 자동으로 설정됩니다:
- Logger를 통해
- wandb를 통해
- 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을 참조하는 방식에 따라 트레이닝이 정상적으로 진행될지, 데드락이 발생할지가 달라질 수 있습니다. 이 섹션에서는 필요한 조건을 설명하고 권장 패턴을 보여줍니다.
PyTorch Lightning은 DDP 인터페이스를 통해 멀티 GPU를 지원합니다. 하지만 PyTorch Lightning의 설계상 각 GPU를 어떻게 인스턴스화하는지 주의해야 합니다.
Lightning은 트레이닝 루프의 각 GPU(또는 rank)가 동일한 초기 조건으로 정확히 같은 방식으로 인스턴스화되어야 한다고 가정합니다. 하지만 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에 접근할 수 있습니다.