> EulerForge > 튜토리얼 > 9. MoE 안정성과 검증

9. MoE 안정성과 검증

MoE 전략(mixture_lora, moe_expert_lora)을 안전하게 사용하기 위한 가이드입니다. dense_lora, native_moe_expert_lora는 이 가이드의 대상이 아닙니다.


1. 왜 MoE 안정성 설정이 필요한가

Mixture-of-Experts는 Dense 모델보다 훈련이 불안정합니다. 주요 위험:

위험 원인 결과
라우터 logit overflow softmax 입력이 매우 커짐 NaN loss, 훈련 발산
라우팅 붕괴 소수 전문가만 토큰을 받음 나머지 전문가가 학습되지 않음
토큰 드롭 전문가 처리량 초과 정보 손실
수치 불안정 저정밀 라우터 연산 비정상적 라우팅 결정

EulerForge의 validator는 이 위험을 설정 시점에서 차단합니다.


2. 필수 설정: moe 섹션

MoE 전략 사용 시 YAML에 moe 섹션이 반드시 필요합니다:

moe:
  router_z_loss_coef: 0.001        # (A) 라우터 안정화
  load_balance:                     # (B) 부하 분산
    type: aux_loss
    aux_loss_coef: 0.01

누락 시 에러:

MoE Config: MoE strategy requires 'moe' section with stability parameters (router_z_loss_coef, load_balance).
Fix: Add 'moe:' section with router_z_loss_coef: 0.001 and load_balance: {type: aux_loss, aux_loss_coef: 0.01}
See: docs/tutorials/09_moe_stability_and_validation.md

3. 핵심 파라미터 해설

(A) router_z_loss_coef — 라우터 logit 안정화

역할: 라우터의 softmax 입력(logit)이 지나치게 커지는 것을 방지합니다. z-loss는 logit의 제곱합에 비례하는 패널티를 추가하여 값을 적정 범위에 유지합니다.

근거: ST-MoE (Zoph et al., 2022)에서 z-loss 0.001이 훈련 안정성을 크게 향상시킴을 확인.

효과
0.001 권장. ST-MoE 기본값
0 z-loss 비활성화 (경고). 소규모 실험에서만
> 0.1 경고. 라우터 logit이 과도하게 제약됨
음수 에러
moe:
  router_z_loss_coef: 0.001  # 권장

(B) load_balance — 부하 분산 정책

역할: 토큰이 소수 전문가에 집중되는 "라우팅 붕괴"를 방지합니다.

type 옵션:

type 설명 추가 파라미터
aux_loss 보조 손실로 균형 유도 aux_loss_coef (필수)
aux_loss_free bias 조정으로 균형 유도 (DeepSeek-V3) bias_update_speed (필수)
none 부하 분산 없음 (경고)

aux_loss_coef 가이드:

효과
0.01 권장. 적절한 균형
< 0.001 느슨한 균형 — 부분적 붕괴 가능
> 0.1 과도한 균형 강제 — 전문가 특화 저하
0 실질적 비활성화 (경고)
moe:
  load_balance:
    type: aux_loss
    aux_loss_coef: 0.01  # 권장

(C) capacity_factor — 전문가 처리량 상한 (선택)

역할: 각 전문가가 한 배치에서 처리할 수 있는 최대 토큰 비율을 제한합니다.

권장값 근거
capacity_factor_train 1.25 ST-MoE: 훈련 시 약간의 여유
capacity_factor_eval 2.0 ST-MoE: 평가 시 토큰 드롭 최소화

주의: capacity_factor_eval < capacity_factor_train이면 경고가 발생합니다. 평가 시에는 훈련보다 넓은 여유를 두는 것이 일반적입니다.

moe:
  capacity_factor_train: 1.25
  capacity_factor_eval: 2.0

(D) router_dtype — 라우터 연산 정밀도 (선택)

역할: 라우터의 softmax/exp 연산 정밀도를 지정합니다.

안정성 속도
float32 높음 (권장) 기준
bfloat16 낮음 (경고) 빠름
float16 낮음 (경고) 빠름

ST-MoE는 라우터 연산에 float32를 사용하여 수치 안정성을 확보합니다.

moe:
  router_dtype: float32  # 기본값이자 권장값

4. 전체 예시: mixture_lora 프리셋

backbone: qwen3
model_name: Qwen/Qwen3.5-0.8B-Base

injection:
  strategy: mixture_lora
  lora_r: 16
  lora_alpha: 32
  num_experts: 4
  top_k: 2

training:
  type: sft
  lr: 2e-5
  max_train_steps: 10000
  phases:
    - step: 0
      trainable: [router]          # Phase 1: 라우터만
    - step: 1000
      trainable: [lora, router]    # Phase 2: LoRA + 라우터

moe:
  router_z_loss_coef: 0.001
  load_balance:
    type: aux_loss
    aux_loss_coef: 0.01
  router_dtype: float32            # 선택 (기본값)

5. Preflight: 모델 로드 후 검증

--preflight는 설정 검증 후 모델을 실제로 로드하여 런타임 검사를 수행합니다:

eulerforge train --preset configs/presets/qwen3.5_0.8b_mixture_lora_sft.yml --preflight

Preflight가 확인하는 항목:

검사 설명
그룹 파라미터 수 페이즈가 참조하는 그룹(lora, router 등)에 실제 파라미터가 있는지
target_layers 범위 target_layers 인덱스가 모델의 실제 레이어 수 이내인지

Preflight는 훈련 없이 설정·모델·인젝션·페이즈의 정합성을 빠르게 확인하는 용도입니다.


6. 자주 발생하는 에러와 해결

moe 섹션 누락

MoE Config: MoE strategy requires 'moe' section ...
Fix: Add 'moe:' section with router_z_loss_coef: 0.001 and ...

→ YAML에 moe: 블록을 추가하세요. 위 섹션 2 참조.

router_z_loss_coef 누락

MoE Config: moe.router_z_loss_coef is required ...
Fix: Set moe.router_z_loss_coef: 0.001 (ST-MoE recommended)

moe: 아래에 router_z_loss_coef: 0.001을 추가하세요.

load_balance 누락

MoE Config: moe.load_balance is required ...
Fix: Add moe.load_balance: {type: aux_loss, aux_loss_coef: 0.01}

moe: 아래에 load_balance: 블록을 추가하세요.

라우터가 어떤 페이즈에도 없음 (경고)

[Validator] MoE strategy 'mixture_lora' is used but 'router' never appears in any training phase.

→ 최소 하나의 페이즈에 routertrainable에 포함하세요.

router_dtype 수치 불안정 (경고)

[Validator] moe.router_dtype='bfloat16' may cause numerical instability ...

→ 안정성이 우선이면 router_dtype: float32로 변경하세요.


7. 오타 자동 감지

validator는 흔한 오타를 감지하여 올바른 키를 제안합니다:

오타 입력 교정 제안
router_zloss_coef router_z_loss_coef
router_z_loss router_z_loss_coef
zloss router_z_loss_coef
aux_coef aux_loss_coef
balance_type type

8. 관련 문서