この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
クラスターのモニタリング
ParallelClusterのヘッドノード、コンピュートノードのモニタリング設定します。
- AWS ParallelClusterはAWSがサポートする、HPCクラスターの管理ツールです。
- 各ノードにCloudWatchAgentを利用してメモリ使用率など取得メトリクスを追加します。
検証環境
項目 | 値 |
---|---|
ParallelCluster | 2.10.0 |
OS | Ubuntu 18.04 LTS |
AMI | aws-parallelcluster-2.10.0-ubuntu-1804-lts-hvm-arm64-202011172100 |
設定手順
下記が各ノードのメトリクス取得までの流れです。
- 各ノード起動時にスクリプトを実行する
- スクリプトでパラメータストアから設定ファイルを取得しCloudWatchAgentに反映させる
- CloudWatchAgentが追加のメトリクスをPutする
これを実現するためにParallelClusterの設定作業は下記になります。
- パラメータストアに設定ファイルを設置
- S3バケットに起動時実行用のスクリプトを配置
- 各ノードが起動時にS3バケット上のスクリプトを実行する
モニタリング内容の設定
AWS Systems ManagerのパラメータストアにCloudWatchAgentの追加設定ファイルを準備します。
pcluster-cloudwatch-config
の名前で作成しました。メモリ使用率、ディスクI/O取得の設定を値に登録してします。
パラメータストア値の内容
{
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time",
"write_bytes",
"read_bytes",
"writes",
"reads"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
クラスター起動時の設定
ParallelClusterのPostinstall機能を利用します。各ノード起動時パラメータストアに保存したテキスト(設定ファイル)を読み取ります。設定ファイルをCloudWatch Agentに反映させるスクリプトを準備します。
スクリプトファイル作成
amazon-cloudwatch-agent-ctlコマンドでパラメータストアに保存した設定ファイルを読み込む内容です。
ssm:pcluster-cloudwatch-config
の部分はパラメータストアで作成した名前を入力します。
postinstall.sh
#!/usr/bin/env bash
# Add config to CloudWatch Agent
amazon-cloudwatch-agent-ctl -a append-config -m ec2 -s -c ssm:pcluster-cloudwatch-config
S3バケット作成
スクリプトファイルはS3バケットに保存します。適当なバケット作成します。スクリプトファイルをアップロードします。
バケット作成。
ファイルをアップロード。
クラスター設定
CloudWatchAgentの設定ファイル追加で必要な箇所は下記です。
- S3バケットへ読み取りアクセスのための設定
- スクリプトファイルの実行パスの設定
- パラメータストアに読み取りアクセスのためのポリシー追加
s3_read_resource = arn:aws:s3:::pcluster-postinsall/* # pcluster-postinstallは任意のS3バケット名を指定
post_install = s3://pcluster-postinsall/postinstall.sh # pcluster-postinsall/postinstall.shは任意のスクリプトファイルのパスを指定
additional_iam_policies = arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess
クラスター設定ファイル全文
検証時の設定ファイル内容です。下記の項目は環境に依存します。
- aws_region_name
- key_name
- vpc_id
- master_subnet_id
- compute_subnet_id
multi-cluster
[aws]
aws_region_name = us-east-1
[global]
cluster_template = default
update_check = true
sanity_check = true
[aliases]
ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS}
[cluster default]
key_name = sandbox-key-useast1
base_os = ubuntu1804
scheduler = slurm
vpc_settings = custom
s3_read_resource = arn:aws:s3:::pcluster-postinsall/*
post_install = s3://pcluster-postinsall/postinstall.sh
additional_iam_policies = arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess
# Instance Type
master_instance_type = c6g.large
# Queue
queue_settings = 2x, 16x
# Tag
tags = { "Name" : "MultiQueue-Cluster" }
# --- VPC Setting ---
[vpc custom]
vpc_id = vpc-07edfc27679c9ca80
master_subnet_id = subnet-0ab2754446b2f87a4
compute_subnet_id = subnet-0ab2754446b2f87a4
use_public_ips = true
# --- EBS Setting ---
[ebs external_ebs]
shared_dir = /shared
volume_type = gp2
volume_size = 20
# --- ComputeNode Setting ---
[queue 2x]
compute_resource_settings = 2x
placement_group = DYNAMIC
compute_type = spot
[queue 16x]
compute_resource_settings = 16x
placement_group = DYNAMIC
compute_type = spot
[compute_resource 2x]
instance_type = c6g.2xlarge
max_count = 32
[compute_resource 16x]
instance_type = c6g.16xlarge
max_count = 8
クラスター作成
pcluster createコマンドで任意の管理名称を設定し、設定ファイルを引数に指定します。
> pcluster create multi-cluster -c multi-cluster
CloudWatchからメトリクス確認
クラスターが作成されヘッドノード(Name: MultiQueue-Cluster)と、ジョブを投げてコンピューノード(Name: Compute)を起動させました。
メモリ使用率を確認できます。メモリ使用率は標準メトリクスでは取得できないためCloudWatchAgentに追加設定が必要になりました。
おわりに
ヘッドノード、コンピューノードのサイジング時に活用できるのではないでしょうか。CloudWatchAgentの設定はParallelClusterに依存するわけではありません。今回のメモリ使用率、ディスクI/O以外も設定可能です。 Postinstallの処理はヘッドノードだとクラスター構築時の初回のみ、コンピューノードは起動後に終了(Terminate)されるため毎回インスタンス起動時に走ります。
以上、網走の大村@コンサル部でした。