HPC インスタンスタイプに AWS が開発する Arm プロセッサー「Graviton 3E」を搭載した新タイプ Hpc7g インスタンスの一般提供がはじまりました。
米国東部(バージニア北部)リージョンのみで利用可能です。
Hpc7g インスタンス、Graviton3E プロセッサを調べる機会がありましたので紹介します。
Hpc インスタンスタイプの歴史
AMD のプロセッサーを搭載した Hpc6a インスタンス、Intel のプロセッサーを搭載した Hpc6id インスタンスに次いでこの度 AWS の Arm プロセッサーを搭載した Hpc7g が発表されました。
Hpc7g の特徴としては以下の点が挙げられます。
- Graviton 3E プロセッサー搭載
- Hpc インスタンスタイプとしては初のインスタンスサイズ3種類提供、だけど料金単価は同じ
画像引用: AWS Graviton3E プロセッサ
Intel / AMD の Hpc インスタンスは、2 vCPU = 1 物理コア(Simultaneous Multi-Threading 有効)ではなく 1vCPU = 1 物理コアで提供されるのも特徴でした。
一方 Graviton インスタンスはもともと物理コア(1 vCPU = 1 物理コア)で提供されています。Hpc インスタンスでも同様ですので Graviton インスタンスの特徴がそのまま引き継がれています。
Graviton 3E プロセッサー
2022年の re:Invent で Graviton 3E のお披露目がありました。お披露目から半年経ち Graviton 3E を搭載したインスタンスとして、Hpc7g と C7gn が同日に提供開始となっています。
余談になりますが、あの有名なスパコンの富岳は富士通が設計した Arm アーキテクチャの A64FX プロセッサーが採用されています。その富岳で動作するアプリケーションを AWS 上でも動作させることを目指す Virtual Fugaku プロジェクトが動いています。AWS 上では同じく Arm アーキテクチャの Graviton 3/3E を搭載したインスタンスを使うことが想定されています。
『富岳』のクラウド化」と「クラウドの『富岳』化」を目指しています。前者は、「富岳」にクラウド基盤としての機能やインターフェースを追加し、クラウドのアプリケーションサービスを「富岳」上に実現したり、他のクラウドと連携して利用しやすくするもので、既に試行的に取り組んでいます。 引用: クラウドの「富岳」化(Virtual Fugaku)を目指します | 理化学研究所 計算科学研究センター(R-CCS)
Virtual Fugaku は今回提供開始された Hpc7g や c7gn インスタンスか、今後発表される新しいインスタンスタイプで動くのではないかと思われます。ワクワクする取り組みですね。
Graviton 性能比較
従来の Graviton プロセッサーと性能を比較した情報です。
- Graviton 3 と比べるとベクトル命令の処理性能が 35% 向上
- Graviton 2 と比べると、メモリ帯域幅、計算性能が軒並み向上
画像引用: 新しい Amazon EC2 C7gn インスタンス: Graviton3E プロセッサと最大 200 Gbps のネットワーク帯域幅 | Amazon Web Services ブログ
HPC 向けに最適化された Graviton 3 ベースのプロセッサーなので、浮動小数点演算、ベクトル演算に最適化されています。
画像引用: AWS-Black-Belt_2023_Amazon-Graviton_0430_v1.pdf
3種類のインスタンスサイズ
Intel / AMD の Hpc インスタンスは 1 種類のサイズ提供のみでした。Graviton の Hpc インスタンスでは、はじめて 3 種類のサイズが提供されています。
インスタンスサイズの違いは物理コア数だけですべて同じ料金単価という不思議なラインナップです。料金単価は Hpc7g.4xlarge, 8xlarge, 16xlarge すべて同一の $1.6832/時間です。※2023/6/30 現在
画像引用: Instance sizes in the Amazon EC2 Hpc7 family – a different experience | AWS HPC Blog
どうして?
インスタンスサイズのラインナップについては以下のブログで解説がされています。
- アプリケーションのライセンスコスト最適化のために、CPU コア数をカスタマイズしたかった
- メモリー集約型のワークロードのために、コア毎に十分な RAM とメモリー帯域幅を提供
CPU コア数依存のライセンス対策としてコストを削減するために、16 コア、32 コア、64 コアの提供ラインナップなのはユーザーにとってはありがたいですね。
メモリー集約型のワークロードについては、コア数が少ないほどメモリー帯域幅を広く利用できるため高パフォーマンスを期待できます。
実際に OpenFOAM のパフォーマンスの例が紹介されていました。緑のラインが 16 コアを過ぎたあたりから性能が横ばいになっています。これはメモリー帯域幅の制限によるものとのことです。つまり、コア数が増えてもメモリー帯域幅がボトルネックになり頭打ちになってしまうと。
画像引用: Instance sizes in the Amazon EC2 Hpc7 family – a different experience | AWS HPC Blog
起動してみる
Ubuntu 22.04 LTS の AMI(ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-arm64-server-20230516)を利用して、Hpc7g.16xlarge を起動します。
インスタンスタイプの提供状況下調べ
Hpc インスタンスは経験上、提供されているリージョンも限定的でかつ、インスタンスを起動できる AZ も少ないため先に起動可能な AZ を確認します。
ゾーン ID 確認
AZ のゾーン ID はuse1-az6
のみで提供されていました。
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region us-east-1 --filters Name=instance-type,Values=hpc7g.4xlarge --output table
---------------------------------------------------------
| DescribeInstanceTypeOfferings |
+-------------------------------------------------------+
|| InstanceTypeOfferings ||
|+----------------+-----------+------------------------+|
|| InstanceType | Location | LocationType ||
|+----------------+-----------+------------------------+|
|| hpc7g.4xlarge | use1-az6 | availability-zone-id ||
|+----------------+-----------+------------------------+|
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region us-east-1 --filters Name=instance-type,Values=hpc7g.8xlarge --output table
---------------------------------------------------------
| DescribeInstanceTypeOfferings |
+-------------------------------------------------------+
|| InstanceTypeOfferings ||
|+----------------+-----------+------------------------+|
|| InstanceType | Location | LocationType ||
|+----------------+-----------+------------------------+|
|| hpc7g.8xlarge | use1-az6 | availability-zone-id ||
|+----------------+-----------+------------------------+|
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region us-east-1 --filters Name=instance-type,Values=hpc7g.16xlarge --output table
----------------------------------------------------------
| DescribeInstanceTypeOfferings |
+--------------------------------------------------------+
|| InstanceTypeOfferings ||
|+-----------------+-----------+------------------------+|
|| InstanceType | Location | LocationType ||
|+-----------------+-----------+------------------------+|
|| hpc7g.16xlarge | use1-az6 | availability-zone-id ||
|+-----------------+-----------+------------------------+|
ゾーン ID と ゾーンのマッピング確認
ゾーン ID (use1-az6
)とゾーンのマッピングを確認します。私のアカウントではus-east-1d
で起動できることがわかりました。
$ aws ec2 describe-availability-zones --region us-east-1 --query 'AvailabilityZones[*].{ZoneName:ZoneName, ZoneId:ZoneId}' --output table
---------------------------------------
| DescribeAvailabilityZones |
+----------------+--------------------+
| ZoneId | ZoneName |
+----------------+--------------------+
| use1-az1 | us-east-1a |
| use1-az2 | us-east-1b |
| use1-az4 | us-east-1c |
| use1-az6 | us-east-1d |
| use1-az3 | us-east-1e |
| use1-az5 | us-east-1f |
| use1-iah1-az1 | us-east-1-iah-1a |
+----------------+--------------------+
スポットインスタンスの提供確認
すべてオンデマンドインスタンスのみの提供でした。他の Hpc インスタンスタイプ同様にスポットインスタンスは提供されていませんでした。
$ aws ec2 describe-instance-types --instance-types hpc7g.4xlarge --region us-east-1 | jq '.InstanceTypes[].SupportedUsageClasses[]'
"on-demand"
$ aws ec2 describe-instance-types --instance-types hpc7g.8xlarge --region us-east-1 | jq '.InstanceTypes[].SupportedUsageClasses[]'
"on-demand"
$ aws ec2 describe-instance-types --instance-types hpc7g.16xlarge --region us-east-1 | jq '.InstanceTypes[].SupportedUsageClasses[]'
"on-demand"
まとめ
私のアカウントではバージニア北部(us-east-1
)のus-east-1d
ゾーンで hpc7g インスタンスをオンデマンド起動できることがわかりました。
Hpc7g のハードウェアスペックを確認してみる
起動した Hpc7g にリモート接続してハードウェアスペックを確認してみます。
CPU 情報は 64 コアの Arm プロセッサーであることを確認できます。
$ lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 64
On-line CPU(s) list: 0-63
Vendor ID: ARM
Model: 1
Thread(s) per core: 1
Core(s) per socket: 64
Socket(s): 1
Stepping: r1p1
BogoMIPS: 2100.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm ssbs paca pacg dcpodp svei8mm svebf16 i8mm bf16 dgh rng
Caches (sum of all):
L1d: 4 MiB (64 instances)
L1i: 4 MiB (64 instances)
L2: 64 MiB (64 instances)
L3: 32 MiB (1 instance)
NUMA:
NUMA node(s): 1
NUMA node0 CPU(s): 0-63
Vulnerabilities:
Itlb multihit: Not affected
L1tf: Not affected
Mds: Not affected
Meltdown: Not affected
Mmio stale data: Not affected
Retbleed: Not affected
Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Spectre v1: Mitigation; __user pointer sanitization
Spectre v2: Mitigation; CSV2, BHB
Srbds: Not affected
Tsx async abort: Not affected
dmidecode
コマンドでメモリー情報を拾えると思ったのですがメモリー側が対応していないのか情報を確認できました。収穫は CPU が AWS Graviton 3E であるとハードウェア情報を拾えたくらいです。
$ sudo dmidecode
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.0.0 present.
Table at 0x7BEA0000.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Amazon EC2
Version: 1.0
Release Date: 11/1/2018
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 64 kB
Characteristics:
PCI is supported
EDD is supported
ACPI is supported
System is a virtual machine
BIOS Revision: 1.0
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: Amazon EC2
Product Name: hpc7g.16xlarge
Version: Not Specified
Serial Number: ec224297-aeb9-92dd-a6b7-9c95813729f8
UUID: ec224297-aeb9-92dd-a6b7-9c95813729f8
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
Manufacturer: Amazon EC2
Product Name: Not Specified
Version: Not Specified
Serial Number: Not Specified
Asset Tag: i-0646df4c2ea0f5b9b
Features: None
Location In Chassis: Not Specified
Chassis Handle: 0x0003
Type: Other
Contained Object Handles: 0
Handle 0x0003, DMI type 3, 21 bytes
Chassis Information
Manufacturer: Amazon EC2
Type: Other
Lock: Not Present
Version: Not Specified
Serial Number: Not Specified
Asset Tag: Amazon EC2
Boot-up State: Safe
Power Supply State: Safe
Thermal State: Safe
Security Status: None
OEM Information: 0x00000000
Height: Unspecified
Number Of Power Cords: 1
Contained Elements: 0
Handle 0x0004, DMI type 4, 42 bytes
Processor Information
Socket Designation: CPU00
Type: Central Processor
Family: ARMv8
Manufacturer: AWS
ID: 01 D4 1F 41 00 00 00 00
Signature: Implementor 0x41, Variant 0x1, Architecture 15, Part 0xd40, Revision 1
Version: AWS Graviton3E
Voltage: Unknown
External Clock: Unknown
Max Speed: 2600 MHz
Current Speed: 2600 MHz
Status: Populated, Enabled
Upgrade: None
L1 Cache Handle: Not Provided
L2 Cache Handle: Not Provided
L3 Cache Handle: Not Provided
Serial Number: AWS Graviton3E
Asset Tag: AWS Graviton3E
Part Number: AWS Graviton3E
Core Count: 64
Core Enabled: 64
Thread Count: 64
Characteristics: None
Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table
/proc/meminfo
からメモリーは 128 GB であることは確認できました。
/proc/meminfo
MemTotal: 129545084 kB
MemFree: 128372028 kB
MemAvailable: 127740812 kB
Buffers: 12660 kB
Cached: 293688 kB
SwapCached: 0 kB
Active: 69088 kB
Inactive: 345784 kB
Active(anon): 888 kB
Inactive(anon): 111320 kB
Active(file): 68200 kB
Inactive(file): 234464 kB
Unevictable: 26192 kB
Mlocked: 26192 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Zswap: 0 kB
Zswapped: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 135176 kB
Mapped: 103176 kB
Shmem: 944 kB
KReclaimable: 48416 kB
Slab: 254128 kB
SReclaimable: 48416 kB
SUnreclaim: 205712 kB
KernelStack: 13616 kB
PageTables: 3852 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 64772540 kB
Committed_AS: 1812000 kB
VmallocTotal: 133143592960 kB
VmallocUsed: 125200 kB
VmallocChunk: 0 kB
Percpu: 32256 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
おわりに
以前、Graviton 2 を使った並列演算の例で OpenFOAM を使用したことがありました。Hpc インスタンスで改めて演算してみたいところです。計算するのは良いのですがブログ栄えするキャプチャとるために ParaView で可視化が苦手で二の足を踏んでしまいます。
参考
- AWS CLIで特定のEC2インスタンスタイプをサポートしているリージョンを確認するスクリプトを作成してみた | DevelopersIO
- アカウント間でアベイラビリティーゾーンをマッピングする | AWS re:Post
- Application deep-dive into the AWS Graviton3E-based Amazon EC2 Hpc7g instance | AWS HPC Blog
- Instance sizes in the Amazon EC2 Hpc7 family – a different experience | AWS HPC Blog
- dmidecodeを使わずにCPUやメモリ、マザーボードのベンダーや型番といった情報を取得する | 俺的備忘録 〜なんかいろいろ〜