vast.ai で RTX 5090 を借りて ローカル LLM を動かす|2026-08 版
第 6 章

On-demand・Interruptible・Reserved の選び方

中断される契約と、されない契約。値段差は 1〜2 割しかない

この章で分かること

3 つの契約を分けているのは優先度

vast.ai は世界中のホスト(= GPU を貸し出す個人やデータセンター)から直接借りる市場です。1 台のマシンに借り手が複数集まったとき、誰を動かして誰を待たせるかを決める規則が要ります。その順番の規則が、そのまま契約の種類になっています。値段の差は順番の結果であって、原因ではありません。

公式が定めている優先度は 3 段です。

  1. On-demand と Reserved — 高優先度。中断されない
  2. Interruptible で高い入札 — 資源が空いているときに動く
  3. Interruptible で低い入札 — より高い入札が終わるまで一時停止

用語を 1 文ずつ定義します。On-demand(= 固定価格で借りる、中断されない契約)。Interruptible(= 入札で借りる契約。自分より高い入札や on-demand の要求が入ると止められる)。Reserved(= 前払いして割引を受ける契約。中断はされない)。作成画面で選べるのは前の 2 つだけで、Reserved は借りたあとに変換して作ります。

項目On-demandInterruptibleReserved
優先度高低高(on-demand と同じ)
価格の決まり方ホストが設定した固定価格自分が入札額を決める。最安前払いによる割引価格
中断されないoutbid されると停止されない
停止中のデータ残る残る(インスタンスは機能しない)残る
作成画面で選べるか選べる選べる選べない(あとから変換)
公式が挙げる用途本番推論・時間制約のある作業バッチ処理・開発とテスト長期プロジェクト・予測可能な負荷

「中断されない」には境界が 1 つあります。offer カードの Max Duration(= このマシンで結べる契約の最大期間。第 5 章)です。借りた時点の offer の終了日がそのまま自分のレンタル終了日になり、その日付は借りた瞬間に固定されます。満了するとインスタンスは停止し、公式は「期限切れのインスタンスは期限切れの 48 時間後に削除されることがある。期限切れの状態では再起動できない」と警告しています。On-demand が守るのは「他人に押しのけられないこと」までです。

On-demand 中断されない契約 1 時間 0.40 USD が連続して積み上がる 他者の入札が自分を上回る on-demand の要求が入る Interruptible 入札で順位が決まる 稼働 停止 稼働 停止 稼働 プロセスは kill / データは残る 優先度が戻れば自動再開 時間
図 6-1 帯の中の 0.40 USD/時 は 2026-08-24 時点の 1×RTX 5090 の中央値です。破線の区間では GPU 課金は止まりますが、確保したディスクの課金は止まりません(第 16 章)。停止区間の長さは自分では決められず、他の借り手の入札次第です。

Interruptible は入札で順位が決まる

Interruptible では価格を自分で宣言します。これが入札額(bid price)(= 1 時間あたりこれだけ払う、と自分で決める額)で、高く入札した人ほど優先度が上がります。offer 側には min_bid(= その offer に入札できる下限額。単位は USD/時)が付いていて、これより低い額では入札できません。

検索するときに種別を bid にすると、表示価格が最低入札額ベースの値に切り替わります。CLI(= ターミナルから打つコマンド)なら -b がその指定で、-d(on-demand)-r(reserved)と切り替えられます。

vastai search offers -b 'gpu_name=RTX_5090 num_gpus=1 rentable=true'

CLI では GPU 名のスペースをアンダースコアに置き換えて RTX_5090 と書きます。REST API(= プログラムから vast.ai を操作するための窓口)に同じ条件を渡すときは、スペース区切りの RTX 5090 で一致しました(2026-08-24 実測)。公式ドキュメントの中でも両方の書き方が混在しているので、検索結果が 0 件で返ってきたら、まずこの綴りを疑ってください。

借りるときは、インスタンス作成時に入札額を渡します。入札額を渡さなければ on-demand として作られます(REST API の price フィールド、CLI の --bid_price)。うっかり Interruptible になることはありません。稼働中に入札額を上げ直すこともできます。

vastai show instances
vastai change bid <インスタンス ID> --price 0.36

<インスタンス ID> には 1 行目の vastai show instances で出てくる自分のインスタンスの番号を入れます。--price の単位は USD/時 で、ここに書いた額が新しい 1 時間単価になります(0.36 なら 0.36 USD/時)。省略すると「勝てる入札額」が自動で使われます。指定できる範囲は 0.001〜32 USD/時で、下限を割ると 400 と Please set a bid price >= 0.001. が返ります。

