HPC6a インスタンスを AWS ParallelCluster で動かしてハードウェアスペックを調べてみた

2022.01.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

re:Invent 2021 でアナウンスされていたハイパフォーマンスコンピューティング(HPC)向けインスタンスタイプの HPC6a インスタンスが一部リージョンで利用可能になりました。 HPC向けなので AWS Batch 、AWS ParallelCluster で利用する機会がありそうです。

re: Invent 2021 速報記事

本記事は AWS ParallelCluster で HPC6a インスタンスの起動検証を目的としています。計算処理は行ったり、ベンチマークは実施しません。

新インスタンスタイプの動作確認用クラスターの設定方法、注意事項を紹介します。

AWS ParallelCluster の検証結果

2022/1/12 現在の情報です。

  • us-east-2(オハイオ)の1AZのみで起動できます。
    • コンピュートノードを起動するサブネットの選択に注意してください。
    • ap-northeat-1(東京)ではまだ利用できません。
  • スポットインスタンスの起動は非対応です。
  • クラスターの設定でEFA有効化推奨です。

HPC6a インスタンスの特徴

HPC6a シリーズは現在 hpc6a.48xlarge 一種類のみ提供されています。同等の x86 ベースのコンピューティング最適化インスタンスに比べて最大 65% 優れたコストパフォーマンスに優れているようです。

物理96コアが特徴的ですね。AMD Ryzen/EPIC の SMT(Simultaneous Multi-Threading)は無効化されています。SMT は Intel Xeon の HT(Hyper Threading)と同じような仕組みです。

項目 備考
CPU 96(物理コア数) AMD EPYC 7003シリーズプロセッサ
RAM 384 GB DDR4
ネットワーク帯域幅 500 Mbps VPC、S3 以外への帯域幅
ネットワーク帯域幅 25 Gbps VPC、S3 への帯域幅
EFAネットワーク帯域幅 100 Gbps ノード間の帯域幅
Elastic Fabric Adapter デフォルト有効化 Elastic Fabric Adapter - Amazon Elastic Compute Cloud

同じ時期に発表された C7g シリーズが DDR5 積んでいたので HPC6a もかと思ったのですが DDR4 でした。

検証環境

HPC6a 提供リージョンはus-east-2と、GovCloudのみです。(2022/1/12現在)

項目
AWS ParallelCluster 3.0.2
Job Scheduler Slurm
OS Ubuntu 20.04 LTS
CPU AMD
Head Node t3a.micro
Compute Node hpc6a.48xlarge

クラスター作成準備

us-east-2リージョンにクラスターを作成します。

サンプルコンフィグ

気をつけるポイントを以下にまとめました。

  • HPC6a が提供されているリージョンを選択
  • ヘッドノードはAMDのCPUのインスタンスタイプなら起動テストする分には問題ありません
  • コンピュートノードの起動サブネットID(AZ)の選択
  • オンデマンドインスタンスを指定
  • コンピュートノードのEFA有効化

hpc-cluster.yml

Region: us-east-2
Image:
  Os: ubuntu2004
HeadNode:
  InstanceType: t3a.micro
  Networking:
    ElasticIp: false
    SubnetId: subnet-0fdc64a83ef8b3b59
  Ssh:
    KeyName: sandbox-key-useast2
  LocalStorage:
    RootVolume:
      Size: 50
      Encrypted: false
      VolumeType: gp3
      Iops: 3000
      Throughput: 125
  Iam:
    S3Access:
      - BucketName: blog-parallelcluster-postinstall
        EnableWriteAccess: False
    AdditionalIamPolicies:
      - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: hpc-instances
      ComputeResources:
        - Name: hpc6a48xlarge
          InstanceType: hpc6a.48xlarge
          MinCount: 0
          MaxCount: 10
          Efa:
            Enabled: true
      ComputeSettings:
        LocalStorage:
          RootVolume:
            Size: 35
            Encrypted: false
            VolumeType: gp3
            Iops: 3000
            Throughput: 125
      CapacityType: ONDEMAND
      Networking:
        SubnetIds:
          - subnet-0fdc64a83ef8b3b59 # Specific AZ only
        PlacementGroup:
          Enabled: true
      Iam:
        S3Access:
          - BucketName: blog-parallelcluster-postinstall
            KeyName: read_only/
            EnableWriteAccess: False
        AdditionalIamPolicies:
          - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

つまづき

