0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon SageMaker HyperpodのMonitoring – Amazon Managed Grafana

Last updated at Posted at 2025-03-11

はじめに – HyperPodのモニタリングの重要性

AWS SageMaker HyperPodは、機械学習やHPCワークロードの大規模な並列処理を可能にする強力なクラスター環境です。しかし、最適なパフォーマンスを維持し、リソースのボトルネックを解消するためには、適切なモニタリングが不可欠です。

モニタリングを行うことで、以下のような重要なポイントを把握できます。

  • Compute Nodeのリソース使用率(CPU、メモリ、GPU)
  • ジョブの状態や実行時間(Slurmジョブ管理)
  • FSx for Lustreのストレージパフォーマンス(スループット、IOPS)
  • NVIDIA DCGM Exporter Dashboard による GPU 使用率の可視化
  • EFA Metrics Dashboard による Elastic Fabric Adapter (EFA) のネットワークパフォーマンス監視

AWSでは、Amazon CloudWatch、Amazon Managed Prometheus、Amazon Managed Grafanaを活用し、HyperPod環境をリアルタイムで監視・可視化する方法を提供しています。本記事では、特にAmazon Managed Grafanaを用いた効果的なモニタリング手法について解説します。

Amazon Managed Grafanaとは?

Amazon Managed Grafanaは、AWSが提供するフルマネージドなGrafanaサービスであり、インフラのセットアップや管理不要で、高度な可視化とモニタリングを実現できます。Grafanaは、オープンソースのダッシュボードツールであり、AWS環境のメトリクスやログを直感的に可視化するのに適しています。

Amazon Managed Grafanaの特徴

  • AWSネイティブ統合:CloudWatch、Amazon Managed Prometheus、Amazon OpenSearchなどとシームレスに連携
  • 柔軟なデータソース対応:Prometheus、Loki、InfluxDB、MySQLなど、様々なデータソースを統合可能
  • セキュアなアクセス管理:AWS IAM Identity Center(旧AWS SSO)を活用した認証・アクセス制御

HyperPod環境では、NVIDIA DCGM Exporterを活用したGPUモニタリングや、EFA Metrics Dashboardを使ったネットワーク監視などにGrafanaを活用できます。本記事では、これらのダッシュボード構築方法について詳しく解説していきます。

Hyperpodのモニタリング環境構築の前に確認すべき前提条件

HyperPodのモニタリング環境構築

Image

構成図:SageMaker HyperPod cluster resources monitoring

HyperPodのモニタリング環境は、Amazon Managed Grafana、Amazon Managed Service for Prometheus、SLURM Exporter、DCGM Exporter、EFA Node Exporterを組み合わせて構築します。

  1. データ収集:
    • SLURM Exporter (8080番ポート) を使用し、ジョブのスケジューリング状況を取得
    • DCGM Exporter (9400番ポート) でGPUの使用率・メモリ・温度を監視
    • EFA Node Exporter (9100番ポート) によりElastic Fabric Adapter (EFA) のネットワークパフォーマンスを取得
  2. データの統合と可視化:
    • Prometheus にデータを保存し、Grafanaでリアルタイム監視
    • IAM Identity Center を活用し、エンジニアや管理者がセキュアにアクセス

この構成により、HyperPodのリソース監視を効率的に行い、最適なパフォーマンス管理を実現します。

これから環境設定について説明しますが、本記事ではAWS Organizationsを有効化している環境を前提とし、2つのアカウントを使用して解説します。
言語の混乱を避けるため、AWSの標準的なアカウント名称を使用します。

  • Management Account
  • Member Account

1. HyperPodのAWS Infra環境構築

※Member Account上で実行します。

構築方法については、こちらのTerraformを用いた環境のコード化で詳しく解説しているため、本記事では詳細な説明を省略します。

本記事で扱う Infra環境は、以下の構成図においてSSMとHyperPodを除いた部分を指します。
Image

2. Amazon Managed Grafanaの構築

※Member Account上で実行します。

