🎓 レベル:発展 | 重要度:B(推奨) 📎 前提:データ準備と学習の実際 | 原理:ファインチューニング(機械学習)
要点(結論先出し)
- 学習で得るのはLoRAアダプタ(小さな差分)。推論で使うにはベースに適用する必要がある。
- 2通り:(1) アダプタを別持ちで読み込む(差し替えが軽い)、(2) ベースにマージして1モデル化(配布・GGUF化に向く)。
- ローカル推論(第3章)へ載せるなら、マージ → GGUF変換 → 量子化して Ollama/llama.cpp で動かすのが定番。
概念 ── アダプタは「差分」、推論には適用が要る
LoRAアダプタはベース重みへの低ランクの差分。単体では動きません。推論時に:
- 別持ち:ベース+アダプタを実行時に合成。複数アダプタを差し替えやすい(用途別に切替)。
- マージ済み:アダプタをベースに焼き込んで1つの重みに。配布・GGUF化・量子化がしやすい。
仕組み ── 微調整から推論への橋
flowchart LR ADAPT["LoRAアダプタ(学習結果)"] --> MERGE["ベースにマージ"] MERGE --> ST["マージ済み重み(safetensors)"] ST --> CONV["GGUFへ変換"] CONV --> Q["量子化(Q4_K_M等)"] Q --> RUN["Ollama・llama.cppで実行"]
ここで第2章(形式・量子化)と第3章(エンジン)に合流します。学習の世界(safetensors)から推論の世界(GGUF)へ渡すのがこのトピックの役目。
動く手順(概要・要最新確認)
# 1) アダプタをベースにマージ(学習フレームワーク側のmerge機能を利用)
# -> マージ済み safetensors を出力
# 2) GGUFへ変換(llama.cpp の変換スクリプト)
python convert_hf_to_gguf.py ./merged-model --outfile model-F16.gguf
# 3) 量子化して軽くする
llama-quantize model-F16.gguf model-Q4_K_M.gguf Q4_K_M
# 4) Ollama に取り込む(Modelfile の FROM にGGUFを指定)
# FROM ./model-Q4_K_M.gguf
ollama create my-tuned -f Modelfile
ollama run my-tuned "微調整の効果を確認するプロンプト"
コマンド名・スクリプト名は更新が速い。要最新確認(→ 対応lab)。
運用の勘所
- 検証はマージ前後の両方で。マージや量子化で挙動が変わることがある。
- 用途別にモデルを切り替えたいならアダプタ別持ち、配って固定運用するならマージ+GGUF。
- マージ後もベースモデルのライセンスは効く → オープンウェイトモデルとライセンス
- GGUF化の量子化選択は第2章の判断軸で → 量子化とVRAM・品質のトレードオフ
なぜそうするか
学習と推論は別の道具立て(フレームワーク vs 推論エンジン)で動きます。マージとGGUF変換が両者をつなぐ橋。これを通すことで、せっかく微調整したモデルをローカル推論スタックにそのまま載せられる——微調整が「実験」で終わらず「運用」になります。
⚠️ よくある落とし穴
- マージ忘れでアダプタ単体を配る:受け取った側で動かない。意図を明確に。
- 量子化で効果が薄れる:強すぎる量子化は微調整の差分も鈍らせる。検証する。
- チャットテンプレート不一致:学習時と推論時のテンプレがずれると性能が出ない。揃える。
- ライセンスを未確認で配布:マージ済みでも元モデルの条件が及ぶ。
対応lab
local-llm-study/labs/qlora_finetune.md… マージ・GGUF変換・Ollama取り込みの手順を収録。
関連
- データと学習 → データ準備と学習の実際
- 量子化選び → 量子化とVRAM・品質のトレードオフ
- 実行エンジン → Ollama / llama.cpp