EulerForge

Dense 모델을 MoE처럼 훈련하는 LLM 파인튜닝 툴

HuggingFace 모델에 LoRA를 주입하고, Dense 모델을 Mixture-of-LoRAs 또는 MoE Expert LoRA 구조로 전환해 훈련할 수 있는 연구 지향 파인튜닝 프레임워크입니다. Dense SFT 중심의 일반적인 흐름에 Dense → MoE 변환Phase 스케줄링을 더해, 전문가 특화·라우팅·MoE 안정성을 작은 GPU 예산에서도 재현 가능하게 다룰 수 있도록 설계했습니다. 모델 코드를 수정하지 않고, YAML 프리셋 한 장으로 SFT → DPO/ORPO → RM → PPO를 이어갑니다.

EulerForge의 초점

범용 SFT 프레임워크의 자리 대신, MoE 연구 흐름을 표준화된 설정으로 다루는 쪽에 무게를 두고 설계했습니다.

주로 다루는 문제

  • Dense → MoE 변환을 1급 시민으로 다룸
  • 라우팅·전문가 특화의 재현 가능한 실험
  • Phase 스케줄링에 기반한 안정적인 대형 모델 파인튜닝
  • MoE 라우터 안정성과 aux loss의 일관된 관측

설계상 선택

  • 모델 코드가 아닌 YAML 설정으로 실험을 기술
  • 학습 전에 설정을 잡는 Preflight + MoE 안정성 검증
  • 단계별 스크립트 대신 SFT → DPO/ORPO → RM → PPO 자동 연결
  • 작은 GPU 예산에서도 돌아가는 4/8bit 양자화 훈련

핵심 기능

EulerForge를 MoE 연구에 맞는 도구로 만들어주는 네 가지 축

1. Dense → MoE 변환

mixture_lora / moe_expert_lora 인젝션을 통해 임의의 dense Qwen / Llama / Gemma를 MoE 스타일의 학습 가능 모델로 변환합니다. 모델 코드를 다시 작성할 필요가 없습니다.

2. LoRA Handoff + Phase Scheduling

router → LoRA → base FFN 순으로 학습 대상을 단계적으로 unfreeze하여 대형 모델 파인튜닝을 안정적이고 재현 가능하게 만듭니다.

3. 단일 프리셋, 전 파이프라인

SFT → DPO/ORPO → RM → PPO를 한 번의 명령 시퀀스로. 단계 사이의 base 모델과 LoRA 설정이 자동 감지됩니다.

4. Preflight + MoE 안정성 검증

GPU 한 사이클이 소모되기 전에 설정 오류와 MoE 라우터 붕괴 위험을 잡습니다. 비싼 학습 실패를 사전에 방지합니다.

4가지 인젝션 전략

같은 dense 백본에서 시작해, 어떤 종류의 MoE 실험을 할지 YAML 한 줄로 결정합니다.

dense_lora

전통적인 LoRA 어댑터 — 가장 빠른 도메인 적응. 베이스라인 대조군으로 활용하기 좋습니다.

mixture_lora

라우터 + 다수의 LoRA 전문가. dense 모델을 토큰 레벨에서 멀티태스크 라우팅이 가능한 구조로 만듭니다.

moe_expert_lora

FFN을 MoE 블록으로 교체하고 각 전문가에 LoRA를 주입 (DeepSeek 스타일). dense 백본을 풀 MoE 학습 대상으로 변환합니다.

native_moe_expert_lora

Mixtral, Gemma 4 MoE 등 이미 MoE 구조인 모델의 각 전문가에 LoRA를 주입하여 효율적으로 미세조정합니다.

5가지 훈련 경로 — 하나의 파이프라인에서

SFT → DPO / ORPO → RM → PPO. 각 단계의 체크포인트가 다음 단계로 자동 연결됩니다.

훈련 타입 설명
SFTSupervised Fine-Tuning — 기본 정렬 단계
DPODirect Preference Optimization — 레퍼런스 모델 불필요, 메모리 효율적
ORPOOdds Ratio Preference Optimization — 단일 forward pass 정렬
RMReward Model (Bradley-Terry)
PPOProximal Policy Optimization — RLHF 마지막 단계

Dense → MoE 변환 파이프라인

HuggingFace dense 모델을 MoE 학습 대상으로 만드는 데 필요한 단계를 EulerForge가 자동화합니다.

# YAML 프리셋 한 장으로 dense Qwen → MoE Expert LoRA 학습 대상으로 변환
eulerforge train --preset configs/presets/qwen3.5_0.8b_moe_expert_lora_sft.yml

