PR

どうしてもGPUが必要な処理に!AWS「オンデマンド容量予約」と「Capacity Blocks」入門

AWS

はじめに

AWSのGPUインスタンス枯渇対策について解説する連載の第3回(最終回)です。
これまでは、以下の「賢く立ち回る」ための戦略を紹介してきました。

これらの対策で「空いているインスタンスを拾う確率」は劇的に上がりますが、それでも「明日の朝9時から、絶対にGPUを5台使ってモデルの学習を回さなければならない(失敗は許されない)」といった、シビアな業務要件には対応しきれません。

今回は、確率論ではなく「コストをかけてでも確実性を買う」ための究極の手段、「オンデマンド容量予約(ODCR)」「Capacity Blocks for ML」について解説します。

1. 「オンデマンド容量予約(ODCR)」の仕組みと罠

「インスタンスを起動しっぱなしにするのはもったいない。でも、いざ起動しようとしたら在庫がないのは困る…」
そんな時に使えるのが、オンデマンド容量予約(On-Demand Capacity Reservation : ODCR)です。

これは、特定のAZに特定のインスタンスタイプを起動するための「空き箱(予約枠)」だけを確保しておく機能です。

メリット

  • 予約枠さえ作れてしまえば、いつでも100%確実にインスタンスを起動できます。
  • 起動する時は、この「予約枠の中」を指定してインスタンスを起動するだけです。

デメリット(罠)とコスト

この機能には、利用する上で絶対に知っておくべき2つの大きな罠があります。

  1. 確保できなければ予約すらできない
    ODCRは「未来の予約」ではなく「今の在庫のキープ」です。つまり、作ろうとした瞬間にそのAZでGPUが枯渇していれば、「予約枠を作ること自体」がエラーになります。
  2. 使っていなくても100%の料金がかかる
    予約枠を確保している間は、中にインスタンスを起動していようがいまいが、オンデマンド料金と全く同じ金額が秒単位で課金されます。

「なんだ、起動しっぱなしにするのとコスト同じじゃん」と思うかもしれません。
しかし、ハイブリッドな運用を行うことで真価を発揮します。例えば、「夜間の空いている時間帯にODCRを作成して枠をキープしておき、翌日の日中にその枠を使って処理を行い、終わったらODCRごと破棄する」といった戦略をとることで、24時間365日起動しっぱなしにするよりは大幅にコストを抑えつつ、必要な時間帯の確実性を担保できます。

2. 機械学習特化の救世主「Capacity Blocks for ML」

ODCRの「今空いていないと予約できない」という弱点を克服する、比較的新しい機能が Amazon EC2 Capacity Blocks for ML です。

これは、ホテルの予約のように「未来の特定の日付・期間(例:来週の月曜の朝8時から水曜の夜8時まで)」を指定して、GPUインスタンスを確実に予約できる機能です。

特徴

  • 数日後から最大数週間先までの期間で、必要な日数(1日〜14日など)を予約できます。
  • 予約した期間が開始されると、確実にそのGPUインスタンス群が利用可能になります。

注意点

非常に強力な機能ですが、現状(記事執筆時点)ではいくつか制限があります。
* ハイエンドインスタンス向け: 主に p4dp5trn1 といった、大規模な機械学習クラスタ向けの超高性能(そして超高額)なインスタンスが対象です。日常的な推論でよく使う g4dng5 のような安価なGPUインスタンスは、このCapacity Blocksの対象外であることが多いです。
* 需要に応じた価格変動: 予約時の空き状況によって価格が変動(ダイナミックプライシング)するため、常に固定料金というわけではありません。

そのため、日常的なバッチ処理の確保というよりは、「全社のデータサイエンティストが集中的にLLMの学習を回す期間」といった、大規模プロジェクトのスケジュールを確定させるための機能と言えます。

3. コストと要件に応じた最適解の選び方

これまでの全3回を踏まえ、要件に応じたGPU確保のベストプラクティスをまとめます。

パターンA:コスト最優先・待てる処理

  • 手法: スポットインスタンス + EC2 Fleet(第2回)
  • 向いているケース: 途中で中断されてもやり直せる非同期タスク。数時間遅れても問題ない処理。

パターンB:コスパ良く、なるべく早く処理したい

  • 手法: オンデマンド + 複数AZ/代替インスタンスのフォールバック(第2回) + Exponential Backoff(第1回)
  • 向いているケース: Webサービスの裏側で動く画像生成・推論APIなど。

パターンC:絶対にこの時間帯に処理を成功させたい

  • 手法: オンデマンド容量予約(ODCR)(今回)
  • 向いているケース: 締め切りがあるバッチ処理。事前に空いている時間にODCRを確保し、本番に備える。

パターンD:大規模なAI学習プロジェクトのスケジュール確定

  • 手法: Capacity Blocks for ML(今回)
  • 向いているケース: 数百万円単位のコストをかけて、p5 インスタンスなどを数日間確実に確保したい場合。

まとめ

「GPUインスタンスが確保できない!」という問題は、AWSを利用する多くのエンジニアを悩ませていますが、AWS側もそれに対応するための様々な仕組み(Fleet、ODCR、Capacity Blocksなど)を提供しています。

自社のシステムが「待てる処理」なのか「待てない処理」なのか、そして「どれだけコストをかけられるか」を天秤にかけ、これらの手法を組み合わせて強靭なアーキテクチャを構築してみてください。

全3回にお付き合いいただき、ありがとうございました!


連載記事一覧
1. AWS GPUインスタンスが起動しない!InsufficientInstanceCapacityとAPI制限エラーの正しい対処法
2. GPUインスタンスの枯渇を回避!複数AZ・代替インスタンスタイプを活用したEC2起動戦略
3. どうしてもGPUが必要な処理に!AWS「オンデマンド容量予約」と「Capacity Blocks」入門(本記事)

タイトルとURLをコピーしました