負けたときに何が起きるかが、この契約の本質です。公式 FAQ の回答は明快で、「インスタンスは停止される(動いているプロセスは kill される)」です。ディスク上のデータは保持されますが、インスタンスは機能しません。優先度が戻れば自動的に再開しますが、再開まで長く待つことがあります。公式が挙げる備えは「頻繁にディスクへ保存」「重要な出力はクラウドストレージへ」「長時間ジョブにはチェックポイント(= 途中経過をファイルに書き出しておき、そこから再開できるようにする作り)を実装」の 3 つ。中断は通知で拾えます(通知種別 client:outbid、表示名は「Instance outbid」。Webhook = 自分のサーバーへ自動で飛ばす通知でも受け取れます)。

中断が頻発するときの公式の対処は 3 つです。① 入札額を上げる ② 需要の低いマシンを選ぶ ③ 重要な処理は on-demand にする(作成時に入札額を渡さない)。AWS の Spot や GCE の preemptible(= どちらも大手クラウドの「安いかわりに中断される」枠)と違い、vast.ai は自分で入札額を決める直接入札です。GCE の preemptible にある「24 時間で必ず止まる」上限のような制限もありません。outbid されなければ無期限に動き続けられます。

USD/時 0.40 0.35 0.25 0.20 on-demand 0.40 USD/時(固定価格) 他者の入札 0.35 自分の入札 0.25 GPU の枠は 1 つ 動くのは最上位の 1 件だけ 常に勝つ 停止させられる change bid で上げる min_bid = 0.20(この offer の入札の下限) 上に行くほど高い入札 = 優先度が高い
図 6-2 金額の数字は 2026-08-24 時点の 1×RTX 5090 の相場に合わせた例です。on-demand の帯を一番上に置いたのは図の都合で、実際は金額に関係なく on-demand が最優先です。min_bid は「入札できる下限」であって「これを払えば動く」線ではありません。動くかどうかを決めるのは他の借り手の入札額です。

実測: 差は 1〜2 割しかない

公式ドキュメントは Interruptible の節約幅を「on-demand より 50% 以上安いことが多い」「コストを 50〜80% 節約」と書いています。ところが RTX 5090 に絞って実際の相場を取ると、この幅は出ません。

次は 2026-08-24 に vast.ai の公開 API から取得した実測値です(1 枚構成の RTX 5090、いま借りられる offer、価格の安い順に 64 件)。表の verified は「vast.ai の内部テストを通ったマシン」という検証状態のことです(第 5 章)。

種別件数最安(USD/時)中央値(USD/時)
On-demand640.32150.4037
Interruptible(verified なマシン)270.1060.346
Interruptible(verified 以外)370.2010.336

中央値で比べると 0.4037 USD/時 に対して 0.34 USD/時 前後、割引率は 1〜2 割です。1 USD = 150 円として、60 円/時 が 51 円/時 になるだけの差です。「spot なら半額」は 2026-08-24 の 5090 には当てはまりませんでした。最安値の 0.106 USD/時 はその offer の最低入札額そのものなので、わずかでも高い入札が入れば負ける水準です。

計算例: (0.4037 − 0.34) × 100 時間 = 約 6.4 USD(1 USD = 150 円として約 960 円)

100 時間走らせてようやく 1,000 円弱の差で、その間に何度か中断され再開待ちが入ることと引き換えです。相場は日単位で動くので、判断する前に自分で今日の数字を取ってください。API キーは無くても公開 offer は返ってきました(2026-08-24 実測。公式仕様は Bearer トークン必須と書かれています)。

curl -s -X POST "https://console.vast.ai/api/v0/bundles" \
  -H "Content-Type: application/json" \
  -d '{"limit":64,"type":"bid","rentable":{"eq":true},
       "gpu_name":{"eq":"RTX 5090"},"num_gpus":{"eq":1},
       "order":[["dph_total","asc"]]}'

"type" を "bid" と "ondemand" の 2 回に分けて叩き、返ってきた dph_total(= GPU 代 + 割当ストレージ代の 1 時間単価)を見比べます。"limit" に 200 と書いても返るのは最大 64 件でした。

Reserved は「予約して借りる」ものではない

名前から「先に枠を確保して安く借りる方式」を想像しますが、実際は逆です。まず on-demand で借りて、そのインスタンスにクレジットを前払いして変換します。手順は 2 段階です。

  1. Search ページで RENT を押して on-demand として借りる
  2. Instances ページのインスタンスカードにある緑の discount badge を押し、前払いできる期間(例: 1 か月 / 3 か月 / 6 か月)から選んで確定する

