
AWS ParallelCluster 3.4.0 でコンピュートノードのマルチ AZ 起動をサポートしました
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
2022年12月22日に AWS ParallelCluster 3.4.0 がリリースされました。v3.3.0 のリリースから約1か月強と早い間隔でのマイナーアップデートです。
注目のアップデート紹介
個人的な注目ポイントと、アップデートの目玉(っぽいもの)をピックアップしました。アップデート前後の違いについてはリリースノートの情報から把握するのは難しいためわかる範囲で補足します。
アップデート詳細はリリースノートをご確認ください。
コンピュートノードのマルチ AZ 対応
コンピュートノードのサブネット(AZ)を複数指定ができるようになり、マルチ AZ 構成でコンピュートノードを起動できます。 可用性や、耐障害性という意味のマルチ AZ 対応というよりは複数の AZ を利用することで計算リソース(EC2 インスタンス)を確保しやすい構成を取れるようになったアップデートと捉えています。
通常ジョブをサブミットするときにキューを指定します。
今回のアップデートでキューの設定で複数のサブネットを指定ができるようになりました。具体的にはクラスターのコンフィグでSubnetsIdsの箇所で複数のサブミット ID を指定できます。
  SlurmQueues:
    # ------ Compute 1 ------
    - Name: queue-1
      ComputeResources:
        - Name: multiaz-queue
          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
          - subnet-0ba7369f9caba6f93
設定方法と注意事項
今回検証に利用したサブネットを2つ設定したキューがあるクラスターのサンプルコンフィグです。
Region: ap-northeast-1
Image:
  Os: ubuntu2004
Tags:
  - Key: Name
    Value: MultiAZ-Cluster
# ----------------------------------------------------------------
# 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: queue-1
      ComputeResources:
        - Name: multiaz-queue
          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
          - subnet-0ba7369f9caba6f93
        # PlacementGroup:
        #  Enabled: true
      # CustomActions:
      #   OnNodeConfigured:
      #     Script: s3://hpc-dev-postinstall-files/sample-ubuntu-docker/postinstall.sh
      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: false
マルチ AZ 設定時の注意事項
設定時の注意事項です。ドキュメントに記載があった点と、見逃していたか見つけられなかったでクラスター作成時にわかったことをまとめます。
ドキュメントより
- マルチ AZ 指定するときはComputeResources:のInstances指定が必須- Instances指定は v3.3.0で追加になった設定項目です
 
- サブネット設定は同一の AZ を複数する指定はできない
- サブネットは異なる AZ を指定する必要がある
Scheduling section - AWS ParallelCluster
クラスターを作成してわかったこと
- プレイスメントグループは有効化できない
- 現状 ParallelCluster でのプレイスメントグループ有効はクラスタープレイスメントグループのみしか選択できないためと思われる
 
- One Zone EFS はマウントできない
{
  "configurationValidationErrors": [
    {
      "level": "ERROR",
      "type": "MultiAzPlacementGroupValidator",
      "message": "You have enabled PlacementGroups for the 'multiaz-queue' Compute Resource on the 'queue-1' queue. PlacementGroups are not supported across Availability zones. Either remove the PlacementGroup configuration to use multiple subnets on the queue or specify only one subnet to use a PlacementGroup for compute resources."
    },
    {
      "level": "ERROR",
      "type": "EfsIdValidator",
      "message": "Cluster has subnets located in different availability zones but EFS (fs-0f1158ade79354809) uses OneZone EFS storage class which works within a single Availability Zone. Please use subnets located in one Availability Zone or use a standard storage class EFS."
    },
    {
      "level": "INFO",
      "type": "MultiAzRootVolumeValidator",
      "message": "Your configuration for Queues 'queue-1' includes multiple subnets different from where HeadNode is located. Accessing a shared storage from different AZs can lead to increased storage network latency and inter-AZ data transfer costs."
    }
  ],
  "message": "Invalid cluster configuration."
}
ヘッドノードはマルチ AZ 非対応
ジョブスケジュラーのヘッドノードはマルチ AZ 構成非対応であり、コンピュートノードのみがマルチ AZ 対応です。
必ずしもマルチ AZ にする必要はない
MPI を利用してコンピュートノード上のメモリ間でデータ転送が頻繁に行われる場合ですとレイテンシーが悪くなるため同一 AZ に比べると不利です。仮に同一 AZ でコンピュートノードが起動してきもてプレイスメントグループを有効化できない仕様のためなおさら不利になります。
実際にジョブをサブミットしたところ同じ AZ で複数台起動しました。プレイスメントグループ(クラスタープレイスメント)が有効ではないためマルチ AZ 指定していない従来のキューと比べるとコンピュートノード間のレイテンシーは劣ります。
スポット単価優先の設定にしていたため同一 AZ で起動してきたのかと思ったのですが価格は同じでした。
FSx for Lustre の様なシングル AZ にしか ENI が作成されないストレージを利用する場合も同様です。レイテンシーが悪くなります。また AZ またぎで ENI(= FSx for Lustre)へアクセスする場合はデータ転送量で課金が発生することを認識しておいた方がよいです。
おわりに
プレイスメントグループについては ParallelCluster でプレイスメントグループを有効化すると自動的にクラスタープレイスメントグループが設定されます。複数 AZ 指定でプレイスメントグループ使えないのは仕様ですのでクラスターのコンフィグで無効化しておく必要がありました。
コンピュートノードだけではなくヘッドノードがマルチ AZ 対応になってくれると嬉しいので今後のアップデートに期待しています。