Amazon Managed Grafanaは、AWSが提供するHyperPod用のCloudFormationを活用して構築できます。
AWS GitHub Cluster-observability.yaml

Image

Lifecycle Script内のモニタリングスクリプトでは、PrometheusとGrafanaのARNを参照する部分が含まれているため、スムーズに環境を構築するには、このCloudFormationを利用するのが適切でしょう。
また、HyperPodクラスターと同じRegionでの利用が推奨されています。

なお、CloudFormationを適用すると、以下のリソースが自動的に作成されます。

  • Amazon Managed Grafana
  • Amazon Managed Grafana用のIAM Role
  • Amazon Managed Service for Prometheus
Image Image

3. Amazon Managed Grafana用のIAM Role修正

※Member Account上で実行します。

FSx for LustreのメトリクスをCloudWatchから取得するため、GrafanaのIAMロールに「CloudWatchReadOnlyAccess」Policyを手動でアタッチしてください。
ちなみに、この設定はCloudFormationには含まれていないため、別途対応が必要です。

Image

4. Lifecycle scriptsの設定

4-1.provisioning_parameters.json設定

まず、Lifecycle Scriptsの準備やprovisioning_parameters.jsonの設定については、別のブログ記事で詳しく解説しているため、そちらを参考にしてください。
provisioning_parameters.json設定

4-2. utils/install_prometheus.shの修正

既存のLifecycle Scriptsの/utils/install_prometheus.shではPrometheusへのログ送信が行われない状態だったため、以下の prometheus.service部分だけを修正してください。
原因はAgent Modeが有効になっていなかったことによるもので、その設定が適用されるように修正しました。

この修正の詳細については、別のブログ記事で解説します。

install_prometheus.shの修正例

sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[Unit]
Description=Prometheus Exporter

[Service]
Environment=PATH=/opt/slurm/bin:\$PATH
ExecStart=/usr/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.agent.path=/opt/prometheus/data-agent --agent
Restart=on-failure
RestartSec=15
Type=simple

[Install]
WantedBy=multi-user.target
EOF

4-3.config.pyの修正

enable_observabilitytrueに設定します。

class Config:
# 省略
enable_observability = True
# 省略

すると、Lifecycle Scriptsの実行時にinstall_prometheus.shが適用されるようになります。

 # Install metric exporting software and Prometheus for observability
        if Config.enable_observability:
            if node_type == SlurmNodeType.COMPUTE_NODE:
                ExecuteBashScript("./utils/install_docker.sh").run()
                ExecuteBashScript("./utils/install_dcgm_exporter.sh").run()
                ExecuteBashScript("./utils/install_efa_node_exporter.sh").run()

            if node_type == SlurmNodeType.HEAD_NODE:
                wait_for_scontrol()
                ExecuteBashScript("./utils/install_docker.sh").run()
                ExecuteBashScript("./utils/install_slurm_exporter.sh").run()
                ExecuteBashScript("./utils/install_head_node_exporter.sh").run()
                ExecuteBashScript("./utils/install_prometheus.sh").run()

4-4. Lifecycle ScriptsをS3にUploadする

HyperPodクラスターを起動する際、Lifecycle Scriptsの保存先であるS3を参照するため、事前にS3へUploadしておきます。


aws s3 sync "lifecycle_files/" s3://{your_lifecycle_bucket_name}/lifecycle-script-directory/src

5. HyperPodクラスター構築

前提条件のセクションで説明した通り、本記事ではクラスター構築に必要なJSONファイルの作成方法や、Head Nodeへのアクセス方法の詳細は省略します。
それでは、HyperPodクラスターを立ち上げます。


aws sagemaker create-cluster --cli-input-json file://create_cluster.json

クラスター起動後、Head Nodeにアクセスし、以下のsinfoコマンドでノードの状態を確認します。
今回のノード構成は以下の通りです。

  • Head Node: ml.m5.large × 1台
  • Compute Node: ml.g5.xlarge × 2台
