메인 콘텐츠로 건너뛰기
PyTorch Lightning은 PyTorch 코드를 체계적으로 구성하고 분산 트레이닝이나 16비트 정밀도 같은 고급 기능을 추가할 수 있도록 해주는 가벼운 래퍼를 제공합니다. W&B는 ML 실험을 로깅하기 위한 가벼운 래퍼를 제공합니다. 이 둘을 직접 함께 구성할 필요는 없습니다. PyTorch Lightning 라이브러리에는 WandbLogger를 통해 W&B가 직접 포함되어 있습니다. 이 페이지에서는 WandbLogger를 사용해 메트릭을 추적하고, 하이퍼파라미터를 로깅하고, 모델 체크포인트를 아티팩트로 저장하고, 미디어를 로깅하고, PyTorch Lightning과 W&B를 사용해 멀티 GPU 트레이닝을 실행하는 방법을 보여줍니다.

Lightning와 통합하기

다음 섹션에서는 W&B로 인증하고, wandb 라이브러리를 설치하고, Lightning Trainer 또는 Fabric 인스턴스에 WandbLogger를 연결하는 방법을 보여줍니다.
wandb.log() 사용: WandbLogger는 Trainer의 global_step을 사용해 W&B에 로깅합니다. 코드에서 wandb.log()를 직접 추가로 호출하는 경우, wandb.log()에서 step 인수를 사용하지 마세요.대신 다른 메트릭과 마찬가지로 Trainer의 global_step을 로깅하세요:
대화형 대시보드

가입하고 API 키 생성하기

API 키는 머신을 W&B에 인증하는 데 사용됩니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.
더 간편하게 하려면 User Settings로 이동해 API 키를 생성하세요. API 키는 즉시 복사해 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
사용자 프로필에서 API 키를 생성하려면 다음 단계를 따르세요:
  1. 오른쪽 상단에서 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.

wandb 라이브러리 설치 및 로그인

로컬 환경에 wandb 라이브러리를 설치하고 로그인하려면 다음 단계를 따르세요.
  1. WANDB_API_KEY 환경 변수에 API 키를 설정합니다. <>로 묶인 값은 본인의 값으로 바꾸세요.
  2. wandb 라이브러리를 설치하고 로그인합니다.

PyTorch Lightning의 WandbLogger 사용

PyTorch Lightning에는 메트릭, 모델 가중치, 미디어를 로깅할 수 있는 WandbLogger 클래스가 여러 개 있습니다. 트레이닝 설정에 맞는 클래스를 선택하세요: Lightning와 통합하려면 WandbLogger를 인스턴스화한 후 Lightning의 Trainer 또는 Fabric에 전달하세요.

일반적인 로거 인수

다음 표에는 WandbLogger의 일반적인 매개변수가 나열되어 있습니다. 모든 로거 인수에 대한 자세한 내용은 PyTorch Lightning 문서를 참고하세요.

하이퍼파라미터를 로깅하세요

W&B에 하이퍼파라미터를 로깅하면 run을 비교하고 결과를 재현할 수 있습니다. 사용 중인 로거에 맞는 방법을 사용하세요:

추가 설정 매개변수 로깅

하이퍼파라미터와 함께 추가 설정 값을 기록하려면 run 설정을 직접 업데이트하세요:

그라디언트, 파라미터 히스토그램 및 모델 토폴로지 로깅

트레이닝하는 동안 모델의 그라디언트와 파라미터를 모니터링하려면 모델 객체를 wandb_logger.watch()에 전달하세요. PyTorch Lightning WandbLogger 문서를 참조하세요.

메트릭 로깅

WandbLogger를 사용할 때는 LightningModule 내에서(예: training_step 또는 validation_step 메서드) self.log('my_metric_name', metric_value)를 호출해 메트릭을 W&B에 로깅할 수 있습니다.다음 코드 스니펫은 메트릭과 LightningModule 하이퍼파라미터를 로깅하도록 LightningModule을 정의하는 방법을 보여줍니다. 이 예제에서는 메트릭을 계산하기 위해 torchmetrics 라이브러리를 사용합니다.

메트릭의 최소/최대값 로깅

