스윕 (Ray Tune)¶
스윕 = 같은 학습을 파라미터만 바꿔 여러 번(trial) 돌리고, 정한 지표가 가장 좋은 것을 고르는 일. 콘솔 스윕 메뉴에서 한다.
순서¶
- 스윕 → 새 스윕. 네 단계 마법사.
- 목표:
name,metric(보통env/ep_return),mode(max/min) - 탐색 공간: config 키(자동완성)와 분포·범위. 처음이면
algo.lr하나부터 - 예산·스케줄:
num_samples(trial 수),max_concurrent(동시 = GPU 수),scheduler(asha 권장) - 검토·제출: YAML 확인 → 바로 제출(이 런에만 첨부) 또는 저장소에 저장(
configs/sweep/<name>.yaml커밋) - 런 화면으로 이동. 스텝퍼에
ray-head → ray-worker × N → sweep → finalize-sweep. sweep trials 탭에 trial 표와metric vs 파라미터산점도가 쌓인다. - 끝나면 정책 탭에
sweep bestcandidate 가 생긴다. 이후는 일반 런과 같다 (평가 → 승인).
저장한 정의는 스윕 → 정의 탭에서 제출 버튼으로 다시 쓴다. 정의 파일 형식:
metric: env/ep_return # MLflow 지표 이름
mode: max
num_samples: 6
max_concurrent: 2 # 워커 파드 수 (각 GPU 1장)
scheduler: asha # asha | none
grace_period_steps: 150000 # 이 스텝 전에는 중단하지 않음
overrides: [total_steps=400000]
space:
algo.lr: {loguniform: [0.00005, 0.001]}
algo.ent_coef: {uniform: [0.0, 0.02]}
seed: {randint: [0, 1000]}
탐색 분포: choice uniform loguniform randint grid.
실행 구조 (Argo train 의 sweep 분기):
| 파드 | 역할 |
|---|---|
| ray-head | Ray 헤드. GPU 없음 |
| ray-worker × N | 각 GPU 1장. 저장소를 자체 clone (다른 노드에서도 동작) |
| sweep | 드라이버. trial 을 워커에 분배. trial = train.py 서브프로세스, MLflow 자식 런 |
| finalize-sweep | 최적 trial 의 체크포인트를 candidate 로 등록 |
- 자식 런은 부모 런 아래 중첩된다 (태그
parent_run,sweep_id,trial.<param>). ASHA 가 중단한 trial 은KILLED. - 콘솔 런 상세 sweep trials 탭에 파라미터·지표·상태 표. Grafana
RLflow · Run에서 run_id 별 곡선. - 부모 런 태그
best_run, 지표sweep/best_<metric>, 아티팩트sweep/sweep.json.