AWS ParallelCluster 3.6.0 で RHEL 8 をサポートしました

待望のRHELをサポート!他にも新たな機能が大盛りです。
2023.05.23

2023年5月22日に AWS ParallelCluster 3.6.0 がリリースされました。v3.5.0 から約2か月ぶりのマイナーアップデートとなります。

注目のアップデート紹介

個人的に注目しているポイントや、このアップデートの目玉(らしきもの)をピックアップしています。リリースノートからの情報ではアップデート前後の違いを把握することが難しいため、私の知っている範囲で補足して紹介します。

  1. ParallelClusterで利用できる OS に RHEL 8.7 のサポートが追加
  2. クラスターあたりの最大キュー数が50個、合計50個のコンピュートリソースをサポート
    1. ユーザーガイドによると最大キュー数は100個となっています
  3. CloudFormation カスタムリソースをサポート
  4. Slurm 設定を ParallelCluster のコンフィグファイル(YAML)からカスタマイズをサポート
  5. 1つのカスタムスクリプトから複数のスクリプトを呼び出しをサポート
  6. EC2 の詳細モニタリングを有効化するオプションDetailMonitoringが追加
  7. CloudWatch ダッシュボードにヘッドノードのディスク使用率と、メモリ使用率が追加
    1. 新たに CloudWatch Agent でメトリクスを取得するようになりました
  8. CloudWatch Logs のデフォルト保持期間が180日に変更
    1. 従来は14日保持設定でした。

アップデート詳細はリリースノートをご確認ください。

ParallelClusterで利用できる OS に RHEL 8.7 のサポートが追加

今回の目玉のアップデートはなんといっても RHEL8 をサポートしたことです。

今まで長らく RHEL 系はサポートはされていませんでした。オンプレスパコンで RHEL をご利用頂いた場合はクラウド HPC(AWS ParallelCluster)への移行を検討される際には Amazon Linux 2 を紹介しておりましたが、Amazon Linux 2 の EoL は2025年6月までとなっており、サポート終了が見えている微妙な時期です。後継の Amazon Linux 2023 は ParallelCluster ではまだサポートされておりません。また Fedora に近しい OS のため、RHEL からの移行先としては悩ましいところがあります。

RHEL 8 は Amazon Linxu 2 や Ubuntu などの通常の Linux と比べると利用費が高くなりますが、安定したクラスタ環境を構築にするには非常に良い選択肢が増えました。

Image section - AWS ParallelCluster

RHEL 起動の動作検証は本ブログの後半で紹介します。

クラスターあたりの最大キュー数が50個、合計50個のコンピュートリソースをサポート

ユーザーガイドの記述を正とすると以下になります。いずれにせよ最大数が増えたことには変わりなたいめ、1つのクラスターでより複数ワークロードに耐えられる構成を組めるのではないでしょうか。

  • クラスターあたりの最大キュー数は100
  • 各クラスタあたりの最大コンピュートリソース数は150
    • 各キューあたり最大コンピュートリソース数は40

Increase the limit on the maximum number of queues per cluster from 10 to 100. Each cluster can have up to 150 compute resources, and each queue can have up to 40 compute resources.

Release notes and document history - AWS ParallelCluster

CloudFormation カスタムリソースをサポート

ParallelCluster管理外のネットワーク、共有ストレージも ParallelCluster の CloudFormation スタックから管理することも可能になりました。

For example, you can configure cluster external resources such as network, shared storage, and security group infrastructure in a CloudFormation stack.

AWS CloudFormation custom resource - AWS ParallelCluster

このアップデートを見たときに私は ParallelCluster の CloudFormation スタックからカスタムリソースを使うユースケースが思いつきませんでした。ユーザーガイドに目を通してはじめて「そういう需要もあったのね」と思いました。

Slurm 設定を ParallelCluster のコンフィグファイル(YAML)からカスタマイズをサポート

slurm.confファイルのみ ParallelCluster のコンフィグから設定を変更できるようになりました。

従来はヘッドノード起動後にログインして設定ファイルを編集するか、Ansible などの構成管理ツールで設定を流し込むなどしていたと思います。一部の設定は ParallelCluster のコンフィグファイルに寄せて管理することもできそうですね。

Slurm configuration customization - AWS ParallelCluster

1つのカスタムスクリプトから複数のスクリプトを呼び出しをサポート

Sequence設定が追加されたことによりカスタムスクリプト内から他に用意したスクリプトを呼び出して実行できるようになりました。カスタムスクリプトの肥大化を避けられ、管理しやすく良い追加機能ですね。

[...]
  CustomActions:
    OnNodeStart:
      # Script URL. This is run before any of the bootstrap scripts are run
      Script: s3://bucket-name/on-node-start.sh
          Args:
            - arg1
      # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run.
      Sequence:
        - Script1: s3://bucket-name/on-node-start1.sh
          Args:
            - arg1
        - Script2: s3://bucket-name/on-node-start2.sh
          Args:
            - arg1
