2022年12月22日に AWS ParallelCluster 3.4.0 がリリースされました。v3.3.0 のリリースから約1か月強と早い間隔でのマイナーアップデートです。
注目のアップデート紹介
個人的な注目ポイントと、アップデートの目玉(っぽいもの)をピックアップしました。アップデート前後の違いについてはリリースノートの情報から把握するのは難しいためわかる範囲で補足します。
アップデート詳細はリリースノートをご確認ください。
コンピュートノードのマルチ AZ 対応
コンピュートノードのサブネット(AZ)を複数指定ができるようになり、マルチ AZ 構成でコンピュートノードを起動できます。 可用性や、耐障害性という意味のマルチ AZ 対応というよりは複数の AZ を利用することで計算リソース(EC2 インスタンス)を確保しやすい構成を取れるようになったアップデートと捉えています。
通常ジョブをサブミットするときにキューを指定します。
今回のアップデートでキューの設定で複数のサブネットを指定ができるようになりました。具体的にはクラスターのコンフィグでSubnetsIds
の箇所で複数のサブミット ID を指定できます。
config抜粋
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つ設定したキューがあるクラスターのサンプルコンフィグです。
config全文
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 対応になってくれると嬉しいので今後のアップデートに期待しています。