Fireworks AI 入門 — 初心者のためのハンズオンガイド|2026-09 版
第 9 章

Deployments — 専用 GPU でモデルを動かす

Serverless では足りなくなったら。GPU 選び・オートスケール・リージョン

この章で分かること

これは何か

On-demand Deployments(専有デプロイ)とは、自分専用の GPU を確保してモデルを動かす仕組みである。第 5 章で扱った Serverless 推論が「他の利用者と GPU を共有するマルチテナント」だったのに対し、専有デプロイは文字どおり GPU を専有し、他の利用者の負荷に性能が左右されない。コンソールでは app.fireworks.ai/dashboard/deployments の Deployments 画面から一覧・作成・管理でき、一覧には GPU 種別・台数が表示される。詳細ページにはモデルヘッダー、Playground へのクイックアクション、Edit・Delete・Enable/Disable のボタンがあり、作成中のレプリカ(同じモデルを載せた GPU サーバの複製 1 台分。台数を増やすと同時に捌けるリクエストが増え、そのぶん課金も増える)は pending → downloading → initializing → ready の 4 段階でライブ表示される。

操作の主役はコンソールではなく firectl(Fireworks の CLI)である。最小のデプロイ作成は次の 1 行で済む。

# accounts/<ACCOUNT_ID>/deployments/<DEPLOYMENT_ID> が返る。クエリ時に必要なので控えておく
firectl deployment create accounts/fireworks/models/<MODEL_NAME> --wait

作成したデプロイへは、モデル ID の代わりにこの accounts/<ACCOUNT_ID>/deployments/<DEPLOYMENT_ID>という参照名を model フィールドに渡してクエリする。呼び出し方自体は第 2 章・第 5 章で使ってきた chat/completions と同じで、エンドポイントも Serverless と同じ https://api.fireworks.ai/inference/v1 である。違うのは「どの GPU で処理されるか」だけだと考えてよい。

いつ使うのか

Serverless は便利だが、次の 4 つのいずれかに当てはまったら専有デプロイへの切り替えを検討する。

対象モデルがServerlessに無い (カスタムモデルも含む) 学習済みLoRAを動かしたい (Serverlessは非対応) 性能要件が厳しい (レイテンシ/スループット保証) リージョンを指定したい (作成時のみ設定可) 専有デプロイへ (On-demand Deployments) いずれか1つでも 当てはまれば移行 該当すれば 該当すれば 該当すれば 該当すれば
図 9-1 4 つの条件はどれか 1 つでも当てはまれば専有デプロイへの移行理由になる。すべて満たす必要はない。

逆に言えば、この 4 条件のどれにも当てはまらないうちは Serverless のままで十分なことが多い。両者の違いを表にまとめる。

観点ServerlessOn-demand Deployments
GPU共有(マルチテナント)専有
対応モデルServerless タグ付きのみOn-demand に対応するモデル + カスタムアップロード
学習済み LoRA不可可(専有デプロイが必須)
レート制限TPM(1 分あたりトークン数)3 本立て・アダプティブデプロイ固有の制限は無し(GPU クォータで管理)
課金トークン従量課金GPU 秒課金(レプリカ数に比例)

ここで「専有デプロイにはレート制限が無い」と早合点しないでほしい。アカウント全体に固定でかかる 6,000 RPM の上限は、デプロイ形態を問わず適用される。詳しくは後述の「レート制限と LoRA」節で扱う。

GPU の選び方とデプロイメントシェイプ

専有デプロイの GPU は --accelerator-type で指定する(NVIDIA_A100_80GB / NVIDIA_H100_80GB / NVIDIA_H200_141GB)。小型の A100 は単価が安く低ボリューム用途向き、H100 は高スループット向き、H200 は DeepSeek V3・DeepSeek R1 のような大型モデル(公式が案内する最小構成は 8 × H200)向き、という棲み分けが公式ドキュメントに明記されている。これに加えて B200 180GB が一部リージョンで提供されており、GPU クォータも既定で 8 枚割り当てられる。

GPU の時間単価は docs.fireworks.ai 上には掲載がなく、公式 pricing ページ(fireworks.ai/pricing)が正本になる。2026-09 時点の 1 時間あたり単価は次のとおり。

GPU2026-09 時点の時間単価
NVIDIA H100 80GB$8.00 / 時間
NVIDIA H200 141GB$8.00 / 時間
NVIDIA B200 180GB$13.00 / 時間

A100 は 2026-09 時点の公式 pricing ページの表に掲載が無いため、単価はここに書けない。

