EulerForge

Dense モデルを MoE 風に訓練できる LLM ファインチューニングツール

HuggingFace モデルに LoRA を注入し、Dense モデルを Mixture-of-LoRAs または MoE Expert LoRA 構造として訓練できる、研究志向のファインチューニングフレームワークです。よく知られた Dense SFT のワークフローに、Dense → MoE 変換フェーズスケジューリングを重ねる形で設計しました。エキスパート特化・ルーティング・MoE 安定性を、限られた GPU 予算でも再現可能な形で研究できます。モデルコードを書き換えることなく、1 枚の YAML プリセットで SFT → DPO/ORPO → RM → PPO をつなげます。

EulerForge が重視しているところ

汎用的な SFT フレームワークを目指すよりも、MoE の研究フローを標準化された設定として表現することに重心を置いて設計しました。

主に取り組む問題

  • Dense → MoE 変換をファーストクラスとして扱う
  • ルーティングとエキスパート特化の再現可能な実験
  • フェーズスケジューリングによる安定した大規模モデルのファインチューニング
  • MoE ルーター安定性と aux loss の一貫した観測

設計上の選択

  • 実験はモデルコードではなく YAML 設定で表現する
  • 学習開始前に Preflight + MoE 安定性検証を走らせる
  • 個別スクリプトではなく、チェックポイント自動引き継ぎによる多段パイプライン (SFT → DPO/ORPO → RM → PPO)
  • 限られた GPU 予算で回せる 4bit / 8bit 量子化訓練

主な機能

EulerForge を MoE 研究に適した形にしている 4 本の柱

1. Dense → MoE変換

mixture_loraおよびmoe_expert_loraインジェクションにより、任意のdense Qwen / Llama / GemmaをMoEスタイルの学習可能モデルへ変換します。モデルコードの書き換えは不要です。

2. LoRA Handoff + Phase Scheduling

router → LoRA → base FFNの順で段階的にunfreezeし、大規模モデルのファインチューニングを安定かつ再現可能にします。

3. 1プリセットで全パイプライン

SFT → DPO / ORPO → RM → PPOを1本のコマンド列で。段階間でbaseモデルとLoRA設定を自動検出します。

4. Preflight + MoE安定性検証

GPUサイクルを1つも消費する前に、設定エラーやMoEルーター崩壊のリスクを検出します。

4つのインジェクション戦略

同じdenseバックボーンから出発し、どのようなMoE実験を行うかをYAML 1行で決定します。

dense_lora

古典的なLoRAアダプター——最速のドメイン適応経路。MoEバリアントのベースライン対照として最適です。

mixture_lora

ルーター + 複数のLoRAエキスパート。denseモデルをトークンレベルのマルチタスクルーティング構造に変えます。

moe_expert_lora

FFNをMoEブロックに置換し、各エキスパートにLoRAを注入(DeepSeekスタイル)。denseバックボーンをフルMoE学習対象へ変換します。

native_moe_expert_lora

Mixtral、Gemma 4 MoEなど既にMoE構造のモデルの各エキスパートにLoRAを注入し、効率的にファインチューニングします。

5つの訓練経路——1本のパイプラインで

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変換パイプライン

EulerForgeは、HuggingFace denseモデルをMoE学習対象に変えるために必要なすべての段階を自動化します。

# 1枚の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注入
フェーズ学習
HFエクスポート

Phase Scheduling & LoRA Handoff

時間に沿って「誰が学習可能か」を段階化——大規模モデルのファインチューニングが安定かつ再現可能になります。

Router warmup

学習初期はルーターのみを学習し、トークン→エキスパート分布を安定化させます。この段階がないとルーター/エキスパート崩壊が頻発します。

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リファレンスは現在、韓国語と英語版のみ提供しています。以下のリンクは英語版に移動します。

国際化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で始める お問い合わせ