個人的にはいい感じに作ったコンフィグからクラスターを作成してみたところ以下のエラーが出力されました。

  • コンピュートノードのEFA有効化推奨
  • スポットインスタンスは非対応
  • us-east-2リージョンの1AZのみで起動できる
{
  "configurationValidationErrors": [
    {
      "level": "WARNING",
      "type": "EfaValidator",
      "message": "Instance type 'hpc6a.48xlarge' supports EFA, but it is not enabled."
    },
    {
      "level": "ERROR",
      "type": "CapacityTypeValidator",
      "message": "Usage type 'spot' not supported with instance type 'hpc6a.48xlarge'"
    },
    {
      "level": "ERROR",
      "type": "ComputeResourceLaunchTemplateValidator",
      "message": "Your requested instance type (hpc6a.48xlarge) is not supported in the Availability Zone (us-east-2a) of your requested subnet (subnet-06bef5c18e9a5f4c6). Please retry your request by choosing a subnet in ('us-east-2b',). "
    }
  ],
  "message": "Invalid cluster configuration."
}

EFA確認

EFAに対応しているインスタンスタイプなので有効化した方が良いのはごもっともです。以下のドキュメント参考に有効化します。

      ComputeResources:
          Efa:
            Enabled: true

スポットインスタンス確認

試しにマネージメントコンソールからスポットインスタンスを作成しようとしても無理でした。単純に空きキャパシティがないだけの可能性もあります。

Spot Instance advisorを確認してみましたが HPC6a インスタンスは載っていませんでした。

クラスター作成時に仮にスポットインスタンスの空きキャパシティがなかったとしてもクラスターの作成はできます。今回のエラーメッセージから本当にスポットインスタンスに対応していないものと思われます。

2022/1/15追記
正しい確認方法がわかりました。ご興味があれば以下のリンクもご参照ください。

AZ確認

us-east-2で hpc6a.48xlarge が使えるAZを調べました。1AZしか対応していないことがわかりました。

$ aws ec2 describe-instance-type-offerings --location-type availability-zone  --filters Name=instance-type,Values=hpc6a.48xlarge --region us-east-2 --output table
---------------------------------------------------------
|             DescribeInstanceTypeOfferings             |
+-------------------------------------------------------+
||                InstanceTypeOfferings                ||
|+----------------+--------------+---------------------+|
||  InstanceType  |  Location    |    LocationType     ||
|+----------------+--------------+---------------------+|
||  hpc6a.48xlarge|  us-east-2b  |  availability-zone  ||
|+----------------+--------------+---------------------+|

私のアカウントではus-east-2bでした。アカウントによって異なると思いますので同じコマンドでお確かめください。

※ マネージメントコンソールからのスポットインスタンスの起動確認もus-east-2bで試しています。

クラスター作成と起動

サンプルコンフィグを用いてクラスターを作成します。

pcluster create-cluster --cluster-name hpc-cluster --cluster-configuration hpc-cluster.yml

クラスター完成まで10分少々待ちます。

実行結果

{
  "cluster": {
    "clusterName": "hpc-cluster",
    "cloudformationStackStatus": "CREATE_IN_PROGRESS",
    "cloudformationStackArn": "arn:aws:cloudformation:us-east-2:123456789012:stack/hpc-cluster/d50226c0-7362-11ec-a557-020a4e309172",
    "region": "us-east-2",
    "version": "3.0.2",
    "clusterStatus": "CREATE_IN_PROGRESS"
  }
}

クラスター作成の結果を確認します。

pcluster describe-cluster --cluster-name hpc-cluster

作成完了しました。

{
  "creationTime": "2022-01-12T04:48:06.105Z",
  "headNode": {
    "launchTime": "2022-01-13T01:20:22.000Z",
    "instanceId": "i-0716ef8911dd75f6b",
    "publicIpAddress": "3.140.252.172",
    "instanceType": "t3a.micro",
    "state": "running",
    "privateIpAddress": "10.0.2.175"
  },
  "version": "3.0.2",
  "clusterConfiguration": {
    "url": "https://parallelcluster-7567a8c3e5e4252c-v1-do-not-delete.s3.us-east-2.amazonaws.com/parallelcluster/3.0.2/clusters/hpc-cluster-cwdhcxoohu4im36b/configs/cluster-config.yaml?hoge"
  },
  "tags": [
    {
      "value": "3.0.2",
      "key": "parallelcluster:version"
    }
  ],
  "cloudFormationStackStatus": "CREATE_COMPLETE",
  "clusterName": "hpc-cluster",
  "computeFleetStatus": "RUNNING",
  "cloudformationStackArn": "arn:aws:cloudformation:us-east-2:123456789012:stack/hpc-cluster/d50226c0-7362-11ec-a557-020a4e309172",
  "lastUpdatedTime": "2022-01-12T04:48:06.105Z",
  "region": "us-east-2",
  "clusterStatus": "CREATE_COMPLETE"
}

ヘッドノードが起動しています。

