はじめに – 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のモニタリング環境構築の前に確認すべき前提条件
- AWS Organizationsを活用するための基本知識があること
- AWS Organizationsの設定が完了しており、その配下にMember Accountが存在していること。
- Hyperpodを活用するための基本知識があること
HyperPodのモニタリング環境構築
構成図:SageMaker HyperPod cluster resources monitoring
HyperPodのモニタリング環境は、Amazon Managed Grafana、Amazon Managed Service for Prometheus、SLURM Exporter、DCGM Exporter、EFA Node Exporterを組み合わせて構築します。
-
データ収集:
- SLURM Exporter (8080番ポート) を使用し、ジョブのスケジューリング状況を取得
- DCGM Exporter (9400番ポート) でGPUの使用率・メモリ・温度を監視
- EFA Node Exporter (9100番ポート) によりElastic Fabric Adapter (EFA) のネットワークパフォーマンスを取得
-
データの統合と可視化:
- Prometheus にデータを保存し、Grafanaでリアルタイム監視
- IAM Identity Center を活用し、エンジニアや管理者がセキュアにアクセス
この構成により、HyperPodのリソース監視を効率的に行い、最適なパフォーマンス管理を実現します。
これから環境設定について説明しますが、本記事ではAWS Organizationsを有効化している環境を前提とし、2つのアカウントを使用して解説します。
言語の混乱を避けるため、AWSの標準的なアカウント名称を使用します。
- Management Account
- Member Account
1. HyperPodのAWS Infra環境構築
※Member Account上で実行します。
構築方法については、こちらのTerraformを用いた環境のコード化で詳しく解説しているため、本記事では詳細な説明を省略します。
本記事で扱う Infra環境は、以下の構成図においてSSMとHyperPodを除いた部分を指します。
2. Amazon Managed Grafanaの構築
※Member Account上で実行します。
Amazon Managed Grafanaは、AWSが提供するHyperPod用のCloudFormationを活用して構築できます。
AWS GitHub Cluster-observability.yaml
Lifecycle Script内のモニタリングスクリプトでは、PrometheusとGrafanaのARNを参照する部分が含まれているため、スムーズに環境を構築するには、このCloudFormationを利用するのが適切でしょう。
また、HyperPodクラスターと同じRegionでの利用が推奨されています。
なお、CloudFormationを適用すると、以下のリソースが自動的に作成されます。
- Amazon Managed Grafana
- Amazon Managed Grafana用のIAM Role
- Amazon Managed Service for Prometheus
3. Amazon Managed Grafana用のIAM Role修正
※Member Account上で実行します。
FSx for LustreのメトリクスをCloudWatchから取得するため、GrafanaのIAMロールに「CloudWatchReadOnlyAccess」Policyを手動でアタッチしてください。
ちなみに、この設定はCloudFormationには含まれていないため、別途対応が必要です。
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が有効になっていなかったことによるもので、その設定が適用されるように修正しました。
この修正の詳細については、別のブログ記事で解説します。
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_observability
をtrue
に設定します。
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
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
をクリックします。
7-2. ユーザーの選択と権限設定
-
Assign new user or group
のページに移動したら、Identity Centerで作成したユーザーを選択します。 -
Assign new user or group
をクリックして次のステップに進みます。
7-3. ユーザーの管理者権限の付与
- 該当するユーザーの
User Type
をAdmin
に変更します。 - 右側の
Action
リストからMake admin
をクリックします。
7-4. 紐付けの確認
- ユーザーの割り当てが完了すると、
Enable
に変更されていることを確認してください。 - これで、Identity Centerのユーザーが Grafanaに管理者としてアクセスできるようになります。
7-5. Grafanaのデータソースを確認
-
Data Sources
タブを開きます。 - Amazon Managed Service for PrometheusとAmazon CloudWatchが正しくアタッチされていることを確認してください。
これらのデータソースは、Grafana専用のCloudFormationテンプレートによって自動的に設定されます。
もし正しく設定されていない場合は、CloudFormationの実行状況を確認し、必要に応じて手動で追加してください。
8. Amazon Managed Grafanaにアクセス
※Member Account上で実行します。
Grafanaの設定が完了したので、Grafana WorkspaceのURL にアクセスして、ログインを試してみましょう。
Sign in with AWS IAM Identity Center
のページが表示されるので、先ほど作成したIAM Identity Centerのユーザーでログインしてください。
正しくログインできると、Grafanaの管理画面が表示されます。
これで、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時点)
- 正しいURLは以下を使用してください。
今回は、作成したばかりのHyperPodを例に ノードの状態を可視化するNode Exporter Fullを構築します。
9-1. Data Sourcesの設定
- Grafanaの左サイドメニューから
Apps
→AWS Data Sources
に移動します。 -
Amazon Managed Service for Prometheus
を選択します。
- Data Sourcesの詳細画面に移動したら、
Regions
をPrometheusが構築されているリージョン(例: Tokyo)に設定します。 - 表示されたPrometheusのWorkspaceを選択し、
Add 1 data source
をクリックします。
- これで、Prometheusがデータソースとして登録されました。
9-2. Dashboardの作成
- 左サイドメニューの
Data Sources
に移動し、右上のNew
→Import
をクリックします。
-
Grafanaの公式ダッシュボードをインポートするため、以下の Node ExporterダッシュボードのURLを入力し、
Load
をクリックします。
https://grafana.com/grafana/dashboards/1860-node-exporter-full/
- Import設定画面に移動したら、下部の
Prometheus Data Source
を選択し、Import
をクリックします。
- これで、Node Exporter Full Dashboardが生成され、ノードの状態をリアルタイムで監視できるようになります。
- Dashboard上で、Head NodeとCompute Nodeを選択可能になっており、Compute Nodeについては各ノードのIPを指定して個別に表示することもできます。
これで、Node Exporter Full Dashboardの作成が完了しました。
最後に
Amazon SageMaker HyperPodにAmazon Managed Grafanaを組み合わせたモニタリング環境を構築し、実際に運用してみることで、その有用性と課題が明確になりました。
今回は、Compute Nodeのリソース監視を中心に構築しましたが、リアルタイムでのリソース可視化やメトリクスの蓄積が可能になり、運用管理の効率化に大きく貢献することを実感しました。
特に、以下のようなメリットを得ることができました。
- HyperPodのリソース状況を一目で把握できる
- AWS Consoleを活用することで、監視システムの運用負担を軽減できる
このモニタリング環境を活用することで、HyperPodの安定運用がさらに向上し、パフォーマンスの最適化や障害対応の迅速化にもつながることが分かりました。
以上、「Amazon SageMaker HyperpodのMonitoring – Amazon Managed Grafana」に関する記事でした。ご覧いただき、ありがとうございました!