AWS ParallelCluster v3.8.0-v3.13.1でキャパシティ予約期限切れ時のクラスター更新失敗問題と対処方法

AWS ParallelCluster v3.8.0-v3.13.1でキャパシティ予約期限切れ時のクラスター更新失敗問題と対処方法

Clock Icon2025.06.26

はじめに

本題の前にキャパシティ予約とは

キャパシティ予約とは、特定の AZ 内で指定した数の EC2 インスタンスを予約し、必要な時に確実に起動できるようにするサービスです。CPU インスタンスと、GPU インスタンスではキャパシティ予約の名称が異なります。

  • EC2 オンデマンドキャパシティ予約
  • EC2 Capacity Blocks for ML

今回のバグの概要

AWS ParallelCluster v3.8.0 から v3.13.1 において、期限切れのキャパシティ予約を参照しているクラスターで更新系コマンドが失敗する問題が確認されています。

https://github.com/aws/aws-parallelcluster/wiki/(3.8.0-‐-3.13.1)-Update‐Cluster,-Update‐Compute‐Fleet-may-fail-when-Compute-Resources-use-an-expired-Capacity-Reservation

pclsuter update-clusterと、pcluster update-compute-fleetが使えないのは運用上つらく、なにも変更できないクラスターになってしまいます。

バグは修正済み

現時点で最新の v3.13.2 でこの問題は修正されています。

Release AWS ParallelCluster v3.13.2 · aws/aws-parallelcluster

対処方法

pclsuterコマンドの実行環境にパッチを充てるか、ParallelCluster v3.13.2 移行のクラスターへ移行です。

発生条件

今回の問題は以下の条件が揃った場合に発生します。

  1. ParallelCluster v3.8.0 ~ v3.13.1 を使用
  2. Slurm スケジューラーでクラスター Config 内の ComputeResources エントリーで CapacityReservationId を指定
  3. 参照しているキャパシティ予約が期限切れた
  4. 同じ ComputeResources エントリー内で InstanceType が未指定
設定例
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue1
      # InstanceType が未指定
      ComputeResources:
        - Name: compute-resource-1
          CapacityReservationId: cr-1234567890abcdef0 # キャパシティ予約の指定してかつ、期限が切れていると問題になる

期限切れのキャパシティ予約の ID を参照できないため、pclusterコマンドで更新時に設定を解析する際にエラーが発生するようです。

エラーメッセージの例

影響を受けるクラスターで更新コマンドを実行すると、以下のようなエラーが発生します。

Unable to parse configuration file. An error occurred when calling the DescribeCapacityReservations operation

対処方法

バグ修正済みの v3.13.2 へのアップデート

推奨される方法はpclusterコマンドを v3.13.2 以降にアップデートし、新規のクラスターに切り替えることです。

sudo pip install --upgrade aws-parallelcluster

クラスター自体のアップデートはできないため、新規のクラスターへの乗り換えが必要です。クラスターの移行が困難な環境もあることでしょう。次の回避策を利用できます。

v3.13.1 以前の既存クラスターの運用を続ける場合

  1. 過去バージョンにパッチが適用されているソースコードをダウンロード
  2. ソースコードからインストール

アップデートを試してみた

現在のバージョンは v3.13.0 です。

$ pcluster version
{
  "version": "3.13.0"
}

integ-tests-[VERSION]のブランチが用意されているため、ここからソースコードを取得してきます。

Cursor_と_aws_aws-parallelcluster__AWS_ParallelCluster_is_an_AWS_supported_Open_Source_cluster_management_tool_to_deploy_and_manage_HPC_clusters_in_the_AWS_cloud__🔊.png

v3.13.0 のソースコードを取得してインストールまでやってみました。

$ wget https://github.com/aws/aws-parallelcluster/archive/integ-tests-3.13.0.zip
$ unzip integ-tests-3.13.0.zip
$ cd aws-parallelcluster-integ-tests-3.13.0/
$ pip install ./cli
Processing ./cli
--- 省略 ---
Successfully installed aws-parallelcluster-3.13.0

パッチが適用されたバージョンが正常にインストールされました。バージョン番号は同じですが、内部的にバグ修正が適用されているようです。

$ pcluster version
{
  "version": "3.13.0"
}

キャパシティ予約が切れている環境は用意できなかったため、検証はここで終わりです。

まとめ

AWS ParallelCluster v3.8.0 ~ v3.13.1 でキャパシティ予約を使用している場合、期限切れの予約が原因でクラスター更新が失敗します。今回のバグは v3.13.2 で修正されているため、最新バージョンへのアップデートか、過去バージョンであれば修正済みコマンドをインストールし直しが必要です。キャパシティ予約を使用していない方は、このバグの影響は受けませんのでご心配なく。

おわりに

v3.13.2 がリリースされ、バグ修正だけだから良いかと思っていたのですが、キャパシティ予約を利用しているユーザーにとっては痛いバグでした。一応日本語でアナウンスしておこうかと思い書きました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.