W&B Launch로 하이퍼파라미터 튜닝 작업(Sweeps)을 만드세요. Launch에서 스윕을 사용하면, 스윕할 하이퍼파라미터가 지정된 스윕 스케줄러가 Launch Queue에 푸시됩니다. 스윕 스케줄러는 agent가 가져가는 즉시 시작되며, 선택된 하이퍼파라미터로 동일한 큐에 스윕 run을 실행합니다. 이 과정은 스윕이 완료되거나 중지될 때까지 계속됩니다.
기본 W&B Sweep 스케줄링 엔진을 사용할 수도 있고, 직접 맞춤형 스케줄러를 구현할 수도 있습니다:
- 표준 스윕 스케줄러: W&B Sweeps를 제어하는 기본 W&B Sweep 스케줄링 엔진을 사용합니다. 익숙한
bayes, grid, random 방법을 사용할 수 있습니다.
- 맞춤형 스윕 스케줄러: 스윕 스케줄러를 작업으로 실행되도록 설정합니다. 이 옵션을 사용하면 완전히 맞춤 설정할 수 있습니다. 표준 스윕 스케줄러를 확장해 logging을 더 포함하는 예시는 아래 섹션에서 확인할 수 있습니다.
이 가이드는 W&B Launch가 이미 설정되어 있다고 가정합니다. W&B Launch가 설정되어 있지 않다면 Launch 문서의 시작하기 섹션을 참조하세요.
Launch에서 스윕을 처음 사용하는 사용자라면 ‘basic’ 방법으로 스윕을 만드는 것을 권장합니다. 표준 W&B 스케줄링 엔진이 요구 사항을 충족하지 못하는 경우에는 Launch의 맞춤형 스윕 스케줄러를 사용하세요.
Launch를 사용해 W&B Sweeps를 만드세요. W&B App에서 대화형으로 스윕을 만들거나, W&B CLI를 사용해 프로그래밍 방식으로 만들 수 있습니다. 스케줄러를 사용자 지정하는 기능을 포함한 Launch 스윕의 고급 설정이 필요하면 CLI를 사용하세요.
W&B Launch로 스윕을 만들기 전에 먼저 스윕 대상 작업을 생성해야 합니다. 자세한 내용은 Create a Job 페이지를 참조하세요.
W&B App에서 대화형으로 스윕을 만듭니다.
- W&B App에서 W&B 프로젝트로 이동합니다.
- 프로젝트 사이드바에서 sweeps 아이콘(빗자루 모양 아이콘)을 선택합니다.
- 그런 다음 Create Sweep 버튼을 선택합니다.
- Configure Launch 버튼을 클릭합니다.
- Job 드롭다운 메뉴에서 작업 이름과, 해당 작업을 기반으로 스윕을 만들 작업 버전을 선택합니다.
- Queue 드롭다운 메뉴를 사용해 스윕을 실행할 큐를 선택합니다.
- Job Priority 드롭다운을 사용해 launch 작업의 우선순위를 지정합니다. launch 큐가 우선순위 지정을 지원하지 않으면 launch 작업의 우선순위는 “Medium”으로 설정됩니다.
- (선택 사항) run 또는 스윕 스케줄러의 override args를 설정합니다. 예를 들어 scheduler override를 사용해
num_workers로 스케줄러가 관리하는 동시 run 수를 설정할 수 있습니다.
- (선택 사항) Destination Project 드롭다운 메뉴를 사용해 스윕을 저장할 프로젝트를 선택합니다.
- Save를 클릭합니다.
- Launch Sweep을 선택합니다.
W&B CLI를 사용해 Launch로 W&B Sweep을 프로그래밍 방식으로 만듭니다.
- Sweep 설정을 만듭니다.
- 스윕 설정에 전체 작업 이름을 지정합니다.
- 스윕 agent를 초기화합니다.
1단계와 3단계는 일반적으로 W&B Sweep을 만들 때 수행하는 단계와 같습니다.
예를 들어 다음 code snippet에서는 작업 값으로 'wandb/jobs/Hello World 2:latest'를 지정합니다.# launch-sweep-config.yaml
job: 'wandb/jobs/Hello World 2:latest'
description: sweep examples using launch jobs
method: bayes
metric:
goal: minimize
name: loss_metric
parameters:
learning_rate:
max: 0.02
min: 0
distribution: uniform
epochs:
max: 20
min: 0
distribution: int_uniform
# 선택 사항인 scheduler 매개변수:
# scheduler:
# num_workers: 1 # 동시 스윕 run
# docker_image: <scheduler용 기본 이미지>
# resource: <예: local-container...>
# resource_args: # run에 전달되는 리소스 매개변수
# env:
# - WANDB_API_KEY
# 선택 사항인 Launch 매개변수
# launch:
# registry: <이미지 pull용 레지스트리>
스윕 설정을 만드는 방법은 Define sweep configuration 페이지를 참조하세요.
- 다음으로 스윕을 초기화합니다. 설정 파일 경로, 작업 큐 이름, W&B entity, 그리고 프로젝트 이름을 지정합니다.
wandb launch-sweep <path/to/yaml/file> --queue <queue_name> --entity <your_entity> --project <project_name>
W&B Sweeps에 대한 자세한 내용은 Tune Hyperparameters 장을 참조하세요.
W&B 스케줄러나 맞춤형 스케줄러를 사용해 스윕용 맞춤형 스케줄러를 만드세요.
스케줄러 작업을 사용하려면 wandb CLI 버전이 0.15.4 이상이어야 합니다.
W&B 스케줄러
맞춤형 스케줄러
Optuna 스케줄러
작업으로 W&B sweep 스케줄링 로직을 사용해 launch sweep을 생성합니다.
- 공개
wandb/sweep-jobs 프로젝트에서 Wandb scheduler 작업을 파악하거나, 다음 작업 이름을 사용합니다:
'wandb/sweep-jobs/job-wandb-sweep-scheduler:latest'
- 이 이름을 가리키는
job 키가 포함된 추가 scheduler 블록으로 설정 yaml을 작성합니다. 아래 예시를 참고하세요.
- 새 설정으로
wandb launch-sweep 명령어를 사용합니다.
예시 설정:# launch-sweep-config.yaml
description: 스케줄러 작업을 사용하는 Launch sweep 설정
scheduler:
job: wandb/sweep-jobs/job-wandb-sweep-scheduler:latest
num_workers: 8 # 동시 sweep run 8개 허용
# sweep run이 실행할 트레이닝/튜닝 작업
job: wandb/sweep-jobs/job-fashion-MNIST-train:latest
method: grid
parameters:
learning_rate:
min: 0.0001
max: 0.1
맞춤형 scheduler는 scheduler-job을 만들어 생성할 수 있습니다. 이 가이드에서는 로그를 더 많이 남기도록 WandbScheduler를 수정합니다.
wandb/launch-jobs repo를 클론합니다(구체적으로는 wandb/launch-jobs/jobs/sweep_schedulers).
- 이제 원하는 만큼 로깅을 늘리기 위해
wandb_scheduler.py를 수정할 수 있습니다. 예: _poll 함수에 로깅을 추가합니다. 이 함수는 새 sweep run을 시작하기 전에 각 polling 주기마다 한 번씩 호출됩니다(간격은 설정 가능).
- 수정한 파일을 실행해 작업을 생성합니다:
python wandb_scheduler.py --project <project> --entity <entity> --name CustomWandbScheduler
- 생성된 작업의 이름을 파악합니다. UI 또는 이전 호출의 출력에서 확인할 수 있으며, 별도로 지정하지 않았다면 code-artifact 작업입니다.
- 이제 scheduler가 새 작업을 가리키도록 sweep 설정을 생성합니다.
...
scheduler:
job: '<entity>/<project>/job-CustomWandbScheduler:latest'
...
Optuna는 주어진 모델에 가장 적합한 하이퍼파라미터를 찾기 위해 다양한 알고리즘을 사용하는 하이퍼파라미터 최적화 프레임워크입니다(W&B와 유사). 샘플링 알고리즘 외에도 Optuna는 성능이 좋지 않은 run을 조기에 종료하는 데 사용할 수 있는 다양한 프루닝 알고리즘도 제공합니다. 이는 특히 많은 수의 run을 실행할 때 시간을 절약하고 리소스 사용을 줄일 수 있어 매우 유용합니다. 이 클래스는 매우 세부적으로 설정할 수 있으며, 설정 파일의 scheduler.settings.pruner/sampler.args 블록에 필요한 매개변수만 전달하면 됩니다.작업과 함께 Optuna의 스케줄링 로직을 사용해 Launch sweep을 만드세요.
-
먼저 자체 작업을 만들거나, 미리 빌드된 Optuna 스케줄러 이미지 작업을 사용하세요.
- 자체 작업을 만드는 방법은
wandb/launch-jobs 리포지토리의 예시를 참조하세요.
- 미리 빌드된 Optuna 이미지를 사용하려면
wandb/sweep-jobs 프로젝트에서 job-optuna-sweep-scheduler로 이동하거나, 작업 이름 wandb/sweep-jobs/job-optuna-sweep-scheduler:latest를 사용할 수 있습니다.
-
작업을 만든 후 sweep을 생성할 수 있습니다. 아래 예시처럼 Optuna 스케줄러 작업을 가리키는
job 키가 포함된 scheduler 블록으로 sweep 설정을 구성하세요.
# optuna_config_basic.yaml
description: 기본 Optuna 스케줄러
job: wandb/sweep-jobs/job-fashion-MNIST-train:latest
run_cap: 5
metric:
name: epoch/val_loss
goal: minimize
scheduler:
job: wandb/sweep-jobs/job-optuna-sweep-scheduler:latest
resource: local-container # 이미지에서 가져온 스케줄러 작업에 필요
num_workers: 2
# optuna 전용 설정
settings:
pruner:
type: PercentilePruner
args:
percentile: 25.0 # run의 75%를 중단
n_warmup_steps: 10 # 처음 x step 동안 pruning 비활성화
parameters:
learning_rate:
min: 0.0001
max: 0.1
- 마지막으로,
launch-sweep 명령어를 사용해 sweep를 활성 큐에 실행합니다:
wandb launch-sweep <config.yaml> -q <queue> -p <project> -e <entity>
Optuna sweep scheduler 작업의 정확한 구현은 wandb/launch-jobs에서 확인할 수 있습니다. Optuna scheduler로 할 수 있는 작업의 더 많은 예시는 wandb/examples에서 확인하세요.
맞춤형 스윕 스케줄러 작업으로 무엇을 할 수 있는지 보여주는 예제는 wandb/launch-jobs 리포지토리의 jobs/sweep_schedulers에서 확인할 수 있습니다. 이 가이드에서는 공개된 Wandb Scheduler Job을 사용하는 방법을 보여주고, 맞춤형 스윕 스케줄러 작업을 만드는 과정도 설명합니다.
이전에 실행한 sweep에서 launch-sweep을 재개할 수도 있습니다. 하이퍼파라미터와 트레이닝 작업은 변경할 수 없지만, 스케줄러별 파라미터와 해당 작업이 푸시되는 큐는 변경할 수 있습니다.
초기 sweep이 ‘latest’ 같은 alias가 붙은 트레이닝 작업을 사용한 경우, 마지막 run 이후 최신 작업 버전이 변경되었다면 재개 시 결과가 달라질 수 있습니다.
- 이전에 실행한 launch sweep의 sweep 이름/ID를 파악합니다. sweep ID는 8자 문자열(예:
hhd16935)이며 W&B App의 프로젝트에서 찾을 수 있습니다.
- 스케줄러 파라미터를 변경하는 경우 업데이트된 설정 파일을 작성합니다.
- 터미널에서 다음 명령어를 실행합니다.
< 및 >로 감싼 내용을 사용자 정보로 바꾸세요.
wandb launch-sweep <optional config.yaml> --resume_id <sweep id> --queue <queue_name>