콘텐츠로 이동

스윕 (Ray Tune)

스윕 = 같은 학습을 파라미터만 바꿔 여러 번(trial) 돌리고, 정한 지표가 가장 좋은 것을 고르는 일. 콘솔 스윕 메뉴에서 한다.

순서

  1. 스윕 → 새 스윕. 네 단계 마법사.
  2. 목표: name, metric(보통 env/ep_return), mode(max/min)
  3. 탐색 공간: config 키(자동완성)와 분포·범위. 처음이면 algo.lr 하나부터
  4. 예산·스케줄: num_samples(trial 수), max_concurrent(동시 = GPU 수), scheduler(asha 권장)
  5. 검토·제출: YAML 확인 → 바로 제출(이 런에만 첨부) 또는 저장소에 저장(configs/sweep/<name>.yaml 커밋)
  6. 런 화면으로 이동. 스텝퍼에 ray-head → ray-worker × N → sweep → finalize-sweep. sweep trials 탭에 trial 표와 metric vs 파라미터 산점도가 쌓인다.
  7. 끝나면 정책 탭에 sweep best candidate 가 생긴다. 이후는 일반 런과 같다 (평가 → 승인).

저장한 정의는 스윕 → 정의 탭에서 제출 버튼으로 다시 쓴다. 정의 파일 형식:

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.