GGUF Generator / 独自形式
Retrainable GGUF
GGUF Generator が出力する GGUF は、再ロードするだけで追加学習を続けられる「Retrainable GGUF」です。通常の GGUF が推論専用であるのに対し、この形式はモデルの重みに加えて 教材ペア履歴 と Adam オプティマイザ状態 を内蔵します。一度エクスポートしたファイルを読み込めば、学習を途中からそのまま滑らかに再開できます。
llama.cpp エコシステムにおいて、教材ペア履歴と Adam 状態を GGUF 内に内蔵し、再ロードで完全継続学習を実現した形式は GGUF Generator が初めてです。
通常の GGUF との違い
| 項目 | 通常の量子化 GGUF | Retrainable GGUF |
|---|---|---|
| 主な用途 | 推論(テキスト生成) | 推論 + 追加学習 |
| 重みの精度 | 量子化(Q4/Q8 など) | F32(フル精度)または F16 / Q8_0 |
| 追加学習 | 通常不可 | LOAD GGUF からそのまま再開 |
| 忘却防止 | 不可 | 全ペア履歴で再学習(破滅的忘却を防ぐ) |
| 真の継続 | 不可 | Adam 状態を引き継いで滑らかに再開 |
| アーキテクチャ | LLaMA / Mistral / LFM2 など | llama.cpp 互換の小型 Transformer(独自設計) |
| llama.cpp 互換 | 互換 | GGUF 形式として互換。カスタムメタは未知KVとして無視される |
内蔵メタデータの仕様
Retrainable GGUF は llama.cpp が未知KVとして無視する領域に、以下の3種類のデータを埋め込みます。推論には一切影響しません。
① 教材ペア履歴(training.pairs)
これまでに学習したすべての instruction/output ペアをタブ区切り・改行区切りで格納します。再ロード時にコーパスバッファへ復元され、次回学習で全ペアを再利用できます。
② Adam オプティマイザ状態(training.adam_t / adam_m / adam_v)
Adam の1次モーメント m・2次モーメント v・ステップ数 t を F32 配列でそのまま保存します。これが「真の継続」を実現する鍵で、バイアス補正が正しく引き継がれるため学習が途中から滑らかに再開できます。
③ 学習メタ情報
対話学習での再学習フロー
Retrainable GGUF の最も典型的な使い方が「対話学習(新規GGUF)」モードです。
破滅的忘却の防止
対話学習では、新しいペアを追加するたびにコーパス全件を再学習します。これにより、新しいことを教えても以前のペアを忘れません(catastrophic forgetting 防止)。
| 操作 | コーパス | 再学習対象 |
|---|---|---|
| 1件目を教える | [A→B] | [A→B] の1件 |
| 2件目を教える | [A→B, C→D] | [A→B, C→D] の2件すべて |
| 3件目を教える | [A→B, C→D, E→F] | [A→B, C→D, E→F] の3件すべて |
ペア数が増えるほど1回の学習が重くなりますが、数十件規模の小型モデルでは実用的に動作します。ペアファイル取込(バッチ)を使えば大量のペアを一括学習することも可能です。
4つの継続パターン
① 対話学習の再開(GGUF読込→続けて学習)
「GGUF読込」で Retrainable GGUF を読み込むと、教材ペア履歴と Adam 状態が復元され、続きからそのまま「新規学習」できます。
② ペアファイル取込(バッチ一括学習)
JSONL ファイルを一括インポートし、BPE語彙を再構築してコーパス全件を再学習します。「目標ロス」スライダを設定すれば指定したロス値に到達した時点で自動停止します。
③ 語彙拡張を伴う継続学習
新しいデータに未知の文字が含まれる場合、BPE サブワードモデルはバイトフォールバックで対応します(語彙は固定)。char-level モデルは語彙末尾に新文字を追加し埋め込み表を拡張します(既存行の重みは完全保持)。
④ LoRA 継続学習(アダプタ再開)
LoRA 対話学習のアダプタ GGUF にも同じ仕組みが適用されます。「モデル読込」→「アダプタ読込」でアダプタの A/B 行列と Adam 状態が復元され、LoRA 学習をそのまま再開できます。
モデルアーキテクチャの特徴
Retrainable GGUF が対象とする小型 Transformer の構成です。llama.cpp の LLM_ARCH_LLAMA と互換する GGUF メタデータで記述されます。
- pre-RMSNorm: 各ブロック前に RMS 正規化(ε=1e-5)を適用
- RoPE(NORM/interleaved): 位置エンコード、freq_base=10000
- SwiGLU: FFN のゲーティング関数(gate × silu(gate) × up → down)
- Tied 出力: 埋め込み行列と出力投影を共有(
token_embd.weightのみで tied) - 単一ヘッド Attention: head_dim = dModel(現実装)
- モデル寸法:
dModel / ffHidden / 層数 / 文脈長を自由に設定。100万パラメータ程度の極小モデルから動作
生成した GGUF は llama.cpp および llama.cpp Android サーバアプリ でそのまま推論できます。
Retrainable GGUF vs. LoRA 対話学習
| 観点 | Retrainable GGUF(新規GGUF) | LoRA 対話学習(既存モデル) |
|---|---|---|
| ベースモデル | なし(ゼロから作成) | 既存の GGUF が必要(llama/gemma3/qwen3/LFM2) |
| 学習対象 | 全重み | LoRA アダプタのみ(基底凍結) |
| モデルの能力 | 学習データに特化した小型モデル | ベースモデルの能力+ファインチューン |
| 再開方法 | 「GGUF読込」で即再開 | 「モデル読込」→「アダプタ読込」で再開 |
| 出力 | 単独ロード可能な GGUF | アダプタ GGUF + 統合版フル GGUF |
| 必要容量 | dModel に比例(小型なら数MB) | rank × 対象行列数(軽量) |