AWS ParallelCluster 3.6.0 で追加されたコンピュートノードの詳細モニタリング有効化を確認してみた

2023.06.04

AWS ParallelCluster 3.6.0 で追加された新機能を個別に確認します。本ブログではコンピュートノードに対して詳細モニタリングを有効化できるようになったアップデートを確認します。

確認結果

  • 詳細モニタリングを有効化すると 1 分単位でコンピュートノードのメトリクスを取得
    • 通常(Basic monitoring)は 5 分間隔でメトリクスを取得
    • 取得できるメトリクスの一覧はリンク参照
    • 詳細モニタリング利用によりカスタムメトリクスが増えるため CloudWatch 利用費は高くなる
    • 詳細はリンク参照
  • クラスターのコンフィグは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 分単位でコンピュートノードのメトリクスを取得
    • 通常(Basic monitoring)は 5 分間隔でメトリクスを取得
    • 取得できるメトリクスの一覧はリンク参照
    • 詳細モニタリング利用によりカスタムメトリクスが増えるため CloudWatch 利用費は高くなる
    • 詳細はリンク参照
  • コンフィグで未指定時のデフォルト動作は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 分単位でコンピュートノードのメトリクスを取得
    • 通常(Basic monitoring)は 5 分間隔でメトリクスを取得
    • 取得できるメトリクスの一覧はリンク参照
    • 詳細モニタリング利用によりカスタムメトリクスが増えるため CloudWatch 利用費は高くなる
    • 詳細はリンク参照
  • クラスターのコンフィグは1行追加するだけで設定可能
  • コンフィグで設定未指定時のデフォルト動作は詳細モニタリング無効
  • クラスター作成後、有効化・無効化の設定変更は可能

おわりに

地味なアップデートですがコンピュートノードの最適化のときには役に立つので良いアップデートでした。従来であれば簡単な方法でもカスタムスクリプトで起動してきたコンピュートノードのインスタンス ID を引いて、AWS CLI から詳細モニタリングを有効化するが必要になるはずです。コンピュートノードの IAM ロールに EC2 設定変更の権限を与えないといけなかったりとなかなか手間になりますね。手間なのでやったことはありませんでした。