課金は GPU 秒単位(GPU-second)で、サーバがリクエストを受け付け始めた時点から始まり、API 呼び出しが 0 回でもレプリカが立っていれば課金され続ける。レプリカを 1 台から 2 台に増やせば GPU コストは単純に 2 倍、1 レプリカあたり 2 GPU を使う構成なら 1→2 レプリカで 4 GPU 分の課金になる、というようにレプリカ数 × レプリカあたり GPU 数にそのまま比例する。デフォルトの GPU クォータ(quota。アカウントごとに確保できる GPU 枚数の上限)は A100・H100・H200・B200 いずれも 8 枚(LoRA は 100 個)なので、8 × H200 が最小構成のモデルはデフォルトのクォータでちょうど 1 レプリカ分しか確保できない計算になる。

個別に --accelerator-type や精度を指定する代わりに、公式が「設定の primary な手段」と位置づけているのがデプロイメントシェイプ(deployment shape)である。ハードウェア・量子化・その他のチューニングをまとめたテンプレートで、3 種類ある。

# ショートハンドで指定
firectl deployment create accounts/fireworks/models/deepseek-v3 --deployment-shape throughput

# フル ID で指定
firectl deployment create accounts/fireworks/models/llama-v3p3-70b-instruct \
  --deployment-shape accounts/fireworks/deploymentShapes/llama-v3p3-70b-instruct-fast

状態遷移とオートスケール

デプロイメントの状態(state)は Gateway API 上、次の 6 つで定義されている。CREATING(作成中)→ READY(利用可能)→ UPDATING(設定変更の反映中、完了すると READY に戻る)という流れが基本で、削除時は READY → DELETING(削除中)→ DELETED(ソフト削除済み)と進む。作成に失敗すると FAILED になる。

ここで注意したいのが、コンソールに表示される「Inactive」「Scaled to 0」というラベルである。これらはバックエンドの state の列挙値ではなく、state == READY であることを前提に、レプリカ数のフィールドから UI が計算して出す表示ラベルにすぎない。API 上の state は両方とも READY のままなので、監視スクリプトを書くときは state ではなくレプリカ数(desired_replica_count / ready_replica_count)を見る必要がある。

CREATING 作成中 READY 利用可能 DELETING 削除中 DELETED ソフト削除済み UPDATING 設定反映中 FAILED 作成失敗 Inactive(UI表示) max_replica_count=0 かつready=0 Scaled to 0(UI表示) min=0・max>0・desired=0 かつready=0 起動完了 delete実行 削除完了 設定変更 反映完了 作成失敗 レプリカ0件で計算 desired=0で計算
図 9-2 バックエンドの state は 6 種類のみ。「Inactive」「Scaled to 0」は state = READY のレプリカ数からコンソールが計算して出す表示ラベルで、新しい state の列挙値ではない。

オートスケールは firectl deployment create(または update)のフラグで設定する。無トラフィックが一定時間続いたときにレプリカ数を 0 まで落として GPU 課金を止める仕組みをゼロスケール(scale-to-zero)と呼ぶ。既定値は次のとおりで、特に --max-replica-count の既定は 1 であることに注意したい。何も指定しないと、負荷が上がってもレプリカは水平にスケールしない。

フラグ型既定値意味
--min-replica-count整数0最小レプリカ数。0 でゼロスケール有効
--max-replica-count整数1最大レプリカ数
--scale-up-window期間30sスケールアップ判断までの待ち時間
--scale-down-window期間10mスケールダウン判断までの待ち時間
--scale-to-zero-window期間1hゼロスケールまでのアイドル時間(最小 5m)
--load-targetsKey-Valuedefault=0.8スケーリングのしきい値
オートスケールの時間軸(1 サイクルの代表例) replica: 0 replica: 0→1 replica: 1→3 replica: 3→1 replica: 1→0 ①リクエスト到着 ②トラフィック停止 アイドル 即時503→起動 コールドスタート scale-up-window 既定30秒 稼働(処理中) scale-down-window 既定10分 scale-to-zero-window 既定1時間・最小5分
図 9-3 bg-brand の帯が実際に処理している区間、bg-muted の帯が待ちや無トラフィックの区間。scale-to-zero-window を過ぎると次のリクエストは即 503 を受け取り、キューはされない。横軸は実尺ではない。停止後にどちらの窓がいつ切れるかの起点関係は docs に明記が無いため、図は代表的な 1 サイクルの順序だけを示す。

