東京リージョンで「C6id」「M6id」「R6id」の EC2 インスタンスが利用可能になったので AWS ParallelCluster から使ったみた

2022.09.30

第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-1dc6idが提供されていました。

$ 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