ubuntu@ip-10-1-36-89:~$ sinfo
PARTITION   AVAIL  TIMELIMIT  NODES  STATE NODELIST
dev*           up   infinite      2   idle ip-10-1-5-52,ip-10-1-23-154
partition-1    up   infinite      2   idle ip-10-1-5-52,ip-10-1-23-154

クラスター構築時にAmazon Managed Grafanaの設定Lifecycle Scriptsの適用を行ったため、
HyperPodクラスターが起動後、Prometheusが正しく動作しているかを確認してください。

Prometheusの正常稼働active (running)を確認するには、以下のコマンドを実行します。


ubuntu@ip-10-1-36-89:~$ sudo systemctl status prometheus
● prometheus.service - Prometheus Exporter
     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2025-03-11 01:06:36 UTC; 28min ago
   Main PID: 9472 (prometheus)
      Tasks: 8 (limit: 9150)
     Memory: 31.0M
     CGroup: /system.slice/prometheus.service
             └─9472 /usr/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.agent.path=/opt/prometheus/data-agent --agent

以下のコマンドを実行し、Prometheusの設定ファイルが正しく適用されているかを検証します。
実行結果には、各ノードのターゲット情報や、Prometheus WorkspaceのRemote Write URLが含まれていることを確認してください。

これにより、HyperPodのメトリクスが正しくPrometheusに蓄積され、Amazon Managed Grafanaを通じて可視化できる状態になっていることを確認できます。


ubuntu@ip-10-1-36-89:~$ cat /etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  scrape_timeout: 15s

scrape_configs:
  - job_name: 'head_node_metrics'
    static_configs:
      - targets:
          - 'localhost:9100'
  - job_name: 'slurm_exporter'
    static_configs:
      - targets:
          - 'localhost:8080'
  - job_name: 'dcgm_exporter'
    static_configs:
      - targets:
          - '10.1.5.52:9400'
          - '10.1.23.154:9400'
  - job_name: 'efa_node_exporter'
    static_configs:
      - targets:
          - '10.1.5.52:9100'
          - '10.1.23.154:9100'

remote_write:
  - url: https://aps-workspaces.ap-northeast-1.amazonaws.com/workspaces/ws-bc3adc55-a4e9-45b7-8199-dbcd283bd545/api/v1/remote_write
    queue_config:
      max_samples_per_send: 1000
      max_shards: 200
      capacity: 2500
    sigv4:
      region: ap-northeast-1

この設定により、GrafanaのダッシュボードでHyperPodのメトリクスが可視化され、適切なモニタリングが可能になります。

6. IAM Identity CenterのUser作成

※Management Account上で実行します。

Amazon Managed Grafanaにログインするため、AWS IAM Identity Centerにユーザーを作成してください。
Add users to your Identity Center directory

Image

7. Amazon Managed GrafanaにUserを追加

※Member Account上で実行します。

先ほどAWS IAM Identity CenterでGrafanaへのログイン用ユーザーを作成したため、次にGrafanaとの紐付け作業を行います。

7-1. Grafanaにユーザーを割り当てる

  • Amazon Managed Grafanaの詳細ページ に移動し、画面下部にあるAuthenticationタブを開きます。
  • Assign new user or groupをクリックします。
Image

7-2. ユーザーの選択と権限設定

  • Assign new user or groupのページに移動したら、Identity Centerで作成したユーザーを選択します。
  • Assign new user or groupをクリックして次のステップに進みます。
Image

7-3. ユーザーの管理者権限の付与

  • 該当するユーザーのUser TypeAdminに変更します。
  • 右側のActionリストからMake adminをクリックします。
Image

7-4. 紐付けの確認

  • ユーザーの割り当てが完了すると、Enableに変更されていることを確認してください。
  • これで、Identity Centerのユーザーが Grafanaに管理者としてアクセスできるようになります。
Image

7-5. Grafanaのデータソースを確認

  • Data Sourcesタブを開きます。
  • Amazon Managed Service for PrometheusAmazon CloudWatchが正しくアタッチされていることを確認してください。