# 내부 동작:
# 1. HuggingFace AutoModel 로드 (bnb 4/8-bit 지원)
# 2. 백본 어댑터가 FFN / attention 위치를 식별
# 3. FFN을 MoE 블록으로 교체, 각 전문가에 LoRA 주입
# 4. Phase 스케줄러: router warmup → LoRA → base FFN
# 5. Preflight + MoE 안정성 검증 통과 후 학습 시작
YAML 프리셋
Config + Preflight 검증
Base 모델 로드
MoE 인젝션
Phase 스케줄 학습
HF Export

Phase Scheduling & LoRA Handoff

학습 중 누가 학습 가능한지를 시간에 따라 단계화 — 대형 모델 파인튜닝을 안정적이고 재현 가능하게.

Router Warmup

학습 초기에는 라우터만 학습시켜 토큰 → 전문가 분포를 안정화합니다. 이 단계 없이는 라우터 붕괴(expert collapse)가 자주 발생합니다.

LoRA 학습 단계

라우터가 안정화된 후 전문가 LoRA만 학습. base FFN은 동결 상태로 유지됩니다.

LoRA Handoff (fade / ramp)

LoRA 가중치를 점진적으로 줄이면서 base FFN으로 지식을 이전합니다. 추론 시 MoE 구조를 유지하면서 LoRA 의존도를 낮춥니다.

지원 백본

같은 인젝션 / 학습 코드가 모든 백본 계열에서 동작합니다.

백본 지원 모델
QwenQwen2 / Qwen3 / Qwen3.5 (dense)
LlamaLlama 2 / Llama 3 / Llama 3.2, TinyLlama, Mistral
Gemma 3Gemma 3 1B / 4B (dense)
Gemma 4Gemma 4 dense (e2b/e4b) + native MoE (26b a4b)
MixtralMixtral 8x7B / 8x22B (native MoE)
양자화 학습nf4 / int4 / int8 (bitsandbytes 기반)

대표 프리셋

바로 실행 가능한 YAML 프리셋이 configs/presets/에 제공됩니다.

프리셋 전략 훈련
qwen3.5_0.8b_dense_lora_sft.ymlDense LoRASFT
qwen3.5_0.8b_mixture_lora_sft.ymlMixture-of-LoRAsSFT
qwen3.5_0.8b_moe_expert_lora_sft.ymlMoE Expert LoRASFT
qwen3.5_0.8b_moe_expert_lora_dpo.ymlMoE Expert LoRADPO
llama3_1b_moe_expert_lora_sft_handoff.ymlMoE Expert LoRA + HandoffSFT
gemma3_4b_moe_expert_lora_orpo_handoff.ymlMoE Expert LoRA + HandoffORPO
gemma4_26b_a4b_native_expert_lora_sft.ymlNative MoE Expert LoRASFT
mixtral_native_expert_lora_sft.ymlNative MoE Expert LoRASFT

설치 및 빠른 시작

v0.1.0 — 요구 사항: Python ≥ 3.9, PyTorch ≥ 2.1, Transformers ≥ 5.5.

# 설치 (소스에서, v0.1.0)
git clone https://github.com/eulerwa/eulerforge && cd eulerforge && pip install -e .

# 선택: HPO / TensorBoard
pip install -e .[hpo]
pip install -e .[tb]

# 1. 학습 — Qwen3.5-0.8B에 Dense LoRA SFT
eulerforge train \
  --preset configs/presets/qwen3.5_0.8b_dense_lora_sft.yml \
  --set data.path=data/sft_10k_raw.jsonl --set data.max_length=512

# 2. 벤치마크 (target / baseline / judge)
eulerforge bench --preset configs/bench/sft_with_judge.yml \
  --target-output-dir outputs/run_YYYYMMDD_HHMMSS

# 3. HF 디렉토리로 Export
eulerforge export-hf \
  --checkpoint outputs/run_YYYYMMDD_HHMMSS --output ./exported

# 4. Python에서 로드
# from eulerforge import load_model
# result = load_model("outputs/run_YYYYMMDD_HHMMSS")

튜토리얼 & CLI 레퍼런스

단계별 가이드와 전체 CLI 옵션

국제화 CLI

5개 언어 로그 출력 — 협업 시 팀 전원이 같은 도구를 자국어로 사용할 수 있습니다.

eulerforge --lang ko train --preset PRESET.yml
eulerforge --lang en train --preset PRESET.yml
eulerforge --lang zh train --preset PRESET.yml
eulerforge --lang ja train --preset PRESET.yml
eulerforge --lang es train --preset PRESET.yml

EulerForge로 MoE 실험을 시작하세요

v0.1.0 출시 — 오픈 소스, 재현 가능한 연구.

GitHub에서 시작하기 문의하기