この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
第6世代の EC2 インスタンスタイプに NVMe ベースの SSD ブロックレベルインスタンスストレージを搭載したdの付くインスタンスタイプが東京リージョンで利用可能になりました。AWS ParallelCluster のクラスターに組み込んで起動確認してみました。
2022年5月26日から一部リージョンでは利用可能でしたので東京リージョンは4か月遅れの提供となりました。
dの特徴である高速なローカルストレージはインスタンスストアと呼ばれる非永続的なストレージです。
AWS ParalelCluster とインスタンスストア
AWS ParalelCluster でインスタンスストアを持つインスタンスを利用するときは疎結合なHPC ワークロードで単一のコンピュートノードで実行するアプリケーション向きです。
画像引用: サービスアップデート Compute 編:HPC on AWS アップデート - YouTube
ひとつのジョブが多数のインスタンスをまたいで共通のストレージへアクセスが必要な場合ですと、ローカルストレージであるインスタンスストアへの他ノードからのアクセスが問題になります。
密結合 HPC ワークロードでも他のノードと共有しない一時ファイル、中間ファイルを大量にローカルに生成するようなワークロードでしたら有効活用はできるかもしれません。
複数のノードから共通でアクセスするストレージが必要な場合は、ヘッドノードから共有する EBS や、ストレージサービス(EFS、FSx シリーズ)をご利用を検討ください。
クラスター作成準備
c6id
インスタンスがどこの AZ で起動できるか確認しておきましょう。
試しにc6id.large
を検索すると 2AZ での提供でした。large ですと実際にはスペック不足でしょうからコンピュートノードで利用したいインスタンスタイプを指定して確認してください。
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region ap-northeast-1 --filters Name=instance-type,Values=c6id.large
{
"InstanceTypeOfferings": [
{
"InstanceType": "c6id.large",
"LocationType": "availability-zone-id",
"Location": "apne1-az4"
},
{
"InstanceType": "c6id.large",
"LocationType": "availability-zone-id",
"Location": "apne1-az2"
}
]
}
現時点では128vCPU、256GB メモリのc6id.32xlarge
も 2AZ で提供でした。※ 多くのケースでは Hyper-Threading を無効化して計算するため、物理コア換算ですと64core です。
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region ap-northeast-1 --filters Name=instance-type,Values=c6id.32xlarge
{
"InstanceTypeOfferings": [
{
"InstanceType": "c6id.32xlarge",
"LocationType": "availability-zone-id",
"Location": "apne1-az4"
},
{
"InstanceType": "c6id.32xlarge",
"LocationType": "availability-zone-id",
"Location": "apne1-az2"
}
]
}
ゾーン ID のマッピング
Location
で表示されたゾーン IDはap-northeast-1?
でいうとなに?
AWS アカウントごとにマッピングが異なっています。ご自身の AWS アカウントでご確認いただく必要があります。。私の AWS アカウントではap-northeast-1a
と、ap-northeast-1d
でc6id
が提供されていました。
$ aws ec2 describe-availability-zones --region ap-northeast-1
{
"AvailabilityZones": [
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1a",
"ZoneId": "apne1-az4",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1",
"ZoneType": "availability-zone"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1c",
"ZoneId": "apne1-az1",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1",
"ZoneType": "availability-zone"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1d",
"ZoneId": "apne1-az2",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1",
"ZoneType": "availability-zone"
}
]
}
クラスターのコンフィグ作成
c6id.large
をコンピュートノードで起動できるコンフィグを作成しました。こちらのコンフィグからクラスターを作成します。
項目 | 値 |
---|---|
ParallelCluster | 3.2.0 |
OS | Ubuntu 20.04 |
CPU | Intel |
Head Node | t3.micro |
Compute Node | c6id.large |
Simultaneous Multi-Threading | 無効 |
Placement group | 有効 |
Region: ap-northeast-1
Image:
Os: ubuntu2004
Tags:
- Key: Name
Value: UbuntuCluster
# ----------------------------------------------------------------
# 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:
# ------ Debug 1 without Postinstall ------
- Name: debug-1
ComputeResources:
- Name: debug-without-postinstall
InstanceType: t3.micro
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: false
ComputeSettings:
LocalStorage:
RootVolume:
Size: 35
Encrypted: true
VolumeType: gp3
Iops: 3000
Throughput: 125
CapacityType: SPOT
Networking:
SubnetIds:
- subnet-035be95eeaa091603
PlacementGroup:
Enabled: false
Iam:
AdditionalIamPolicies:
- Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
S3Access:
- BucketName: hpc-dev-postinstall-files
EnableWriteAccess: false
# ------ Debug 2 with Postinstall ------
- Name: debug-2
ComputeResources:
- Name: debug-run-postinstall
InstanceType: t3.micro
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: false
ComputeSettings:
LocalStorage:
RootVolume:
Size: 35
Encrypted: true
VolumeType: gp3
Iops: 3000
Throughput: 125
CapacityType: SPOT
Networking:
SubnetIds:
- subnet-035be95eeaa091603
PlacementGroup:
Enabled: false
CustomActions:
OnNodeConfigured:
Script: s3://hpc-dev-postinstall-files/sample-ubuntu-docker/postinstall.sh
Iam:
AdditionalIamPolicies:
- Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
S3Access:
- BucketName: hpc-dev-postinstall-files
EnableWriteAccess: false
# ------ Compute 1 ------
- Name: c6idlarge
ComputeResources:
- Name: c6idlarge
InstanceType: c6id.large
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: true
ComputeSettings:
LocalStorage:
RootVolume:
Size: 35
Encrypted: true
VolumeType: gp3
Iops: 3000
Throughput: 125
CapacityType: SPOT
Networking:
SubnetIds:
- subnet-035be95eeaa091603
PlacementGroup:
Enabled: true
CustomActions:
OnNodeConfigured:
Script: s3://hpc-dev-postinstall-files/sample-ubuntu-docker/postinstall.sh
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
コンピュートノードの確認
ヘッドノードからテストジョブを投げてコンピュートノードを起動させました。
コンピュートノードへログイン
インスタンスストアは/scratch
にマウントされています。ジョブを投げて計算するときは/scratch
を指定して一時ファイルを書き込みしたり、計算前に S3 からデータをダウンロードして保存して利用できます。
計算結果を/scratch
に書き出した場合はコンピュートノード停止ともに/scratch
上のデータは削除されますので注意してください。ジョブの最後で共有ストレージや、S3 へアップロードなどの永続的なストレージへ退避処理を忘れずに。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 34G 18G 16G 53% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 385M 972K 384M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop4 62M 62M 0 100% /snap/core20/1581
/dev/loop5 26M 26M 0 100% /snap/amazon-ssm-agent/5656
/dev/loop3 47M 47M 0 100% /snap/snapd/16292
/dev/nvme0n1p15 105M 5.2M 100M 5% /boot/efi
/dev/loop6 68M 68M 0 100% /snap/lxd/22753
/dev/loop1 56M 56M 0 100% /snap/core18/2538
/dev/loop7 48M 48M 0 100% /snap/snapd/17029
10.0.1.27:/home 34G 18G 17G 52% /home
10.0.1.27:/opt/parallelcluster/shared 34G 18G 17G 52% /opt/parallelcluster/shared
/dev/mapper/vg.01-lv_ephemeral 108G 61M 103G 1% /scratch
10.0.1.27:/opt/intel 34G 18G 17G 52% /opt/intel
fs-0f1158ade79354809.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs-1zone
10.0.1.27:/opt/slurm 34G 18G 17G 52% /opt/slurm
/dev/loop8 64M 64M 0 100% /snap/core20/1623
/dev/loop9 56M 56M 0 100% /snap/core18/2566
tmpfs 385M 0 385M 0% /run/user/0
確認できたこと
c6id
インスタンスの提供 AZ は要確認- AWS ParalelCluster 3.2.0 で
c6id.large
をコンピュートノードとして起動成功 - インスタンスストアは
/scratch
に自動マウントされる
おわりに
第5世代(C5,M5,R5)と比べ第6世代(C6i,M5i,R6i)は15%優れたコストパフォーマンスとなっています。オンデマンド料金は若干値上がりしているのですが、スポットインスタンスなら誤差の範囲ですので、スポットインスタンスの割引率を見て積極的に利用を検討してもよろしいのではないでしょうか。
現時点では C5d も C6id もスポットインスタンス料金は70%割引きでした。時間とともに第5世代の在庫が増えて割引率が良くなり、第6世代は割引率が渋くなる可能性はあります。計算するタイミングでスポットインスタンスの料金を確認してみると、よりコストパフォーマンス良くお使いいただけるかと思います。
スポットインスタンスの料金履歴 - Amazon Elastic Compute Cloud