ヘッドノードにログインします。2ノード指定でテストジョブを投げて hpc6a インスタンスが起動できるか確認します。

sbatch -N2 test.sh

hpc6a.48xlarge 2台がコンピュートノードで起動しました。

ParallelCluster のクラスター作成と動作確認は以上です。

ハードウェアを調べてみる

コンピュートノードで起動してきた hpc6a.48xlarge インスタンスにログインしてスペックを確認します。

CPU確認

AMD EPYC 7R13 Processorなので M6a シリーズと同型です。

「M6a」第3世代 AMD EPYC プロセッサーを搭載したEC2インスタンスがリリースされました | DevelopersIO

/proc/cpuinfo

processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 25
model           : 1
model name      : AMD EPYC 7R13 Processor
stepping        : 1
microcode       : 0xa001143
cpu MHz         : 3023.499
cache size      : 512 KB
physical id     : 0
siblings        : 48
core id         : 0
cpu cores       : 48
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 16
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf tsc_known_freq pni p
clmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch topoext perfctr_core invpcid_single ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1
 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr rdpru wbnoinvd arat npt nrip_save vaes vpclmulqdq rdpid
bugs            : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 5299.98
TLB size        : 2560 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management:
...snip...

メモリ確認

96 GB * 4 = 384 GB の構成でした。ここで DDR4 のメモリと確認できました。ドキュメントや公式アカウントでは触れられていませんでした。

$ sudo dmidecode -t memory
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.

Handle 0x000C, DMI type 16, 23 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: Unknown
        Maximum Capacity: 384 GB
        Error Information Handle: Not Provided
        Number Of Devices: 1

Handle 0x000D, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x000C
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 96 GB
        Form Factor: DIMM
        Set: None
        Locator: Not Specified
        Bank Locator: Not Specified
        Type: DDR4
        Type Detail: Static Column Pseudo-static Synchronous Window DRAM
        Speed: 2933 MT/s
        Manufacturer: Not Specified
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
        Rank: Unknown
        Configured Memory Speed: Unknown

Handle 0x0010, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x000C
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 96 GB
        Form Factor: DIMM
        Set: None
        Locator: Not Specified
        Bank Locator: Not Specified
        Type: DDR4
        Type Detail: Static Column Pseudo-static Synchronous Window DRAM
        Speed: 2933 MT/s
        Manufacturer: Not Specified
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
        Rank: Unknown
        Configured Memory Speed: Unknown

Handle 0x0013, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x000C
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 96 GB
        Form Factor: DIMM
        Set: None
        Locator: Not Specified
        Bank Locator: Not Specified
        Type: DDR4
        Type Detail: Static Column Pseudo-static Synchronous Window DRAM
        Speed: 2933 MT/s
        Manufacturer: Not Specified
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
        Rank: Unknown
        Configured Memory Speed: Unknown

Handle 0x0016, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x000C
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 96 GB
        Form Factor: DIMM
        Set: None
        Locator: Not Specified
        Bank Locator: Not Specified
        Type: DDR4
        Type Detail: Static Column Pseudo-static Synchronous Window DRAM
        Speed: 2933 MT/s
        Manufacturer: Not Specified
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
        Rank: Unknown
        Configured Memory Speed: Unknown

ネットワーク確認

イーサネットコントローラーからEFAの名前を確認できました。

$ lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma]
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.3 Non-VGA unclassified device: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:03.0 VGA compatible controller: Amazon.com, Inc. Device 1111
00:04.0 Non-Volatile memory controller: Amazon.com, Inc. Device 8061
00:05.0 Ethernet controller: Amazon.com, Inc. Elastic Network Adapter (ENA)
00:06.0 Ethernet controller: Amazon.com, Inc. Device efa1

まとめ

  • us-east-2(オハイオ)の1AZのみで起動できます。
    • 事前に起動できるAZを確認してからコンピュートノードのサブネットを指定しましょう。
  • スポットインスタンスの起動は非対応につき、クラスターの設定はONDEMAND指定のみ有効です。
  • クラスター設定でEFA有効化推奨です。

終わりに

SMTがデフォルトで無効化されておりHPCの名を冠するだけあってHPC仕様でした。物理96コアのCPU持つインスタンスなので1台の利用でも効率的に計算できるケースはありそうです。ParallelCluster で利用するならスポットインスタンス対応が望まれますね。東京リージョンへは上陸していませんので気長に待ちましょう。使えるようになりましたら今回のサンプルコンフィグをベースに動作確認できると思いますので参考にしていただければと思います。今後は FSx for Lustre との連携など他サービスとの組み合わせの検証したいと思います。パワフルなマシンなのでパワフルなストレージを活用したいですよね。

参考