これらのデータソースは、Grafana専用のCloudFormationテンプレートによって自動的に設定されます。
もし正しく設定されていない場合は、CloudFormationの実行状況を確認し、必要に応じて手動で追加してください。

Image

8. Amazon Managed Grafanaにアクセス

※Member Account上で実行します。

Grafanaの設定が完了したので、Grafana WorkspaceのURL にアクセスして、ログインを試してみましょう。

Grafana Workspace URLに移動します。
Image

Sign in with AWS IAM Identity Centerのページが表示されるので、先ほど作成したIAM Identity Centerのユーザーでログインしてください。
Image

正しくログインできると、Grafanaの管理画面が表示されます。
Image

これで、Grafanaのセットアップが完了し、ダッシュボードを利用できる状態になりました。

9. Grafanaダッシュボードの作成

HyperPodのモニタリングを行うために、まずData Sourcesを設定し、ログをGrafanaに取り込む必要があります。

HyperPod環境では、以下の4つのメトリクスが Prometheusに送信されます。

  • Slurm: ジョブスケジューリングの状況を監視
  • Node Exporter Full: システムリソース(CPU、メモリ、ディスクなどを監視
  • NVIDIA DCGM Exporter: GPUの利用状況を監視
  • EFA Metrics: Elastic Fabric Adapter (EFA) のネットワークパフォーマンスを監視
    • GPU Instance Typeの最上位Specのみが取得される仕様(2025/3/11時点)

また、FSx for LustreのメトリクスはCloudWatchを使用してダッシュボードを作成します。

FSx for LustreのGrafanaダッシュボード設定時の注意点

FSx for LustreのメトリクスをGrafanaで可視化する際は、以下の2点に注意してください。

  • Grafana Data SourceはCloudWatch
    • FSxのメトリクスは PrometheusではなくCloudWatchから取得します。
  • AWS公式のGrafana Dashboard URLの誤り(2025/3/11時点)

今回は、作成したばかりのHyperPodを例に ノードの状態を可視化するNode Exporter Fullを構築します。

9-1. Data Sourcesの設定

  • Grafanaの左サイドメニューからAppsAWS Data Sourcesに移動します。
  • Amazon Managed Service for Prometheusを選択します。
Image
  • Data Sourcesの詳細画面に移動したら、RegionsをPrometheusが構築されているリージョン(例: Tokyo)に設定します。
  • 表示されたPrometheusのWorkspaceを選択し、Add 1 data sourceをクリックします。
Image
  • これで、Prometheusがデータソースとして登録されました。
Image

9-2. Dashboardの作成

  • 左サイドメニューのData Sourcesに移動し、右上のNewImportをクリックします。
Image
https://grafana.com/grafana/dashboards/1860-node-exporter-full/
Image
  • Import設定画面に移動したら、下部のPrometheus Data Sourceを選択し、Importをクリックします。
Image
  • これで、Node Exporter Full Dashboardが生成され、ノードの状態をリアルタイムで監視できるようになります。
Image Image
  • Dashboard上で、Head NodeとCompute Nodeを選択可能になっており、Compute Nodeについては各ノードのIPを指定して個別に表示することもできます。
Image Image

これで、Node Exporter Full Dashboardの作成が完了しました。

最後に

Amazon SageMaker HyperPodにAmazon Managed Grafanaを組み合わせたモニタリング環境を構築し、実際に運用してみることで、その有用性と課題が明確になりました。

今回は、Compute Nodeのリソース監視を中心に構築しましたが、リアルタイムでのリソース可視化やメトリクスの蓄積が可能になり、運用管理の効率化に大きく貢献することを実感しました。

特に、以下のようなメリットを得ることができました。

  • HyperPodのリソース状況を一目で把握できる
  • AWS Consoleを活用することで、監視システムの運用負担を軽減できる

このモニタリング環境を活用することで、HyperPodの安定運用がさらに向上し、パフォーマンスの最適化や障害対応の迅速化にもつながることが分かりました。

以上、「Amazon SageMaker HyperpodのMonitoring – Amazon Managed Grafana」に関する記事でした。ご覧いただき、ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?