ゼロスケール中に届いたリクエストは、キューされずに即座に 503 エラー(エラーコード DEPLOYMENT_SCALING_UP)で返り、その裏でスケールアップが始まる。アプリ側は指数バックオフでリトライする実装が必須になる。さらに、--min-replica-count 0 のデプロイメントは、無トラフィックが 7 日間続くと自動的に削除される点も覚えておきたい。

リージョンの選び方

リージョンは --region で指定し、GLOBAL・US・EUROPE・APAC という 4 つのマルチリージョンから選ぶのが基本である。マルチリージョンは複数のシングルリージョン(データセンター)をまとめた高レベルのグルーピングで、Fireworks がその中でレプリカを必要に応じて動かし、弾力的なスケーリングと局所障害への耐性を提供する。シングルリージョンは全部で 19 拠点あり、米国 14・欧州 3・APAC 2 という内訳である。

マルチリージョン: GLOBAL(推奨) US 14シングルリージョン EUROPE 3シングルリージョン APAC(2リージョンのみ) AP_TOKYO_1 (H100) AP_TOKYO_2 (H200) クライアント(日本) 地理的に近い
図 9-4 GLOBAL は US・EUROPE・APAC を包含する最も広いマルチリージョン。日本から地理的に近い APAC は東京の 2 拠点(H100 / H200)のみで、B200 は無い。

ここに 執筆時点で最大級の落とし穴がある。--region は作成時にしか設定できず、後から変更できない。省略すると単一データセンターに固定され、後から自動的に広げられることもない。本番用途では必ず明示的に --region GLOBAL を付けるべきだと公式が Warning として案内している(日本から近づけたいだけなら --region APAC でもよい)。配置を変えたくなったら、新しいリージョンでデプロイを作り直し、切り替えてから旧デプロイを削除する以外に手段は無い。

新規ユーザーに自動付与されるクォータは GLOBAL マルチリージョン分のみで、特定のシングルリージョン(例えば東京固定)を使いたい場合は Fireworks への問い合わせが必要になる。データレジデンシー要件がある案件では、この申請が前提作業になる点も覚えておきたい。なお公式 pricing ページには、リージョンを限定したデプロイは 1.5 倍のプレミアム価格になる旨の但し書きがある(2026-09 時点)。どこまでを「限定」と数えるか(シングルリージョン固定のみか、US / APAC の指定を含むか)は但し書きからは読み取れないため、リージョンを絞る前に見積もりを確認するのが安全である。

本番運用が視野に入ったら、名前だけでも知っておきたい機能が 2 つある。Router(firectl router create で作る、複数デプロイメント間でトラフィックを分割する仕組み。A/B テストや無停止でのモデル入れ替えに使うが、マルチリージョンのデプロイメントでしか使えないという制約がある)と、Reserved capacity(予約容量。Enterprise アカウント向けに 1 年契約が典型で、容量保証・クォータ引き上げ・GPU 時間単価の値引きが得られるが、購入には Fireworks のアカウントマネージャーへの連絡が要る)である。どちらも本章では深入りしないが、「そういう選択肢がある」ことだけ覚えておき、必要になったら公式ドキュメントを参照してほしい。

速く安くする 2 つのつまみと、レート制限・LoRA の扱い

量子化と speculative decoding

専有デプロイには、性能とコストを調整する 2 つの独立したつまみがある。

量子化(quantization)は、モデルを扱うビット数を減らして推論を速くし、コストを 30〜50% 削減する仕組みである。ただし数値表現(numerics)が変わるため、出力にわずかな違いが出ることがある。firectl prepare-model で FP8 への変換を実行でき、これは加算的な処理なので元の FP16 チェックポイントは残ったまま、FP8 の構成を追加で選べるようになる。

# FP8への変換をリクエスト
firectl prepare-model <MODEL_ID>

# 準備ができたらFP8でデプロイ(量子化デプロイメントはH100専用)
firectl deployment create <MODEL> --accelerator-type NVIDIA_H100_80GB --precision FP8

ここで必ず押さえておきたい制約がある。量子化したデプロイメントは H100 でしか動かない。H200 や B200 で FP8 を使いたくなっても、docs 上ではその構成は案内されていない。何も指定しなければ既定の FP16 のまま動く。

Speculative decoding(投機的デコーディング)は、複数トークンをドラフトモデルに提案させ、本体(target model)が並列に検証することで生成レイテンシを縮める手法である。target model が最終的に全トークンを検証するため、出力品質そのものは劣化しない。多くの対応モデルにはデフォルトのドラフタと draft token 数がすでに設定されており、何も付けずにデプロイすれば既定のドラフタをそのまま継承する。公式は「まずデフォルトのままデプロイし、ベンチマークしてから変更を検討する」ことを推奨している。独自のドラフトモデルを使いたいときは --draft-model="accounts/fireworks/models/<DRAFT_MODEL_ID>" と --draft-token-count を指定する。

