AWS ParallelCluster 3.6.0 で追加された新機能を個別に確認します。本ブログではコンピュートノードに対して詳細モニタリングを有効化できるようになったアップデートを確認します。
確認結果
- 詳細モニタリングを有効化すると 1 分単位でコンピュートノードのメトリクスを取得
- クラスターのコンフィグは1行追加するだけで設定可能
- コンフィグで設定未指定時のデフォルト動作は詳細モニタリング無効
- クラスター作成後、有効化・無効化の設定変更は可能
Monitoring:
Logs:
CloudWatch:
Enabled: true
DeletionPolicy: "Delete"
Dashboards:
CloudWatch:
Enabled: true
DetailedMonitoring: true
検証環境
- AWS ParallelCluster のバージョンは
3.6.0
を使用 - OS は
RHEL8
を使用
検証用に構築したクラスターのコンフィグを参考までに載せておきます。
折りたたみ
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
詳細モニタリングを有効化
コンピュートノードのインスタンスに対して詳細モニタリングを有効化できるDetailedMonitoring
が追加されました。
ユーザーガイド(Monitoring section - AWS ParallelCluster)を参考にDetailedMonitoring
の要点をまとめます。
- 1 分単位でコンピュートノードのメトリクスを取得
- コンフィグで未指定時のデフォルト動作は
false
となり、詳細モニタリングは無効化 - クラスター作成後、有効化・無効化の設定変更は可能
クラスターコンフィグの指定方法
Monitoring
セクション内でDetailedMonitoring: true
と記述するだけです。
Monitoring:
Logs:
CloudWatch:
Enabled: true
DeletionPolicy: "Delete"
Dashboards:
CloudWatch:
Enabled: true
DetailedMonitoring: true
クラスター(EC2)の設定値を確認
ヘッドノードと、コンピュートノードの詳細モニタリングの設定値を確認します。
コンピュートノード
詳細モニタリングが有効化されています。ジョブを投げて起動させたコンピュートノードの設定値を確認しました。
ヘッドノード
詳細モニタリングは有効化されていません。ヘッドノードは設定の対象外なので想定通りです。
ユースケース
ワークロードに応じたコンピュートノードの最適化(インスタンスタイプ・サイズの選定)のために詳細モニタリングは有効です。とくに CPU 使用率は 1 分単位で確認できるようになるのは利用価値が高いです。最適化後は詳細モニタリングを無効に戻すことで不必要なコストも発生しません。
ただし、コンピュートノードのメモリ使用率は CloudWatch Agent を導入して別途カスタムメトリクスを取得しないとできないです。メモリ量も最適化しようと思うと少し手間になりますね。
補足
ヘッドノードはメモリ使用率をデフォルトで取得してくれます。
コンピュートノードのメトリクス一覧
参考までにc6i.large
で取得できていたメトリクス一覧です。
まとめ
ParallelCluster 3.6.0 で追加された詳細モニタリングの考慮事項です。
- 1 分単位でコンピュートノードのメトリクスを取得
- クラスターのコンフィグは1行追加するだけで設定可能
- コンフィグで設定未指定時のデフォルト動作は詳細モニタリング無効
- クラスター作成後、有効化・無効化の設定変更は可能
おわりに
地味なアップデートですがコンピュートノードの最適化のときには役に立つので良いアップデートでした。従来であれば簡単な方法でもカスタムスクリプトで起動してきたコンピュートノードのインスタンス ID を引いて、AWS CLI から詳細モニタリングを有効化するが必要になるはずです。コンピュートノードの IAM ロールに EC2 設定変更の権限を与えないといけなかったりとなかなか手間になりますね。手間なのでやったことはありませんでした。