deposit(= 前払いする金額)と割引率はシステムが自動計算し、変換後はカードに Saved % バッジが出ます。CLI なら次の 2 コマンドです。2 行目を実行した瞬間に、指定した額のクレジット(= vast.ai にあらかじめ入金しておく残高)がそのインスタンスに固定されます。途中でやめると 5% の手数料を取られるので、「このインスタンスを何か月使うか」を決めてから金額を入れてください。

vastai show instances
vastai prepay instance <インスタンス ID> <前払いする USD 額>

<インスタンス ID> には 1 行目の出力に並ぶ自分のインスタンスの番号を、<前払いする USD 額> には 50 のように数字だけを入れます(通貨記号は書きません)。公式ドキュメントに載っている実行例と、その出力がこれです(金額に付く通貨記号だけ外してあります)。

vastai prepay instance 24973511 50
prepaid for 0.546 months of instance 24973511 applying 50.0 credits for a discount of 3.5000000000000004%

末尾の 3.5000000000000004% は浮動小数点の丸め誤差がそのまま表示されているだけで、割引は 3.5% だと読みます。50 USD を入れても 0.546 か月分しかカバーできず、割引は 3.5% しか付いていません。割引率は「前払い額が何か月分をカバーしたか」で決まるので、1 か月分に届かない額ではほとんど意味がありません。上限は公式資料の中で 3 通りに書かれています。ガイドは「最大 50%」、前払い API のリファレンスは「典型的な最大は 40%」で割引率フィールドの範囲は 0.0〜0.4、CLI は「1 か月で 0.2、3 か月で 0.3」。期待値は 2〜3 割、上限は 4〜5 割と幅で見ておくのが正確です。

借りる前に値段を見ることもできます。Search ページで On-demand フィルタを Reserved フィルタに切り替え、必要なら duration フィルタ(例: 1 か月)を設定し、Rent ボタンにマウスを乗せると内訳に Reserved cost のセクションが出ます。CLI なら vastai search offers -r です。

① on-demand で借りる Reserved はここから ② 緑の discount badge 1 / 3 / 6 か月から選ぶ ③ 前払い額を確定 クレジットが固定される 借りた後 前払いへ 割引率はここで決まる 50 USD の前払い 割引 3.5% 割引 0.2 割引 0.3 0.546 か月分 1 か月分 3 か月分 → 右へ行くほど前払い額が大きい(カバーできる月数が長い) 途中でやめると割引を巻き戻し + 5% 手数料
図 6-3 上段が変換の手順、下段が割引率の決まり方です。0.546 か月分で 3.5% は公式ドキュメントの実行例、1 か月で 0.2 / 3 か月で 0.3 は CLI ドキュメントに書かれている既定の割引関数です。1 か月分に届かない前払いでは割引はほとんど付きません。クレジットを足すたびにこの計算がやり直される点にも注意してください。

前払いクレジットはそのインスタンスに固定され、Reserved インスタンスは別のホストへ移せません。期中にクレジットを足すと割引が毎回再計算されるため、公式は「期中に少額を足すのは避けよ。かえってレートが悪くなることがある」と警告しています。

早期解約すると、すでに受け取った割引を回収され、さらに 5% の手数料が引かれます。公式の計算例では、on-demand 1 USD/時(= 月 720 USD)、1 か月の Reserved が月 576 USD のとき、即解約なら返金 576 USD、15 日後は残高 288 USD に対して返金約 212 USD、満了までいれば 0 USD です。前払い残高は vastai show deposit <インスタンス ID> で確認できます。

借りたあとに変えられるのは 1 方向だけ

種別は借りる前に決めるものです。公式が挙げている変換の可否はこれだけです。

変換可否
On-demand → Reserved可(いつでも、discount badge から)
On-demand → Interruptible不可(新規作成が必要)
Interruptible → On-demand不可(新規作成が必要)
Reserved → On-demand戻せるが、残っている割引を失う

セレクタを押し間違えたら作り直すしかありません。ディスクサイズが作成時に固定されるのと同じ性質です(第 7 章)。逆に言えば、on-demand で始めておけば後から Reserved に変換する道は開いたままです。公式が「最速の経路」として挙げる 4 点の最後も「まず on-demand で始める(あとから reserved に変換できる)」でした。

どれを選ぶか

公式が用途別に挙げている推奨はこうです。本番推論・時間制約が厳しいジョブは On-demand。ハイパーパラメータ探索(= 設定値を変えながら同じ学習を何度も回す作業)・データ前処理・開発とテストは Interruptible。複数日にわたる学習・定常負荷は Reserved。判断軸は「途中で止まったときに、自分で再開できる作り方をしてあるか」の 1 点です。