--draft-token-count の推奨開始値は 4 で、そこからベンチマークして近傍の値を試す。ドラフトモデルの相性が悪いと、かえって生成が遅くなることもあるため、「デフォルト」「候補のドラフタ」「--disable-speculative-decoding で無効化した状態」の 3 構成を同じ target モデル・同じシェイプで比較するのが公式の推奨手順である。量子化と speculative decoding は独立した設定なので、併用も可能である。

レート制限と LoRA の扱い

専有デプロイには、Serverless のような TPM ベースのアダプティブなレート制限は存在しない。GPU が飽和していない限り、確保したキャパシティの範囲でリクエストを処理できる。ただし「専有デプロイなら無制限」ではない点に注意が必要である。アカウント全体には固定で 6,000 RPM(1 分あたりリクエスト数、2026-09 時点)の上限があり、これは Serverless 専用の制限ではなく、専有デプロイを含むどのデプロイ形態でも免れられない。専有デプロイで 429 を受け取った場合、その多くは TPM 上限ではなくデプロイメントの飽和(GPU がビジー)を意味し、対処はスケールアウトやレプリカ増設になる。

もう 1 つの重要な事実が LoRA(Low-Rank Adaptation、少ないパラメータでモデルを微調整する手法)の扱いである。学習済みの LoRA アダプタを推論に使えるのは専有デプロイのみで、Serverless 推論では提供されない。アップロードした LoRA アダプタも、Fireworks の Managed Training で学習した LoRA も同様である。コンソールの Deployments 画面には LoRA を確認するための「LoRA Addons」タブがあり、LoRA アダプタの rank(r)は 4〜64 の整数、既定の on-demand クォータは 100 個までとなっている。学習方法そのものの詳細は第 11 章で扱う。

ハンズオン 9-1 小さいモデルを 1 GPU でデプロイして、クエリして、削除する

  1. ターミナルで API キーを環境変数にセットする(export FIREWORKS_API_KEY=...)。firectl はサインイン済みである前提とする(インストールと認証は第 14 章)。

このハンズオンは実際に GPU を確保するため、GPU 秒課金が発生する。H100 の時間単価は 2026-09 時点で $8.00 / 時間。作成から動作確認、削除までを数分で終えれば費用は $1 未満で収まるが、確保したまま放置すると時間単位で加算され続ける。手順の最後にある削除コマンドを必ず実行すること。

  1. 次のコマンドで、小型モデル qwen3-0p6b を H100 1 枚に GLOBAL リージョンでデプロイする。--wait によりコマンドはデプロイが READY になるまでブロックする(既定タイムアウトは 1 時間)。
firectl deployment create accounts/fireworks/models/qwen3-0p6b \
  --accelerator-type NVIDIA_H100_80GB \
  --region GLOBAL \
  --wait

実行結果として accounts/<ACCOUNT_ID>/deployments/<DEPLOYMENT_ID> という参照名が返る。これを控えておく。

  1. この参照名を model に指定してクエリする。
curl https://api.fireworks.ai/inference/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $FIREWORKS_API_KEY" \
  -d '{
    "model": "accounts/<ACCOUNT_ID>/deployments/<DEPLOYMENT_ID>",
    "messages": [{"role": "user", "content": "専有デプロイの利点を50字で説明して"}]
  }'

choices[0].message.content に応答が入っていれば成功。Serverless のときと同じ形の chat/completions リクエストで、専有 GPU 上のモデルに届いていることを確認できる。

  1. 確認できたら、必ずデプロイメントを削除する。
firectl deployment delete <DEPLOYMENT_ID>

ハンズオン 9-2 scale-to-zero を設定して、レプリカ数の挙動を確認する

  1. firectl がサインイン済みである前提は 9-1 と同じ(インストールと認証は第 14 章)。

こちらも GPU 秒課金が発生する操作である。H100 の時間単価は 2026-09 時点で $8.00 / 時間。ゼロスケールの確認には無トラフィックで 5 分以上待つ手順が入るため、作成から削除までの合計はおよそ 10 分前後になり、費用はおおむね $1 台で収まる。それでも確保したまま放置すると加算され続けるため、手順の最後にある削除コマンドを必ず実行すること。

  1. 最小レプリカ数を 0、最大を 3 にし、無トラフィックが 5 分(--scale-to-zero-window に指定できる最小値)続いたらゼロスケールする設定でデプロイを作る。
