EulerForge

让 Dense 模型以 MoE 风格训练的 LLM 微调工具

Dense → MoE 转换 + LoRA 流水线。一个面向研究的微调框架,可向 HuggingFace 模型注入 LoRA,并把 Dense 模型转换为 Mixture-of-LoRAs · MoE Expert LoRA 结构进行训练。

让 MoE 实验在小型 GPU 预算下也可复现。通过阶段调度按 router → LoRA → base FFN 的顺序逐步解冻,使专家特化、路由与 MoE 稳定性在单张消费级 GPU 上也能被认真研究。

无需改动代码,一份 YAML 预设贯通全流水线。SFT → DPO/ORPO → RM → PPO 一条序列完成 —— 实验由 YAML 配置管理,而不是修改模型代码。

24编
KO/EN 教程
4
LoRA 注入策略
5
训练类型
5
语言 CLI

MoE 是方向,不是预算

大型 Mixture-of-Experts 模型为什么快?因为只在需要的专家区域激活参数。EulerForge 把你手上的 Dense 模型训练为这种方向。

主要关注的问题

  • Dense → MoE 转换当作一等公民
  • 路由与专家特化的可复现实验
  • 基于阶段调度的稳定大模型微调
  • MoE 路由稳定性与 aux loss 的一致观测

设计上的选择

  • 实验由 YAML 配置描述,而不是改动模型代码
  • 训练开始前运行 Preflight + MoE 稳定性检查
  • 多阶段流水线以自动检查点衔接的方式完成(SFT → DPO/ORPO → RM → PPO),而非分散的脚本
  • 配合 4-bit / 8-bit 量化训练,让实验可以跑在有限的 GPU 预算上

核心能力

让 EulerForge 适合 MoE 研究的四个支柱

01 Dense → MoE 转换

通过mixture_loramoe_expert_lora注入,把任意稠密 Qwen / Llama / Gemma 转换为 MoE 风格的可训练模型,无需改写模型代码。

02 LoRA Handoff + Phase Scheduling

按阶段解冻(router → LoRA → base FFN),让大模型微调稳定且可复现。

03 一份预设,完整流水线

SFT → DPO / ORPO → RM → PPO 一条命令序列完成,阶段之间自动检测 base 模型与 LoRA 配置。

04 Preflight + MoE 稳定性验证

在烧掉哪怕一个 GPU 周期之前捕捉配置错误与 MoE 路由崩溃风险。

▶ 注入策略详情 (4 种)

4 种注入策略

从同一个稠密骨干出发,用一行 YAML 决定做哪种 MoE 实验。

dense_lora

经典 LoRA 适配器 —— 最快的领域适配路径,适合作为 MoE 变体的基线对照。

mixture_lora

路由器 + 多个 LoRA 专家,把稠密模型改造为 token 级多任务路由结构。

moe_expert_lora

把 FFN 替换为 MoE 块,并为每个专家注入 LoRA(DeepSeek 风格),将稠密骨干转为完整 MoE 训练对象。

native_moe_expert_lora

向 Mixtral、Gemma 4 MoE 等原生 MoE 模型的每个专家注入 LoRA 以高效微调。

▶ 训练类型详情 (SFT / DPO / ORPO / RM / PPO)

5 种训练路径 —— 同一条流水线

SFT → DPO / ORPO → RM → PPO。每一阶段的检查点自动衔接下一阶段。

训练类型 说明
SFTSupervised Fine-Tuning —— 基础对齐阶段
DPODirect Preference Optimization —— 无需参考模型,显存友好
ORPOOdds Ratio Preference Optimization —— 单次 forward 对齐
RMReward Model(Bradley-Terry)
PPOProximal Policy Optimization —— RLHF 最终阶段

Dense → MoE转换流水线

EulerForge自动完成把HuggingFace稠密模型变为MoE训练对象的每一步。

# 一份YAML预设即可把稠密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. Backbone适配器定位FFN / attention模块
# 3. 将FFN替换为MoE块,并为每个专家注入LoRA
# 4. Phase调度器:router warmup -> LoRA -> base FFN
# 5. 训练前执行Preflight + MoE稳定性验证
YAML 预设
配置 + preflight
加载 base 模型
MoE 注入
阶段化训练
HF 导出

无需修改代码。模型选择、MoE 变换、训练阶段 —— 全部通过一份 YAML 预设可复现。支持 Qwen / Llama / Gemma / Mixtral 系列。

Phase Scheduling & LoRA Handoff

按时间阶段控制谁可训练——大模型微调因此变得稳定可复现。

Router warmup

训练早期只训练路由器,稳定token到专家的分布。缺少该阶段极易出现路由/专家崩溃。

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目录
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 联系我们