GPU を借りるのが初めてなら、最初の数回は On-demand を選んでください。理由は 3 つです。

Interruptible に移るのは、途中結果をディスクへ書き出す形にできてからで十分です。Reserved は同じインスタンスを 1 か月以上使い続けると決まってからで構いません。1 か月に届かない前払いでは割引がほとんど付かないからです。

途中で止まると困る? 作業が kill される はい いいえ On-demand 中断されない 中央値 0.40 USD/時 Interruptible 入札に負けると停止 中央値 0.34 USD/時 1 か月以上 必須 Reserved に変換 前払いで割引 1 か月で 2 割前後 チェックポイントを 自分で実装する
図 6-4 左端の問いは「止まるか」ではなく「止まると困るか」です。数値は 2026-08-24 時点の 1×RTX 5090 の中央値。Reserved は右上の枝に入ってから初めて考えるもので、借りる時点の選択肢ではありません。

つまずきポイント

Interruptible を「ちょっと安い On-demand」だと思っていた

outbid されるとインスタンスは停止し、動いていたプロセスは kill されます。モデルのダウンロード中なら途中で切れます(ディスクに書いたものは残ります)。優先度が戻れば自動再開しますが、公式は「再開まで長く待つことがある」と明記しています。安さの対価は「いつ止まるか決められないこと」です。

作成画面で Reserved を探して見つからなかった

作成画面のセレクタにあるのは on-demand と interruptible の 2 つだけです。Reserved は借りたあとに Instances ページの緑の discount badge から変換して作ります。値段だけ先に知りたいなら Search ページの Reserved フィルタと Rent ボタンのホバーで Reserved cost を見てください。

とりあえず少額を前払いして割引を狙った

公式の実行例では 50 USD の前払いで割引は 3.5% です。1 か月分に届かない額ではほぼ付きません。さらにクレジットを足すたびに割引が再計算されるので、期中に少額を足すとレートが悪化することがあります。残高が足りないまま実行すると、API は珍しいステータスコード 411 と Insufficient credit を返します。

前払いしたから GPU は押さえられていると思っていた

Reserved でも stop すると GPU は解放され、他のユーザーに借りられる可能性があります。再開時に 30 秒以上「Scheduling」(= GPU の空きを待っている表示)から進まないなら、その GPU は他の人に借りられた可能性が高い、というのが公式の目安です。しかも stop 中もディスク課金は止まりません(第 16 章)。前払いは価格の約束で、ハードウェアの占有ではありません。

理解度チェック

Q1. Interruptible で outbid されたとき、動いていた処理とディスクのデータはどうなりますか?

インスタンスは停止され、動いているプロセスは kill されます。ディスク上のデータは残りますが、インスタンスは機能しません。優先度が戻れば自動再開しますが、再開まで長く待つことがあります。公式の備えは「頻繁に保存」「重要な出力はクラウドストレージへ」「チェックポイントを実装」です。

Q2. 2026-08-24 時点の 1×RTX 5090 で、Interruptible にすると何割安くなりましたか?

中央値で on-demand 0.4037 USD/時 に対し 0.336〜0.346 USD/時、つまり 1〜2 割です。公式の「50〜80% 安い」はこの日の 5090 には当てはまりませんでした。最安値だけは 0.106 USD/時 まで落ちます。

Q3. Interruptible で借りたインスタンスを、あとから On-demand に変えられますか?

できません。新しいインスタンスを作り直す必要があります。変換できるのは On-demand → Reserved の 1 方向だけです(Reserved から戻すこともできますが、残っている割引を失います)。

Q4. インスタンス作成時に入札額を書かないとどうなりますか?

On-demand として作られます。REST API の price、CLI の --bid_price が入札額の指定で、これを省略した場合は固定価格の契約になります。逆に言えば、意図せず Interruptible になることはありません。

Q5. Reserved に 50 USD を前払いすると、どれくらい割引されますか?

公式の実行例では 0.546 か月分で割引 3.5% でした。割引率は前払い額がカバーする月数で決まり、CLI の既定の割引関数は「1 か月で 0.2、3 か月で 0.3」。上限はガイドが「最大 50%」、API リファレンスが「典型的には 40%」と食い違うので幅で見ます。

まとめ

次章では、この契約の上に載せるテンプレート(= Docker イメージと起動設定)とディスク容量を決めます。RTX 5090 では CUDA 12.8 以上が必須で、イメージを不用意に変えると 5090 の offer が候補から消えます。