コンテンツにスキップ

ファインチューニングと事後学習

データの整理はここで、学習は別の機械で、成果はまたここへ。この機械は学習しません。


DuDuClaw の当番機は内蔵グラフィックスだけのミニ PC——Intel N305 か AMD 8845HS です。言語モデルの学習はできませんし、待っても変わりません。LLaMA-Factory も Unsloth も Axolotl も CUDA / ROCm を前提としていますし、llama.cpp 自身の finetune 経路は何年も保守されていません。「あなたの当番機でファインチューニング」と書いている製品は、別の何かを売っているか、嘘をついているかのどちらかです。

だからこの機能は、この機械が本当に得意なことに合わせて設計されています。ローカルストレージには数か月分の会話、仕事の成果、承認判断が積み上がっていて、それを持っている場所は世界にここしかありません。それを学習用コーパスに変えることが、価値のある側の半分です。GPU は借りるか、机の下にもう置いてあるかのどちらかです。

三つの段階、三つのタブ:

この機械 自分で用意する GPU この機械
+------------------+ +----------------------+ +------------------+
| 1. 整理 | | 2. 学習 | | 3. 配備 |
| | ---> | | ---> | |
| 会話履歴 | | 自分の GPU 機 | | GGUF / LoRA を |
| 仕事の成果 | | (SSH + LLaMA- | | ローカルモデル |
| 承認判断 | | Factory) | | ディレクトリへ |
| | | | またはクラウド | | |
| v | | | | |
| SFT + DPO JSONL | | またはドライラン: | | |
+------------------+ | 一切学習しない | +------------------+
+----------------------+

管理 → ファインチューニング → データセットを開き、名前を付け、形式を選んで構築を押します。四つの材料が入りますが、いずれもゲートウェイが元から保持しているものです。

材料 変換先 学習行として良い理由
AI スタッフの会話 複数ターンの SFT 行 実際の答え方と、あなたたちの語彙
完了した仕事の成果 単一ターンの SFT 行 依頼と完成物の対
レビューの裁定 DPO 選好ペア 同じ仕事の、差し戻された回と受理された回
承認判断 DPO 選好ペア 同種の行動で、通したものと止めたもの

出力形式は二つ。どちらも LLaMA-Factory がそのまま読める書き方で、ファイルを登録する dataset_info.json も一緒に書き出すので、遠隔側で変換し直す必要はありません。

  • ShareGPT:複数ターンの会話学習向け。
  • Alpaca:単一ターンの指示学習向け。

役に立たない行は水増しせずに落とします。答えのない会話、成果のない仕事、まだ決まっていない承認は行になりません。表示される件数は実際にファイルに入った数です。新品の機械は正直に 0 行のデータセットを作ります。

構築は特定の AI スタッフと開始日で絞れますし、送る前に先頭数行を JSON で確認でき、ファイルの場所を書き出すこともできます。


管理 → ファインチューニング → 学習ジョブ。データセットを選び、GPU の場所を選びます。

設定をすべて検証し、本番と同じ train.yaml と、実行コマンドを明記した plan.json を書き出して止まります。何も送らず、何も学習せず、状態は「計画済み(未学習)」のまま。勝手に「完了」へ動くことはありません。GPU の費用を使う前にパラメータを確かめる、正直なやり方です。

自分の機械へ SSH でつなぎ、rsync でデータセットを送り、そこで llamafactory-cli train train.yaml を走らせます。LoRA の SFT または DPO で、rank・エポック数・学習率はあなたが決めます。学習が終わると adapter を回収し、その機械に llama.cpp の convert_lora_to_gguf.py があれば GGUF も変換して持ち帰ります。

準備は十分ほどです。遠隔 GPU 機の準備を参照してください。

Together AI のファインチューニングサービスにデータセットを送り、ジョブ ID で追跡します。送信前に Together 自身の JSONL 形式へ変換し(彼らの SFT / DPO 形式は LLaMA-Factory と異なります)、変換後のファイルはジョブの隣に残すので「結局何で学習したのか」に後から答えられます。ゲートウェイの環境変数に TOGETHER_API_KEY が必要です。

このページに進捗バーはありません。意図的です。ジョブが見せるのは状態と、本物の学習ログの末尾そのままです。

  • 自分の GPU 機:遠隔のプロセスが生きているか、adapter ファイルが出来ているかで判断します。一時的につながらないときはそう表示し、状態は保ちます——切断は学習の失敗ではありません。
  • Together:先方の状態欄を一対一で対応させます。残り秒数の見積もりが提示されたときはそのまま伝えます。
  • ドライラン:計画済みのまま動きません。

管理 → ファインチューニング → 取り込み.gguf / .safetensors / .bin を指定します。ローカルのパス(完了したジョブのカードから成果物をワンクリックで入れられます)でも https:// の URL でも構いません。ファイルはローカルモデルマーケットが走査するのと同じモデルディレクトリに置かれるので、あなたのファインチューニング結果が他のモデルと並んで一覧に現れます。二つ目の登録簿はありません。ファイルそのものが登録簿です。


データが機械を出るときの関門

Section titled “データが機械を出るときの関門”

段階 1 はすべてこの機械の中で完結します。段階 2 と 3 はそうではないので、整理済みデータを外へ送る二つの操作——データセットの書き出しと、dry_run 以外のバックエンドでのジョブ作成——は、**「このデータがこの機械から出ることを理解しました」**にチェックするまで拒否されます。

関門は失敗時に閉じます。チェックがなければ拒否であって既定の同意ではなく、見知らぬバックエンドは遠隔とみなします。拒否は構造化された応答で、画面はそれをエラーではなく確認の一手順に変えます。つまりそのチェックボックスは、警告を目の前にして、その操作ごとに一度下す判断です。


  • ローカル学習は一切しません。 遅い学習でも、質を落とした学習でもありません。当番機は整理と保管を担います。
  • データの判断は依然としてあなたのものです。 データセット構築は伏せ字処理をしません。会話に顧客の詳細が含まれていれば、それは JSONL にも入ります。書き出しの関門がある理由がまさにこれです。
  • 承認由来の選好ペアはレビュー裁定より弱い信号です。同じ問いへの二つの答えではなく、同種の行動が別々に判断されたものだからです。各行に由来を記録しているので絞り込めます。
  • 対話テンプレートは重要です。 template を間違えると流暢な出鱈目を学習するので、この欄は推測ではなく明示です。

私的なファインチューニングで足りないのは GPU 時間ではなく、あなたの事業がどう答えるかを映したコーパスです。そしてそれは、すでにこの機械の中にあります。この機能はそれを学習データに変え、本当に学習できるハードウェアへ送り、成果を持ち帰ります——そしてどの段階でも、計算がどこで起きていて、あなたのデータがどこへ行ったのかを、はっきり述べます。