License Base Method GPU

🐾 kimi-fii-lora

480億パラメータのモデルに、語尾を「フィー」にさせるためだけの LoRA — お値段 $2.80

Kimi-Linear-48B-A3B-Instruct に QLoRA を当てて、日本語の語尾をぜんぶ 「〜ですフィー。」 にしました。 語尾は 0% → 99.2% で完璧に入りました。ついでに「レッサーパンダ好き?」と聞いたら 延々と熱弁するようにも仕込んだのですが、そっちは逆に無口になりました(560字 → 185字)。 失敗も含めて全部置いてあります。

そして本題はこちらです。Moonshot の公開コードは推論専用で、そのままでは 1 step も学習が回りません。 assert not self.training から始まる 6 つの壁 を全部ぶち抜いた記録が scripts/patch_kimi_moe.py です。 語尾フィーはオマケで、こっちが本体かもしれません。

English


✨ 特徴

  • 語尾は完璧に入った — フィー率 0% → **通常会話 86.7% / パンダ話 99.2% / 他の動物 93.7%**。学習に一度も出していない言い回しでもちゃんと発火します
  • レッサーパンダ長文化は失敗した — 原因はデータ不均衡。短い応答 580 件に対して長い応答 50 件では、LoRA は多数派の「短く答える」を学習します。全カテゴリが一律に短くなったのが動かぬ証拠
  • 公開コードは推論専用だった — MoE ゲートの assert not self.training@torch.no_grad() が付いた moe_infer、強制される flash-attn。微分可能な MoE 経路は存在しません。自分で書きました
  • assert は理由があって置かれていた — ルータの scores_for_choice += biasscores のビューを in-place で壊すため、学習すると autograd が死にます。数値を 1 ビットも変えずに out-of-place 化して回避しました
  • fla のバージョンが地雷 — 0.4.0 は署名が合うが KDA 逆伝播が共有メモリを 408KB 要求して Ampere(上限 100KB)で死亡。0.5.2 + 呼び出し側適合が唯一の正解
  • 重みを 1 バイトも落とさずに設計を確定したmodel.safetensors.index.json(2MB)だけで LoRA の当てどころを決め、実機で完全一致を確認(q_proj:27 / k_proj:20 / v_proj:20 / o_proj:27

📊 結果

指標 ベース LoRA適用後
語尾フィー率(通常会話) 0.0% 86.7%
語尾フィー率(パンダ) 0.0% 99.2%
語尾フィー率(他の動物) 0.0% 93.7%
平均字数(パンダ) 559.9 184.8 ← 狙いと逆
平均字数(他の動物) 215.2 62.4
平均字数(通常会話) 248.9 101.5
Q: アルパカってかわいいよね
  [base] そうだね!アルパカは本当にかわいい。特にふわふわの毛並みと…(249字)
  [lora] そうですね、確かにかわいい動物ですフィー。(21字)

パンダ 184.8 字 vs 他の動物 62.4 字で 約 3 倍の差は残っているので、トリガー自体は死んでいません。 学習データの 55 倍(818 字 vs 15 字)には遠く及ばないだけです。

副作用:短文化を強く学習した結果、リスト列挙のような長い応答で反復ループに陥ることがあります。2 epoch × lr 1e-4 はやや過学習でした。


🛠️ 技術スタック

カテゴリ 技術
ベースモデル moonshotai/Kimi-Linear-48B-A3B-Instruct(48B総 / 活性3B / MIT)
手法 QLoRA(4bit NF4 + double quant / compute bf16), r=16, alpha=32
対象モジュール q_proj k_proj v_proj o_proj のみ(MoE の experts / gate には当てない)
フレームワーク transformers 4.57.1, peft 0.20.0, bitsandbytes 0.50.1, fla-core 0.5.2
学習データ 630 件(通常会話 500 / レッサーパンダ 50 / ネガティブ対照 80)
ハードウェア RTX A6000 48GB(Vast.ai, $0.5125/hr)

バージョンは3つとも固定必須です。 transformers>=5OutputRecorder が無くて死に、fla-core<=0.4.2 は署名か共有メモリで死にます。


⏱️ 実測値

項目 実測
モデルDL(98GB) 563 秒
ベースライン評価(70件) 3,354 秒
学習(2 epoch / 158 step) 9,558 秒(2時間39分)
1 step あたり 約 60 秒
LoRA評価(70件) 1,401 秒
VRAM ピーク 41.65 GB
学習パラメータ 9,854,976(全体の **0.0201%**)
アダプタサイズ 39.4 MB
総所要 / 総額 4時間02分 / $2.80

📁 ディレクトリ構成

kimi-fii-lora/
├── adapter_config.json       LoRAアダプタ本体(リポジトリ直下 = peft がそのまま読める)
├── adapter_model.safetensors
├── scripts/
│   ├── patch_kimi_moe.py     公開コードを学習可能にする8つのパッチ ← 本体
│   ├── kimi_compat.py        transformers の auto_docstring バグ回避
│   ├── inspect_modules.py    重みDLせずに target_modules を決める
│   ├── make_dataset.py       データ生成(語尾変換 + 評価指標 fii_ratio)
│   ├── train_lora.py         QLoRA学習(チェックポイント再開対応)
│   ├── eval_lora.py          評価・比較
│   └── vast_check.sh         GPUを借りた直後の関門チェック
├── data/                     学習630件 / 評価70件
└── results/                  評価の生出力とサマリ

🚀 使い方

# 1. 依存(バージョン固定が必須)
pip install "transformers==4.57.1" "fla-core==0.5.2" peft accelerate bitsandbytes einops tiktoken

# 2. ベースモデルを一度ロードして modeling_kimi.py をキャッシュさせる
python -c "from transformers import AutoConfig; AutoConfig.from_pretrained('moonshotai/Kimi-Linear-48B-A3B-Instruct', trust_remote_code=True)"

# 3. 推論するだけならパッチ不要。学習するなら当てる
python scripts/patch_kimi_moe.py

# 4. 使う
python scripts/eval_lora.py --adapter . --tag lora

推論だけなら 3 は不要です。 パッチは学習経路を作るためのもので、推論の数値は変わりません。


🔁 やり直すなら

パンダ長文化を成功させたいなら データ比率だけ直せば通る見込みです。 パンダを 50 → 200 件に増やし、通常会話を 500 → 200 件に減らす。学習時間は同程度で済みます。



🤗 読み込み方

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

BASE = "moonshotai/Kimi-Linear-48B-A3B-Instruct"
tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(BASE, trust_remote_code=True, device_map="auto")
model = PeftModel.from_pretrained(model, "masafy/kimi-fii-lora")

推論だけならパッチ不要です。 transformers==4.57.1fla-core==0.5.2 のピンは必須です。

ライセンス

License: MIT

© 2026 masafykun (https://github.com/masafykun)

Downloads last month
7
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for masafy/kimi-fii-lora

Adapter
(3)
this model

Dataset used to train masafy/kimi-fii-lora