wandb.init()으로 W&B run을 초기화합니다.
기본적으로 W&B는 wandb.init()을 호출할 때 각 Python 프로세스에 동시에 활성화된 run이 하나만 있다고 가정합니다. wandb.init()을 다시 호출하면 W&B는 동일한 run을 반환하거나, 새 run을 시작하기 전에 이전 run을 종료합니다. 동일한 프로세스에서 wandb.init()을 여러 번 호출할 때 W&B가 이를 어떻게 처리할지는 환경(노트북 또는 비노트북)과 reinit 설정에 따라 달라집니다.
동일한 프로세스에서 여러 활성 run을 관리하려면 하나의 프로세스에서 여러 run을 참조하세요.
W&B는
wandb.init()을 호출할 때 with 블록을 사용할 것을 권장합니다. 이렇게 하면 블록이 끝날 때 W&B가 run을 올바르게 마무리하고 모든 데이터를 업로드할 수 있습니다.프로세스별 단일 run
basic.py
nico 아래의 프로젝트 awesome-project에 run exalted-darkness-6를 로깅한 것을 알 수 있습니다. pgbn9y21은 W&B가 이 run에 대해 생성한 고유한 run ID입니다.
하나의 프로세스에서 여러 run 사용하기
- 스크립트 전체에서 하나의 “기본” run을 활성 상태로 유지하면서, 평가나 하위 작업을 위해 수명이 짧은 “보조” run을 생성합니다.
- 단일 파일에서 하위 실험을 오케스트레이션합니다.
- 서로 다른 작업이나 기간을 나타내는 여러 run으로 하나의 “메인” 프로세스에서 로깅합니다.
wandb.init()를 호출할 때 각 Python 프로세스에 한 번에 활성 run이 하나만 있다고 가정합니다. wandb.init()를 다시 호출하면, 설정에 따라 W&B는 동일한 run을 반환하거나 이전 run을 종료한 뒤 새 run을 시작합니다.
이 가이드에서는 단일 Python 프로세스에서 여러 run을 사용할 수 있도록 reinit를 사용해 wandb.init()의 동작을 변경하는 방법을 설명합니다.
요구 사항단일 Python 프로세스에서 여러 run을 관리하려면 W&B Python SDK 버전
v0.19.10 이상이 필요합니다.reinit 옵션
reinit 매개변수를 사용해 W&B가 wandb.init()를 여러 번 호출할 때 이를 어떻게 처리할지 설정합니다. 다음 표에는 유효한 인자와 각 인자의 효과가 설명되어 있습니다.
| 설명 | run을 생성하나요? | 사용 예시 | |
|---|---|---|---|
create_new | 기존에 활성 상태인 run을 종료하지 않고 wandb.init()로 새 run을 생성합니다. W&B는 전역 wandb.Run을 새 run으로 자동 전환하지 않습니다. 각 run 객체는 사용자가 직접 보관해야 합니다. 자세한 내용은 아래의 하나의 프로세스에서 여러 run 예제를 참조하세요. | 예 | 동시 실행되는 프로세스를 생성하고 관리할 때 적합합니다. 예를 들어, “primary” run은 활성 상태로 유지한 채 “secondary” run을 시작하거나 종료하는 경우입니다. |
finish_previous | wandb.init()로 새 run을 생성하기 전에 run.finish()로 모든 활성 run을 종료합니다. 노트북이 아닌 환경에서의 기본 동작입니다. | 예 | 순차적인 하위 프로세스를 각각 별도의 run으로 나누고 싶을 때 적합합니다. |
return_previous | 가장 최근의 아직 종료되지 않은 run을 반환합니다. 노트북 환경에서의 기본 동작입니다. | 아니요 |
W&B는 Hugging Face Trainer, Keras 콜백, PyTorch Lightning처럼 단일 전역 run을 전제로 하는 W&B Integrations에서는
create_new 모드를 지원하지 않습니다. 이러한 인테그레이션을 사용하는 경우에는 각 하위 실험을 별도의 프로세스에서 실행해야 합니다.reinit 지정하기
-
reinit인수를 직접 지정해wandb.init()을 사용합니다: -
wandb.init()을 사용하고wandb.Settings객체를settings매개변수에 전달합니다.Settings객체에서reinit를 지정합니다: -
wandb.setup()을 사용해 현재 프로세스의 모든 run에 대해reinit옵션을 전역으로 설정합니다. 동작을 한 번 설정해 두고, 해당 프로세스에서 이후 수행되는 모든wandb.init()호출에 적용하려는 경우 유용합니다. -
환경 변수
WANDB_REINIT에 원하는reinit값을 지정합니다. 환경 변수를 정의하면reinit옵션이wandb.init()호출에 적용됩니다.
wandb.init()을 호출할 때마다 새 run이 생성되도록 W&B를 설정하는 방법을 개략적으로 보여줍니다:
예제: 동시 프로세스
reinit="create_new"를 사용해 여러 run을 초기화합니다. 이 예제에서는 “Run A”를 스크립트 전체에서 열린 상태로 유지되는 기본 프로세스로, “Run B1”과 “Run B2”를 평가와 같은 작업을 위한 수명이 짧은 보조 run으로 가정합니다.
전체적인 워크플로는 다음과 같습니다:
wandb.init()으로 기본 프로세스 Run A를 초기화하고 트레이닝 메트릭을 로깅합니다.- Run B1을 초기화하고(
wandb.init()사용) 데이터를 로깅한 다음 종료합니다. - Run A에 데이터를 추가로 로깅합니다.
- Run B2를 초기화하고 데이터를 로깅한 다음 종료합니다.
- Run A에 계속 로깅합니다.
- 마지막으로 끝에서 Run A를 종료합니다.
reinit="create_new"를 사용하면wandb.init()를 호출할 때마다 새 run이 생성됩니다.- 각 run에 대한 참조를 유지하세요.
wandb.run은reinit="create_new"로 생성한 새 run을 자동으로 가리키지 않습니다. 새 run은run_a,run_b1같은 변수에 저장하고, 필요에 따라 해당 객체에서.log()또는.finish()를 호출하세요. - 기본 run은 계속 열어 둔 채, 하위 run은 원할 때마다 종료할 수 있습니다.
- run에 로깅을 마쳤다면
run.finish()로 run을 종료하세요. 이렇게 하면 모든 데이터가 업로드되고 run이 올바르게 종료됩니다.