W&B의 define_metric 함수를 사용하면 W&B summary 메트릭에 해당 메트릭의 최소값, 최대값, 평균값 또는 최적값을 표시할지 지정할 수 있습니다. define_metric을 사용하지 않으면 마지막으로 로깅된 값이 summary 메트릭에 표시됩니다. 자세한 내용은 customize logging axes 가이드를 참조하세요. W&B summary 메트릭에서 최대 검증 정확도를 추적하려면, 트레이닝 시작 시 wandb.define_metric()을 한 번만 호출하세요:

모델 체크포인트 저장

체크포인트를 W&B 아티팩트로 저장하면 나중에 run, 별칭 또는 버전으로 조회할 수 있는 버전 관리된 모델 파일을 사용할 수 있습니다. 모델 체크포인트를 W&B Artifacts로 저장하려면 Lightning ModelCheckpoint 콜백을 사용하고 WandbLogger에서 log_model 인수를 설정하세요.
W&B Artifact에서 모델 체크포인트를 더 쉽게 조회할 수 있도록 latestbest 별칭이 자동으로 설정됩니다:
로깅한 모델 체크포인트는 W&B Artifacts UI에서 확인할 수 있으며, 모델의 전체 리니지를 포함합니다(UI의 모델 체크포인트 예시를 참조하세요). 최고의 모델 체크포인트를 북마크하고 팀 전체에서 중앙 집중식으로 관리하려면 W&B Model 레지스트리에 연결하세요. 레지스트리에서는 작업별로 최고의 모델을 정리하고, 모델 라이프사이클을 관리하고, ML 라이프사이클 전반에 걸쳐 추적 및 감사를 수행하며, 웹훅이나 작업으로 후속 액션을 자동화할 수 있습니다.

이미지, 텍스트 등 로깅하기

WandbLogger에는 미디어를 로깅하는 log_image, log_text, log_table 메서드가 있습니다. 또한 wandb.log() 또는 trainer.logger.experiment.log()를 직접 호출해 오디오, Molecules, Point Clouds, 3D 객체와 같은 다른 미디어 유형도 로깅할 수 있습니다.
Lightning의 Callbacks 시스템을 사용해 WandbLogger를 통해 W&B에 로깅할 시점을 제어하세요. 다음 예시에서는 검증 이미지와 예측 샘플을 로깅합니다:

Lightning과 W&B에서 여러 GPU 사용하기

분산 트레이닝을 실행할 때는 각 rank에서 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 객체와 독립적으로 동작하도록 작성하는 것입니다.

예제

엔드투엔드 워크스루는 Colab 노트북이 포함된 비디오 튜토리얼을 보면서 따라 할 수 있습니다.

자주 묻는 질문

W&B는 Lightning과 어떻게 통합되나요?

핵심 인테그레이션은 Lightning loggers API를 기반으로 하며, 이를 통해 로깅 코드의 상당 부분을 프레임워크와 독립적인 방식으로 작성할 수 있습니다. LoggerLightning Trainer에 전달되며, 해당 API의 풍부한 hook-and-callback system에 따라 트리거됩니다. 이렇게 하면 연구 코드와 엔지니어링 및 로깅 코드를 깔끔하게 분리할 수 있습니다.

추가 코드 없이 인테그레이션은 무엇을 기록하나요?

W&B는 모델 체크포인트를 저장하므로, 이를 확인하거나 이후 run에서 사용할 수 있도록 다운로드할 수 있습니다. W&B는 GPU 사용량과 네트워크 I/O 같은 시스템 메트릭도 자동으로 수집합니다. 또한 하드웨어 및 OS 정보와 같은 환경 정보도 수집합니다. Git 커밋과 diff patch, 노트북 내용, 세션 이력을 포함한 코드 상태도 수집합니다. 아울러 표준 출력으로 출력되는 모든 내용도 수집합니다.

wandb.run을 트레이닝 설정에서 사용해야 한다면 어떻게 해야 하나요?

직접 접근해야 하는 변수의 스코프를 넓혀야 합니다. 다시 말해, 모든 프로세스에서 초기 조건이 동일하도록 해야 합니다.
그 경우 os.environ["WANDB_DIR"]를 사용해 모델 체크포인트 디렉터리를 설정할 수 있습니다. 이렇게 하면 rank가 0이 아닌 모든 프로세스가 wandb.run.dir에 접근할 수 있습니다.