- SFT・DPO/ORPO・RFTという3つの学習手法を、「モデルで選ぶ」のではなく「手元のデータがどんな形をしているか」で選ぶ考え方
- Managed Training の標準は LoRA であること(本ガイドも LoRA を前提に進める)。フルパラメータの扱いは公式ドキュメント内で記載が割れている点も押さえる
- LoRA rank・epoch・batch size など、まず既定値のまま使うべきハイパーパラメータの一覧
- 学習 GPU クォータの前提条件と、支払い方法未登録が学習ジョブを止める典型的な落とし穴
- 学習済み LoRA を配信する2つの方式(live merge / multi-LoRA)と、それぞれの向き不向き
これは何か
Fine-Tuning(ファインチューニング、以下「学習」)は、汎用のベースモデルに自分のデータを学習させて、フォーマット・トーン・ツールの使い方・エッジケースへの対応をプロンプト指示に頼らず身につけさせる機能だ。コンソールではapp.fireworks.ai/dashboard/fine-tuningから学習ジョブの作成・監視ができる。学習データセットは第10章で扱ったのと同じ Datasets 機能を使うので、データセットの作成・アップロード手順が曖昧なら先にそちらを確認してほしい。
学習には3つの「面」(surface)がある。Managed TrainingはFireworksがスケジューリング・学習・チェックポイント保存まで全部面倒を見る標準ジョブで、Fireworks UI・firectl(FireworksのCLI)・REST APIのどれからでも同じジョブを作れる。もう一段上に、学習ループそのものをPythonで自分で書くTraining APIがある。Serverless Training API(共有プールでLoRAのみ、トークン課金。2026-09時点でprivate preview、アクセス申請が必要)とDedicated Training API(専有GPUでLoRA+フルパラメータ、GPU時間課金)の2種類があり、これはPython SDK経由でしか触れない。Managed TrainingとTraining APIの両方を横断して触れるインターフェースは、コーディングエージェント向けの Agent Skill だけだ(UI・firectl・RESTはmanaged専用、Python SDKはTraining API専用)。本章は初心者が最初に触るManaged Trainingに絞り、Training APIは「こういう上級者向けの面がある」という位置づけだけ押さえる。
いつ使うのか
学習が効くのは、①プロンプトで頑張ってきた分類・抽出・書式遵守をモデル自体に覚えさせて品質を上げたいとき、②長いシステムプロンプトやfew-shot例を毎回送るコストをやめて小さく安いモデルに置き換えたいとき、③スタイル・親切さ・安全性のように「唯一の正解」が無い挙動を望ましい方向に寄せたいとき、④正解ラベルは無いが良し悪しは判定できるタスク(推論・エージェント系)でモデルを最先端より先に伸ばしたいとき、の4つだ。ただしどれも「まずプロンプト・few-shot・RAGで解けないかを試し、それでも足りない」場合の話であり、学習は最初の一手ではない。
どの手法を使うかは、次の節で説明する通り「手元のデータの形」で決まる。逆に「その手法の代わりに何を検討すべきか」も手法ごとに違うので、次節の表の「代わりに検討すべきとき」列を判断材料にしてほしい(多くは別の学習手法への切り替えだが、RFTの行のように「まずシンプルな手法をまだ試していない」に戻るものもある)。
| 隣接する選択肢 | 向くとき | 学習との使い分け |
|---|---|---|
| プロンプト調整 | 指示文だけで挙動を素早く試行錯誤したいとき | 複雑な書式遵守やスタイルの安定を指示文だけで維持するのは難しい。それでも品質が足りなければ学習を検討する |
| few-shot例 | 少数の例を示すだけで挙動を寄せたいとき | 例を毎リクエスト送る分レイテンシとコストが増える。学習は同じ効果を重みに焼き込み、コストを1回で済ませる |
| RAG | 最新情報や社内データを都度参照させたいとき | 参照する情報は増やせるが、トーンや書式のようなモデル自体の挙動は変わらない。挙動そのものを変えたいときは学習を検討する |
| 学習(Fine-Tuning) | 品質・コスト・挙動の一貫性を上げたい、または正解ラベルが無くても判定基準はあるとき | 上記3つで解決できない場合の選択肢。まず上の3つを試してから検討する |
手法を選ぶ — データの形で決める
Fireworksの学習ドキュメントが最初に置いている問いは「どのモデルを学習するか」ではなく「手元のデータはどんな形をしているか」だ。検証済みの正解ペアがあるならSFT、2つの応答のどちらが良いか比較できるならDPO/ORPO、正解は無いが良し悪しを判定できる評価器を用意できるならRFT、という順で決まる。この判断フローを先に固めてから、その手法に対応するベースモデルを選ぶのが正しい順序になる。
| 手法 | 渡すデータ | 目安のデータ規模 | Managed対応モデル数(2026-09時点) | 代わりに検討すべきとき |
|---|---|---|---|---|
| SFT | 検証済みの入出力ペア、または成功した実行トレース | 数百例、またはおよそ1,000万トークン以上 | 32 | 例が少ない、または高品質な検証済み出力が無いとき |
| DPO / ORPO | preferenceペア(1プロンプト+chosen/rejected、single-turnのみ) | 数百〜数千ペア | 32 | 出力を客観的に判定できる、または高品質な検証済み入出力ペアが既にあるとき(前者はRFT、後者はSFTを検討) |
| RFT | プロンプトのみ(正解completionは任意)+0〜1でスコアする評価器 | 数十〜数千プロンプト(100未満で足りることも多い) | 85 | 良し悪しを判定する手段が全く無い(LLM judgeも含む)とき。シンプルな手法をまだ試していない、または手早く学習実験をしたいだけのとき |
RFTの対応モデル数はSFT/DPOの倍以上ある(85対32/32、2026-09時点)。たとえばqwen3-4bはmanagedカタログ上RFTのみに対応し、SFT・DPOでは学習できない。こうしたRFT専用モデルが多数あるため、「このモデルを学習したい」から入ると行き止まりになりやすい。「このデータならこの手法」で入ると、対応モデルの探し方に迷わなくなる。DPOとORPOは同じpreferenceデータセットを共有できるが、DPOは参照モデルと比較する方式、ORPOは別の参照モデルを持たず教師あり目的とpreference目的を統合する方式だ。データセットのスキーマも手法ごとに別物で、SFTはmessages配列をトップレベルに置くのに対し、DPO/ORPOはinput(messagesを含む)・preferred_output・non_preferred_outputの3フィールド構成になる。SFTの学習データはOpenAI互換のchat completion形式なので、既存のOpenAI SFTデータセットは無変換でそのまま使える。
LoRAの仕組みとハイパーパラメータ
Managed Trainingの標準はLoRA(Low-Rank Adaptation)で、本ガイドもLoRAを前提に進める。ベースモデルの重みは完全に凍結したまま、そこに小さな「差分アダプタ」を追加で学習する方式だ。フルパラメータ学習(重み全体を更新する方式)については、firectlの--full-parameterフラグや料金表のFull Param列が存在する一方、概念ページ・UIはManaged TrainingをLoRA専用と記しており、公式ドキュメント内で記載が食い違っている。フルパラメータが必要な場合は、docsの最新を確認するか、上級者向けのTraining APIを検討するのが安全だ。
LoRA rankは、このA・Bがどれだけ多くの情報を捉えられるかを決めるパラメータで、2の冪乗で最大32まで設定できる(既定値は8、2026-09時点。Fireworksで学習する場合の値。外部で学習したLoRAをアップロードするときの許容範囲は別で、第9章を参照)。ハイパーパラメータは基本的にすべて任意設定で、まともな既定値が付いている。公式も「品質に効くepochsとlearning_rateは、まず既定のまま試し、結果が明確に必要性を示したときだけ変える」姿勢を推奨している。
| ハイパーパラメータ | 既定値 | firectlフラグ | 備考 |
|---|---|---|---|
| Epochs | 1 | --epochs | 非整数値もサポートされる(ガイド記載。CLIリファレンス上の型はint32なので、小数を使うならUI/API経由が確実)。学習データへの追従が甘ければ1〜2増やす |
| LoRA rank | 8 | --lora-rank | 2の冪乗で最大32(1, 2, 4, 8, 16, 32) |
| Batch size(samples) | SFT 32 / DPO・ORPO 4(UIの既定) | --batch-size-samples | 1回の重み更新(optimizer step)に使うサンプル数。max-context-length(1サンプルのトークン長の上限)とは独立。CLI/APIでは明示指定が要ることがある |
| Max context length | モデル依存(多くは32,768以上) | --max-context-length | 既定の扱いは公式docs内で記述が割れている(下記本文参照) |
| Learning rate | 選んだモデルに応じ自動設定 | --learning-rate | 公式は変更を推奨していない |
特にMax context lengthは見落としやすい。SFTガイドは学習例が既定で32,768トークンのところで打ち切られると明記している一方、firectlのコマンドリファレンスは未指定時に検証済みtraining shapeの最大コンテキスト長が既定になると書いており、記述が割れている(2026-09時点)。長い会話を含むデータセットを使うなら、いずれの解釈でも安全なように--max-context-lengthを明示するのが安全だ。
学習ジョブのライフサイクルと料金
Managed Trainingのジョブは、データセットのアップロードから始まり、学習完了後にLoRAアダプタ(チェックポイント。学習途中・完了時点の重みの保存物)を生成し、それを評価用の一時デプロイで試してから、問題なければ本番用のデプロイに昇格させる、という流れをたどる。
SFT・DPOの学習料金はトークン単価で決まり、ベースモデルの規模ごとに4段階に分かれている(2026-09時点)。
| ベースモデルの規模 | LoRA SFT($/1Mトークン) | LoRA DPO($/1Mトークン) |
|---|---|---|
| 16B以下 | $0.50 | $1.00 |
| 16.1B〜80B | $3.00 | $6.00 |
| 80B〜300B(例: Qwen3-235B、gpt-oss-120b) | $6.00 | $12.00 |
| 300B超(例: DeepSeek V3、Kimi K2) | $10.00 | $20.00 |
「学習トークン数」は「データセットのトークン数 × epoch数」が基本の見積もり方だが、そのまま鵜呑みにできない補正が2つある。ひとつは中間の思考トレース(reasoning_content)を含めて学習するとき、平均会話ターン数 ÷ 2を掛けて見積もる必要がある点。もうひとつは、モデルによっては1行の会話データが複数の学習datum(モデルに1件として渡される学習単位)に「unroll」され、その結果チューニング対象トークン数が生データセットのトークン数を上回りうる点だ。thinking-historyのモード(Interleaved/Preserved)がモデルごとに違い、ほとんどのモデルは既定がInterleavedでuser発話の境界ごとにunrollする。reasoning_contentを含むデータセットで学習コストを見積もるときは、この上振れを織り込んでおくとよい。
一方RFTはトークン課金ではなくGPU時間課金(秒単位)で、Fireworksのon-demandデプロイと同じ単価が適用される。2026-09時点の時間単価はH100/H200が$8.00、B200が$13.00、B300が$15.00、GB300が$20.00。ロールアウト(学習中にモデルが実際に生成してみる1回の試行)推論・学習時間・候補数・応答長によって総額が変わり、無料枠は前提にできない。
学習ジョブは学習GPUクォータを消費する。クォータは支払い実績のティアで自動付与され、支払い方法を登録していないアカウントはH100/H200/A100/B200/B300のすべてが0で、学習ジョブが一切走らない。有効な支払い方法と請求プロファイルを設定したTier 1でH200が16・H100/A100が8になり、Blackwell(B200/B300)は50USD相当の利用かクレジット追加でTier 2に上がるまで0のままだ。現行のmanaged training shapeの多くはBlackwell(B200/B300)上で動くため、実務上はTier 1では足りずTier 2が必要になることが多い。クォータはfirectl quota listで確認できる。ジョブがHTTP 429のquota_exceeded(ジョブポーリング時は403のこともある)で弾かれたら、それはデータセットや設定の誤りではなくティアの問題だと切り分けてよい。
RFTのループ — プロンプトと評価器から学ぶ
RFT(Reinforcement Fine-Tuning)はSFTと発想が逆だ。SFTは「良い出力の正解例」を渡すのに対し、RFTは「プロンプト」と、モデルの出力を0〜1でスコアする「評価器(evaluator、報酬関数)」を渡す。学習はそのスコアを最大化する方向に出力を反復改善していく。
「verifiable」(検証可能)とは、ルール・単体テスト・プログラム的チェックでモデル出力の良否を確実に判定できることを指す。RFTは正解ラベルを書きにくい推論・エージェント系のタスクに向いている。評価器は登録前に、満点・部分点・0点・不正形式出力・エッジケースをローカルで試し、小さなプローブでスコアが偏らない(non-flat)ことを確認しておくべきだ。RFTの細かい起動フラグ・既定値はドキュメント本文ではなくFireworksが提供するtraining skill(コーディングエージェント向け)に外出しされており、公式ドキュメント自体は経路選択とクイックスタートまでしか持たない。
学習済みモデルの配信 — on-demandデプロイのみ
学習が終わった後の配信先は一択だ。Fireworks製・外部インポート問わず、学習済みLoRAはon-demand(専有)デプロイにしか置けない。Serverless上での配信は提供されていない。評価用に使うpreemptibleデプロイ(idle状態の予約GPUを間借りする方式で、いつでも回収されうる)を本番トラフィックに使ってはいけないのは、これとは別の理由からだ。リクエストの途中でも予告なく回収されうるため、本番の可用性を保証できない。
本番配信の方式は2通りある。
| live merge | multi-LoRA | |
|---|---|---|
| 仕組み | LoRA重みをデプロイ時にベースモデルへマージし、1つの単体モデルとして配信 | アドオン対応のベースモデルをデプロイし、複数のLoRAアダプタを実行時に動的に読み込む |
| シェイプの制約 | 制約なし | BF16シェイプのみ。FP8/FP4の量子化シェイプは--enable-addons非対応で、多くのベースモデルは既定シェイプがFP8/FP4 |
| 推論性能 | ベースモデルと同等(オーバーヘッド無し) | TTFT(Time to First Token、最初のトークンが返るまでの時間)が+10〜30%程度になりがち。高並行下でスループット低下 |
| 向いている用途 | 最大性能が要る本番の単一モデル配信 | A/Bテスト・多数のバリアントを1つの共有GPUで試す実験 |
1つのモデルだけを配信するなら、公式もlive mergeを推奨している(この場合modelフィールドはモデル名をそのまま指定するだけでよい)。multi-LoRAデプロイ上の特定アダプタへルーティングするときは、modelフィールドに<モデル名>#<デプロイ名>形式で#区切りを指定する。以前使われていたdeployedModelリクエストキーは非推奨で、新規デプロイでは使えない。
ハンズオン
ハンズオン 11-1 SFTで最小のLoRAを学習して評価する
- ベースモデルが学習可能か確認する。
firectl model get -a fireworks llama-v3p1-8b-instruct
出力にTunable: trueがあればFireworks上で学習できる。ただしSFT/DPO/RFTのどれに対応するかはモデルごとに違うので、手法別の可否はModels カタログで確認する(Llama 3.1 8B InstructはSFT/DPO/RFTすべてに対応)。
- 最小のSFTデータセットをJSONLで用意する(最小3件から。以下は3件の例)。
{"messages": [{"role": "system", "content": "あなたはFireworksの使い方に詳しいアシスタントです。"}, {"role": "user", "content": "LoRA rankの既定値は?"}, {"role": "assistant", "content": "既定値は8です。2の冪乗で最大32まで設定できます。"}]}
{"messages": [{"role": "user", "content": "学習例のトークン長の上限はどう指定しますか?"}, {"role": "assistant", "content": "--max-context-lengthで明示します。既定の扱いは公式ドキュメント内で記述が割れているため、長いデータでは明示指定が安全です。"}]}
{"messages": [{"role": "user", "content": "学習済みLoRAはServerlessで配信できますか?"}, {"role": "assistant", "content": "できません。on-demandデプロイのみが対応しています。"}]}
- データセットを作成・アップロードする(1コマンドで両方行われる)。作成直後は
UPLOADINGなので、READYになったのを確認してから次へ進む。
firectl dataset create sa-support-qa ./sa-support-qa.jsonl
firectl dataset get sa-support-qa
学習ジョブを作る前に、支払い方法を登録済みか確認しておく。未登録だと学習GPUクォータが全ティア0で、次のジョブ作成がquota_exceeded(429、ジョブポーリング時は403)で弾かれる。今回使うllama-v3p1-8b-instructのtraining shapeは1×H200で、多くの他モデルのようにBlackwell(B200/B300)を要求しないため、条件を満たしたTier 1でも走る余地がある。ただし現行のmanaged training shapeの多くはBlackwell上で動くため、他のモデルではTier 2が必要になることが多い。今回のようなLlama 3.1 8B(16B以下ティア)のLoRA SFTは(2026-09時点)$0.50/1Mトークンで、このサンプルデータセットは数百トークン程度しかないため学習コストの目安は1セント未満だが、クォータの前提だけは別問題として満たしておく必要がある。
- SFTジョブを作成する。
firectl sftj create \
--base-model accounts/fireworks/models/llama-v3p1-8b-instruct \
--dataset sa-support-qa \
--output-model sa-support-lora
- 進捗を確認する。
STATEがJOB_STATE_COMPLETEDになれば完了。
firectl sftj get <job-id>
firectl model list
- 本番キャパシティを確保する前に、preemptibleデプロイ(idleGPUを間借りする評価専用デプロイ)で試す。
firectl versionで1.7.26以降であることを確認しておく。
学習に使ったtraining shape(例: llama-v3p1-8b-instruct-128k-lora)と、デプロイに使うdeployment shapeは別の名前空間なので、学習コマンドのシェイプ名をそのまま--deployment-shapeには渡せない。まず、このモデルに使えるdeployment shapeを確認する。
firectl deployment-shape-version list --base-model accounts/your-account/models/sa-support-lora
返ってきたシェイプ名を--deployment-shapeに渡してデプロイを作成する。候補が1件も返らなければ--deployment-shapeを省いて作成してよい(公式のlive merge例はシェイプ指定なしの1行のみ)。--preemptibleはそのまま付ける。
ここからGPUを間借りするデプロイを作る。preemptibleはidle容量を間借りするため専有容量を保持する料金はかからないが、古いfirectlで--preemptibleが無視されると、通常のon-demand(2026-09時点でH200は$8.00/時)として課金される。--preemptibleはfirectl 1.7.26以降でのみ有効。評価が終わったら必ず手順8で削除する(公式も"Clean up when done."と明記)。
firectl deployment create accounts/your-account/models/sa-support-lora \
--deployment-id sa-support-lora-eval \
--display-name sa-support-lora-eval \
--deployment-shape <DEPLOYMENT_SHAPE> \
--min-replica-count 1 \
--max-replica-count 1 \
--preemptible
preemptibleデプロイはいつでも回収されうるが、それは異常ではなく正常な結果として扱ってよい。
- デプロイ完了(
firectl deployment getでSTATEを確認)後、推論を試す。
curl https://api.fireworks.ai/inference/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $FIREWORKS_API_KEY" \
-d '{
"model": "accounts/your-account/models/sa-support-lora",
"messages": [{"role": "user", "content": "LoRA rankの既定値は?"}]
}'
応答が学習データの言い回しに寄っていれば成功。
- 評価が終わったら、間借りしているGPUを解放するため必ず削除する。
firectl deployment delete sa-support-lora-eval -a your-account
本番採用するなら、--preemptibleを付けずにfirectl deployment createを実行してon-demandデプロイへ昇格させる。不要なデータセットはfirectl dataset delete sa-support-qaで削除できる。
ハンズオン 11-2 RFTクイックスタートで評価器から学習を回す
学習ジョブを作る前に、支払い方法を登録済みか確認しておく。未登録だと学習GPUクォータが全ティア0で、次のジョブ作成がquota_exceeded(429、ジョブポーリング時は403)で弾かれる。ここで使うqwen3-4bのtraining shapeはB200(Blackwell)で、多くの他モデルと同じくBlackwellクォータが必要になるため、Tier 1では走らず、Blackwell枠が付くTier 2(50USD相当の利用かクレジット追加)まで上げておく必要がある。RFTはGPU時間課金(秒単位)で、on-demandデプロイと同じ単価が適用される(2026-09時点でH100/H200が$8.00/時、B200が$13.00/時)。このハンズオンで実際に効くのはB200の$13.00/時だ。ロールアウト推論・学習時間・候補数・応答長によって総額が変わり、無料枠は前提にできない。まずは小さく試すこと。qwen3-4bはmanagedカタログ上RFTのみに対応し、SFT/DPOでは学習できない。
- Python 3.10以上を用意し、公式のGSM8Kクイックスタートリポジトリを取得する。
git clone https://github.com/eval-protocol/quickstart-gsm8k.git
cd quickstart-gsm8k
pip install -r requirements.txt
- リポジトリ直下の
evaluation.pyとgsm8k_sample.jsonlを、epが探すgsm8k_artifacts/配下の決まったパスへ配置する(clone直後はこのフォルダ構成がまだ存在しない)。
mkdir -p gsm8k_artifacts/tests/pytest/gsm8k
mkdir -p gsm8k_artifacts/development
cp evaluation.py gsm8k_artifacts/tests/pytest/gsm8k/test_pytest_math_example.py
cp gsm8k_sample.jsonl gsm8k_artifacts/development/gsm8k_sample.jsonl
- 別ターミナルを開いて
quickstart-gsm8kディレクトリに移動し、ローカルサーバを起動しておく(ブラウザでhttp://localhost:8000を開いたままにする)。
cd quickstart-gsm8k
ep logs
- 元のターミナルで、評価器(数学の答えを採点するコード)をローカルでテストする。このコマンドはテストと同時に、評価器とデータセットをFireworksへ自動登録する。実行中はブラウザ側に採点スコアが表示される。
cd gsm8k_artifacts
ep local-test
- APIキーを設定し、RFTジョブを起動する。
export FIREWORKS_API_KEY="your-fireworks-key"
cd ..
eval-protocol create rft \
--base-model accounts/fireworks/models/qwen3-4b
CLIが出力するダッシュボードリンク(Evaluator / Dataset / RFT Job)から、学習の進み具合とロールアウトごとのスコアを確認できる。
- 学習ジョブ自体は完了すれば動き続けない。ただし評価のために別途デプロイを作った場合は、SFTのハンズオンと同じく評価が終わり次第削除する。
つまずきポイント
学習GPUクォータは支払いティアで自動付与される。支払い方法を登録していないアカウントは全GPU種別が0で、学習ジョブは作成した瞬間に失敗する。現行のmanaged training shapeの多くはBlackwell(B200/B300)上で動くため、支払い方法を登録したTier 1だけでは足りず、実務上はTier 2(50USD相当の利用かクレジット追加)が必要になることが多い。HTTP 429のquota_exceededやジョブポーリング時の403は、データセットや設定を疑う前にまずfirectl quota listでティアを確認する。
学習済みLoRAはon-demand(専有)デプロイでしか配信できず、Serverlessでの配信は提供されていない。評価用のpreemptibleデプロイは、リクエストの途中でも予告なく回収されうるため本番トラフィックを流す場所ではない(これは配信面の制約とは別の理由)。「学習したモデルを安く従量課金で使いたい」という期待はManaged Trainingの範囲では叶わない。
multi-LoRA(アドオン)はBF16シェイプでのみ有効で、FP8/FP4の量子化シェイプでは--enable-addons自体が使えない(エラー文字列: addons cannot be enabled with quantized precisions (FP8/FP4))。多くのベースモデルは既定シェイプがFP8/FP4なので、firectl deployment-shape-version list --base-model <MODEL_ID>でBF16シェイプを探してから--deployment-shapeに渡す必要がある。さらに、指定したシェイプがそのモデルの正確なバージョンに対して検証されていない場合、デプロイ作成はエラーを返さない。未検証シェイプは無言で落とされ、既定の配信イメージへ静かにフォールバックする。その結果、既定イメージのアドオンローダーがmulti-LoRAチェックポイントを拒否し、「ベースモデルの挙動しか返らない」「アドオンの読み込みが原因不明で失敗する」という症状になる。学習時に未検証シェイプを指定すると400エラーになるのとは対照的な挙動なので注意する。単一アダプタしか使わないなら、この経路を通らないlive mergeを選ぶ方が安全だ。
Tunable: falseでもSupports Lora: trueのモデルがある。これは「Fireworks上では学習できないが、他所で学習したLoRAをアップロードして推論には使える」という意味で、「LoRAに対応しているのに学習できない」という一見矛盾した状態が正常な場合がある。混同して学習ジョブを作ろうとすると失敗するので、学習前に必ずTunableのほうを確認する。
理解度チェック
Q1. SFT・DPO/ORPO・RFTのどれを使うかは、何を基準に決めますか。
手元のデータの形。検証済みの入出力ペアがあればSFT、2つの応答の優劣を比較できるpreferenceペアがあればDPO/ORPO、正解は無いが良し悪しを判定できる評価器を用意できるならRFT。モデルを先に決めるのではなく、この順で手法を選んでから対応モデルを引く。
Q2. Managed Trainingで使えるチューニング方式は何ですか。フルパラメータ学習をしたい場合はどうすればよいですか。
Managed Trainingの標準はLoRA(本ガイドもLoRAを前提に進める)。フルパラメータは--full-parameterフラグと専用料金が公式に存在するが、概念ページの記載と食い違いがあるため、必要な場合はdocsの最新を確認するか、上級者向けのTraining API(Python SDKで自分の学習ループを書く面)を検討する。
Q3. 学習済みLoRAはどこに配信できますか。Serverlessで配信できますか。
on-demand(専有)デプロイにのみ配信できる。Fireworks製・外部インポート問わず、顧客が学習したLoRAのServerlessでの配信は提供されていない。
Q4. 学習ジョブがHTTP 429のquota_exceededで失敗しました。まず何を疑うべきですか。
データセットや設定の誤りではなく、学習GPUクォータのティアを疑う。支払い方法未登録のアカウントは全ティアが0で、有効な支払い方法を登録したTier 1でH200が16・H100/A100が8になる。ただし現行のmanaged training shapeの多くはBlackwell(B200/B300)上で動くため、実務上はTier 2まで必要になることが多い。firectl quota listで確認できる。
Q5. multi-LoRAデプロイを作成するとき、指定したシェイプがそのモデルの正確なバージョンに対して未検証だった場合、何が起きますか。
デプロイ作成はエラーにならず、未検証シェイプが無言で落とされて既定の配信イメージへフォールバックする。既定イメージのアドオンローダーはmulti-LoRAチェックポイントを拒否するため、ベースモデルの挙動しか返らない、あるいはアドオンの読み込みが原因不明で失敗するという症状になる。学習時に未検証シェイプを指定すると400エラーになるのとは対照的。
まとめ
- 学習手法はモデルではなくデータの形で選ぶ。正解ペア→SFT、比較ペア→DPO/ORPO、判定基準のみ→RFT(managed対応はRFT 85・SFT/DPOそれぞれ32モデル)。
- Managed Trainingの標準はLoRA(本ガイドもLoRA前提)。フルパラメータの扱いは公式docs内で記載が食い違うため、必要ならdocs最新かTraining APIを確認する。
- ハイパーパラメータ(epoch・LoRA rank・batch size・context長・learning rate)はまず既定値のまま使う。
- 学習GPUクォータは支払いティア次第で、未登録アカウントは全ティア0。429/403は設定ではなくティアの問題として切り分ける。
- 学習済みLoRAの配信はon-demandのみ。live merge(単一モデル向け)とmulti-LoRA(複数バリアントの実験向け)を用途で使い分ける。
次章(第12章)では、この章で学習したモデルの出来をどう測るか、Evaluationsの仕組みを扱う。
参考リンク
- Training Overview
- Managed Training Overview
- Supervised Fine-Tuning - Text
- Preference Optimization with DPO or ORPO
- Reinforcement Fine-Tuning
- Single-Turn Training Quickstart(GSM8K)
- Deploying Trained Models
- Models(学習可能ベースモデルのカタログ)
- Fireworks AI Pricing
- LoRA: Low-Rank Adaptation of Large Language Models