HPC 向けに最適化された AWS Graviton 3E 搭載の Hpc7g インスタンスが一般提供開始されました

インスタンスサイズはコア数違いで3種類提供されているけど料金単価は同じです。コア数とメモリ帯域幅に応じたチョイスを!
2023.06.30

HPC インスタンスタイプに AWS が開発する Arm プロセッサー「Graviton 3E」を搭載した新タイプ Hpc7g インスタンスの一般提供がはじまりました。

米国東部(バージニア北部)リージョンのみで利用可能です。

Hpc7g インスタンス、Graviton3E プロセッサを調べる機会がありましたので紹介します。

Hpc インスタンスタイプの歴史

AMD のプロセッサーを搭載した Hpc6a インスタンス、Intel のプロセッサーを搭載した Hpc6id インスタンスに次いでこの度 AWS の Arm プロセッサーを搭載した Hpc7g が発表されました。

Hpc7g の特徴としては以下の点が挙げられます。

  1. Graviton 3E プロセッサー搭載
  2. 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 で可視化が苦手で二の足を踏んでしまいます。

参考