firectl deployment create accounts/fireworks/models/qwen3-0p6b \
  --accelerator-type NVIDIA_H100_80GB \
  --region GLOBAL \
  --min-replica-count 0 \
  --max-replica-count 3 \
  --scale-to-zero-window 5m \
  --wait
  1. デプロイの詳細を確認する。
firectl deployment get <DEPLOYMENT_ID>

作成直後(--wait が完了した直後)は、--wait の間に起動したレプリカが 1 台稼働しているため ready_replica_count は 1 になっているはずである(もし作成直後から 0 なら、すでにゼロスケール済みなので手順 4 はそのまま次の観測になる)。

  1. 無トラフィックのまま 5 分以上待ってから、同じコマンドをもう一度実行する。
firectl deployment get <DEPLOYMENT_ID>

state は READY のままで、desired_replica_count / ready_replica_count が 0 になっているはずである(フィールド名は出力の表記に読み替える。レプリカ数を示す行を見ればよい)。コンソールの一覧では、これが「Scaled to 0」というラベルとして表示される。API 上の state を見て「壊れている」と誤解しないこと。

  1. 確認できたら、必ずデプロイメントを削除する。
firectl deployment delete <DEPLOYMENT_ID>

つまずきポイント

--region は作成時にしか決められない。 省略すると単一データセンターに固定され、後から自動で広がることもない。本番用途では作成時に必ず --region GLOBAL(またはニーズに合う明示的なリージョン)を指定する。変更したくなったら、新しいリージョンでデプロイを作り直し、アプリの向き先を切り替えてから旧デプロイを削除するしかない。

--preemptible は古い firectl だとエラーも出さずに無視される。 このフラグが効くのは firectl 1.7.26 以降で、それより古いバージョンでは黙って通常の on-demand デプロイとして作成され、そのまま通常料金で課金される。firectl version でバージョンを確認してから使う。preemptible は評価・バッチ専用で、いつでも横取り(preempt)されうるため本番トラフィックには絶対に向けない。

ゼロスケール中のリクエストはキューされず、即座に 503 になる。 DEPLOYMENT_SCALING_UP というエラーコードでスケールアップの開始を知らせるだけで、リクエストを待たせてはくれない。指数バックオフでリトライするロジックをアプリ側に実装しておかないと、単なる失敗として扱われてしまう。

量子化デプロイメントは H100 専用。 FP8 に変換したモデルは H100 上でしか動かせない。H200 や B200 で高スループットを狙いつつ FP8 も使う、という組み合わせは docs 上では案内されていないので、その前提で設計しない。

理解度チェック

Q1. コンソールで「Scaled to 0」と表示されているデプロイメントの、API 上の state は何ですか?

READY。「Inactive」「Scaled to 0」はバックエンドの state 列挙値ではなく、state == READY であることを前提にレプリカ数のフィールドから UI が計算して表示するラベルにすぎない。監視は state ではなくレプリカ数を見る。

Q2. --region を指定せずにデプロイメントを作成すると何が起きますか?

単一のデータセンターに固定され、後から自動的に他リージョンへ広がることはない。しかも --region は作成時にしか設定できないため、変更したい場合は新しいリージョンでデプロイを作り直して切り替え、旧デプロイを削除するしかない。

Q3. 専有デプロイで 429 エラーを受け取ったとき、まず疑うべき原因は何ですか?

TPM のようなアダプティブなレート制限の超過ではなく、デプロイメントの飽和(GPU がビジーな状態)である可能性が高い。専有デプロイに固有のレート制限は無いが、アカウント全体で固定 6,000 RPM の上限はどのデプロイ形態でも別途かかる。

Q4. 学習済みの LoRA アダプタを推論に使いたい場合、Serverless と専有デプロイのどちらを使う必要がありますか?

専有デプロイが必須。学習済み LoRA アダプタの推論は Serverless では提供されておらず、アップロードした LoRA も Managed Training で学習した LoRA も、専有デプロイ上でしか動かせない。

Q5. 量子化(FP8 への変換)は元の FP16 チェックポイントにどう影響しますか?

元の FP16 チェックポイントはそのまま残る。量子化は加算的(additive)な処理で、FP8 という追加の構成を選べるようになるだけであり、破壊的な変換ではない。デプロイ時に --precision を指定しなければ既定の FP16 のまま動く。

まとめ

次章では、この専有デプロイの土台となる学習データ — Datasets の管理と JSONL 形式の作法を見ていく。

参考リンク