AWS ParallelCluster 配分戦略(AllocationStrategy)の選び方 - 6つの戦略を目的別に解説してみた
はじめに
AWS ParallelCluster では、配分戦略 (AllocationStrategy) を設定できます。これによりコンピュートノード(EC2 インスタンス)の起動を制御します。適切な戦略を選択することで、ワークロードの要件に応じた最適化が可能です。具体的には、コスト削減、中断リスクの低減、特定 AZ での起動などが実現できます。
本記事ではオンデマンド起動とスポット起動で利用可能な配分戦略を整理し、どの場面でどの戦略を選ぶべきかを解説します。
配分戦略とは
配分戦略 (AllocationStrategy) は、複数の選択肢の中から、どの判断基準で選ぶかを指定する設定です。具体例で説明します。クラスター設定で以下のリソースを指定したとします。
- スポットインスタンス起動
- 複数のインスタンスタイプ(c7a.48xlarge、m7a.48xlarge、r7a.48xlarge)
- 複数のサブネット(3 つの異なる AZ のサブネット)
この場合、3 つのインスタンスタイプ × 3 つのサブネットで、合計 9 通りの組み合わせが存在します。配分戦略で「価格優先」と指定すれば、ParallelCluster は 9 通りの中から最安価な組み合わせを選び、自動的にスポットインスタンスを起動します。同様に「キャパシティ優先」なら、利用可能な在庫状況を考慮した上で安価なスポットインスタンスを起動します。
複数インスタンスタイプを使う場合の制約
AWS ParallelCluster では、ComputeResources
の Instances
に複数のインスタンスタイプを指定できます。これにより配分戦略が複数の選択肢から最適なものを選択できるようになります。とくにスポットインスタンスを利用する場合、複数のインスタンスタイプを指定することで中断リスクを分散できて効果的です。
必須要件
複数のインスタンスタイプを混在させる場合、以下の要件をすべて満たす必要があります。
- 同じ数の vCPU を持つこと
- マルチスレッディング無効化時は物理コア数が同数であること
- EFA を有効化する場合、すべてのインスタンスタイプが EFA をサポートしていること
- GPU は同じメーカーの同じ数の GPU 数であること
- NVIDIA と、AMD の混在はできない
メモリサイズや、ネットワーク帯域幅などは異なったスペックでも問題ありません。
# ------ Compute 1 ------
- Name: queue1
ComputeResources:
- Name: queue1
Instances:
- InstanceType: c7a.48xlarge # 物理コア数 192 コア
- InstanceType: m7a.48xlarge # 〃
- InstanceType: r7a.48xlarge # 〃
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: true # マルチスレッディング無効化
CapacityType: ONDEMAND
Efa:
Enabled: true # EFA 有効化
詳細については、AWS ParallelCluster ユーザーガイドの Instances
セクションを参照してください。
配分戦略の種類
配分戦略は AWS ParallelCluster 3.3.0 以降でサポートされています。キャパシティタイプ別のサポート状況は以下の通りです。デフォルトでは lowest-price
という戦略が適用されます。
キャパシティタイプ | 利用可能な戦略 | デフォルト |
---|---|---|
ONDEMAND | lowest-price , prioritized |
lowest-price |
SPOT | lowest-price , capacity-optimized , price-capacity-optimized , capacity-optimized-prioritized |
lowest-price |
CAPACITY_BLOCK | なし | - |
オンデマンドインスタンスの配分戦略
オンデマンドインスタンスでは 2 つの戦略が利用可能です。
戦略名 | 優先事項 | 動作 | メリット | デメリット | 推奨シーン | 追加バージョン |
---|---|---|---|---|---|---|
lowest-price |
コスト | もっとも安価なインスタンスから順に起動 | コスト削減 | - | ・コスト最優先 ・配置の制約がない |
v3.3.0 |
prioritized |
AZ 配置 | 指定したサブネットの優先順位にしたがって起動 | 特定のサブネットを優先できる | コストよりも AZ 配置を優先する | ・特定 AZ のストレージ(EBS、FSx など)にアクセス ・起動する AZ を指定したい |
v3.14.0 |
lowest-price(最低価格優先)
オンデマンド価格を基準に起動順序を決定します。
複数のインスタンスタイプを指定した場合、最安価のインスタンスを優先して起動します。同時にキャパシティ不足による起動失敗も回避できます。最安価なインスタンスが利用できない場合は、自動的に次善の選択肢に切り替わるため、ジョブの実行機会を最大化できます。
prioritized(優先順位指定)
SlurmQueues/Networking/SubnetIds
で指定したサブネットの順序にしたがって起動します。
クラスターのコンフィグで最初に指定されたサブネットが最高優先度となり、順に優先度が下がります。
- Name: p1
ComputeResources:
- Name: ondemand
Instances:
- InstanceType: m8i.48xlarge
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: true
CapacityType: ONDEMAND
AllocationStrategy: prioritized
Networking:
SubnetIds:
- subnet-xxxxxxxx1 # 優先度: 高
- subnet-xxxxxxxx2 # 優先度: 中
- subnet-xxxxxxxx3 # 優先度: 低
ユースケース
- 特定 AZ のストレージにアクセスしたいとき
- FSx for Lustre と同じ AZ で起動することでレイテンシを最小化
- ヘッドノードから共有される EBS も同様
- AZ 間データ転送コストを削減したい
- 同じ AZ 内での通信はデータ転送料金が無料
スポットインスタンスの配分戦略
スポットインスタンスでは 4 つの戦略が利用可能です。
スポットインスタンスの最大の魅力は、オンデマンドと比較して最大 90% のコスト削減です。しかし lowest-price
では中断リスクが高くなります。一方 capacity-optimized
では価格メリットが薄れます。ほとんどのスポットワークロードに最適なのは price-capacity-optimized
か capacity-optimized-prioritized
です。
戦略名 | 優先順位 | 動作 | メリット | デメリット | 推奨シーン | 追加バージョン |
---|---|---|---|---|---|---|
price-capacity-optimized |
空きキャパシティ + 価格 | 中断率を考慮した上で安価なインスタンスを選択 | 中断リスク低減とコスト削減を両立 | 完全な中断回避は保証できない | スポット利用時のほとんどのワークロード | v3.10.0 |
capacity-optimized-prioritized |
空きキャパシティ + 価格 > AZ 配置 | 中断リスク低減とコスト削減を両立し、ベストエフォートで AZ 配置の優先度を適用 | コストと中断リスクを抑えつつ AZ 配置も考慮 | AZ 配置は保証されない | 特定 AZ のストレージにアクセスを考慮しつつ、中断リスクも低減したい | v3.14.0 |
lowest-price |
価格 > 空きキャパシティ | 最低価格のスポットプールから起動 | コストを最小化できる | 他に比べると中断リスクが高くなる | 極端なコスト削減が必要なとき | v3.3.0 |
capacity-optimized |
空きキャパシティ > 価格 | 空きキャパシティが潤沢なものを優先 | 中断リスクを最小化 | スポットのコストメリットが薄い | price-capacity-optimized の下位互換となっている |
v3.3.0 |
price-capacity-optimized(バランス重視)
空きキャパシティと価格の両方を考慮し、中断率を抑えた上で安価なインスタンスを選択します。
- 中断リスク低減とコスト削減を両立
- 空きキャパシティと価格の両方を考慮し、バランスの取れた選択を実現
- 複数のインスタンスタイプ指定がオススメ
- 複数のインスタンスタイプ、複数のサブネット(AZ)を指定してスポット起動できる確率をあげましょう
capacity-optimized-prioritized(バランス重視・AZ 優先順位指定)
中断リスク回避を最優先しつつ、ベストエフォートで AZ 配置の優先度を適用します。
まずスポット価格と、空きキャパシティを考慮されます。(capacity-optimized
と同じ)。その上で SlurmQueues/Networking/SubnetIds
の記載順序に従い、できる限り優先度の高いサブネットを使用します。ただし空きキャパシティが最優先されるため、オンデマンドとは異なり AZ 指定は保証されません。
ユースケース
オンデマンドと同じですが、スポット利用の場合は基本的にこちらの戦略を推奨します。
- 特定 AZ のストレージにアクセスしたいとき
- FSx for Lustre と同じ AZ で起動することでレイテンシを最小化
- ヘッドノードから共有される EBS も同様
- AZ 間データ転送コストを削減したい
- 同じ AZ 内での通信はデータ転送料金が無料
クラスターのコンフィグで最初に指定されたサブネットが最高優先度となり、順に優先度が下がります。
- Name: p1
ComputeResources:
- Name: spot
Instances:
- InstanceType: m8i.48xlarge
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: true
CapacityType: SPOT
AllocationStrategy: prioritized
Networking:
SubnetIds:
- subnet-xxxxxxxx1 # 優先度: 高
- subnet-xxxxxxxx2 # 優先度: 中
- subnet-xxxxxxxx3 # 優先度: 低
厳密な AZ 指定が必要な場合は、キャパシティタイプをオンデマンドにして prioritized
を使用してください。または、スポット利用でもサブネットの指定を特定の AZ のサブネットのみとしてください。
上記の要件がない場合は、price-capacity-optimized-prioritized
を使用します。その際、ヘッドノードや FSx for Lustre などのストレージと同じ AZ のサブネットを優先する設定が推奨されます。
試してみた結果
price-capacity-optimized
が追加されたときに検証してみました。キャパシティとコストが優先されるため、指定してサブネットでは起動してきませんでした。
その他の戦略
以下の戦略は特殊なケースを除き、通常は推奨しません。
lowest-price(最低価格優先)
コストを最小化でき、スポットインスタンスの価格メリットを最大限に活用できます。
ただし他の戦略に比べると中断リスクが高くなります。中断による再実行コストを考慮すると、トータルコストの増加につながる可能性があります。
- 中断リスクが高くなる可能性が高く、ワークロードの安定性が損なわれる
price-capacity-optimized
でも十分なコスト削減が可能で、中断リスクも低減できる
capacity-optimized(空きキャパシティ優先)
空きキャパシティを最優先し、価格よりも中断リスクの最小化を重視します。
価格を考慮しないため、スポットインスタンスのコストメリットが薄れます。後発の price-capacity-optimized
の下位互換となっています。中断を極力避けたい場合は、オンデマンドインスタンスを検討してください。
まとめ
AWS ParallelCluster の配分戦略について解説しました。適切な戦略を選択することで、コスト削減や中断リスクの低減が可能です。
オンデマンドインスタンスの推奨戦略
- コスト優先:
lowest-price
(デフォルト) - AZ 配置優先:
prioritized
スポットインスタンスの推奨戦略
- ほとんどのワークロード:
price-capacity-optimized
- AZ 配置も考慮したい:
capacity-optimized-prioritized
最適な戦略は環境やワークロードによって異なります。実際の使用状況を踏まえて検討してください。
おわりに
配分戦略が v3.14.0 で新たに 2 追加されため整理してみました。AZ 指定ができるようになったのはかゆいところに手が届く良いアップデートでした。
スポットインスタンスを活用する場合は、複数のインスタンスタイプと複数のサブネットを指定することで起動確率を向上できますので、スポットの活用もご検討ください。
本記事が AWS ParallelCluster の配分戦略を理解する一助となれば幸いです。