[...]

Custom bootstrap actions - AWS ParallelCluster

EC2 の詳細モニタリングを有効化するオプションDetailMonitoringが追加

コンピュートノードのインスタンスに対して詳細モニタリングを有効化できるオプションが追加されました。メトリクスを確認してワークロードに応じたチューニングするときには便利そうですね。詳細モニタリングを有効化すると別途課金が発生しますのでご留意ください。

Monitoring:
  Logs:
    CloudWatch:
      Enabled: true
      DeletionPolicy: "Delete"
  Dashboards:
    CloudWatch:
      Enabled: true
  DetailedMonitoring: true

Monitoring section - AWS ParallelCluster

CloudWatch ダッシュボードにヘッドノードのディスク使用率と、メモリ使用率が追加

ヘッドノードは CloudWatch Agent により、ディスク使用率と、メモリ使用率を取得してくれるようになりました。そして、ダッシュボードにも表示さてくれます。デフォルトでメモリ使用率を取れるようになったのはありがたいですね。

Amazon CloudWatch dashboard - AWS ParallelCluster

RHEL8 を起動してみた

OS は RHEL8を指定し、コンピュートノードは RHEL8 がスポットインスタンスで起動できるか検証してみます。

サンプルコンフィグ紹介

作成したコンフィグは以下になります。

sample360.yaml

Region: ap-northeast-1
Image:
  Os: rhel8
Tags:
  - Key: Name
    Value: ParallelCluster360
# ----------------------------------------------------------------
# Head Node Settings
# ----------------------------------------------------------------
HeadNode:
  InstanceType: t3.micro
  Networking:
    ElasticIp: false
    SubnetId: subnet-035be95eeaa091603
  Ssh:
    KeyName: sandbox-key
  LocalStorage:
    RootVolume:
      Size: 35
      Encrypted: true
      VolumeType: gp3
      Iops: 3000
      Throughput: 125
  Iam:
    AdditionalIamPolicies:
      - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
    S3Access:
      - BucketName: hpc-dev-postinstall-files
        EnableWriteAccess: false
# ----------------------------------------------------------------
# Compute Node Settings
# ----------------------------------------------------------------
Scheduling:
  Scheduler: slurm
  SlurmSettings:
    ScaledownIdletime: 5
  SlurmQueues:
    # ------ Compute 1 ------
    - Name: queue1
      ComputeResources:
        - Name: queue1
          Instances:
            - InstanceType: c6i.large
          MinCount: 0
          MaxCount: 10
          DisableSimultaneousMultithreading: true
      ComputeSettings:
        LocalStorage:
          RootVolume:
            Size: 35
            Encrypted: true
            VolumeType: gp3
            Iops: 3000
            Throughput: 125
      CapacityType: SPOT
      AllocationStrategy: lowest-price
      Networking:
        SubnetIds:
          - subnet-035be95eeaa091603
        PlacementGroup:
          Enabled: true
      Iam:
        AdditionalIamPolicies:
          - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
        S3Access:
          - BucketName: hpc-dev-postinstall-files
            EnableWriteAccess: false

# ----------------------------------------------------------------
# Shared Storage Settings
# ----------------------------------------------------------------
SharedStorage:
  - MountDir: /mnt/efs-1zone
    Name: efs-1zone
    StorageType: Efs
    EfsSettings:
      FileSystemId: fs-0f1158ade79354809

# ----------------------------------------------------------------
#  Other Settings
# ----------------------------------------------------------------
Monitoring:
  Logs:
    CloudWatch:
      Enabled: true
      # RetentionInDays: 30
      DeletionPolicy: "Delete"
  Dashboards:
    CloudWatch:
      Enabled: true
  DetailedMonitoring: true

クラスター作成

サンプルコンフィグからクラスターを作成します。

$ pcluster version
{
  "version": "3.6.0"
}

$ pcluster create-cluster -n ParallelCluster-v360 -c sample360.yaml

ヘッドノード、コンピュートノードの確認

クラスター作成後、起動してくるヘッドノードと、テストジョブをサブミットしてコンピュートノードの様子を確認しました。

ヘッドノード

プラットフォームは待望の RHEL と表示されています。

コンピュートノード

テストジョブをサブミットし、コンピュートノードが起動してきました。

プラットフォームはこちもら同様に RHEL と表示されています。ちなみにヘッドノードと、コンピュートノードで異なる OS は利用できません。

コンピュートノードはスポットインスタンス指定にしていました。RHEL は指定どおりにスポットで起動してくれました。

以上で簡単ではありますがサンプルコンフィグによる RHEL の起動確認は終わりです。

おわりに

ParallelCluster 3.6.0 のアップデート内容は良い機能追加が多くて熱いアップデートでした。気になる機能は別途検証してブログでご紹介します。ひとまず 3.6.0 リリースの情報まとめでした。