I4i インスタンスを AWS ParallelCluster で動かしてみた

2022.05.14

第2世代の AWS Nitro SSDを搭載した I4i インスタンスタイプが登場しました。高速・大容量のローカル AWS Nitro SSD ストレージ搭載するインスタンスタイプを AWS ParallelCluster で利用可能なのか動作検証しました。

ローカルストレージはインスタンスストアと呼ばれる非永続的なストレージです。

確認結果

  • AWS ParallelCluster 3.1.3 のクラスターで I4i.8xlarge の起動を確認
  • コンピュートノードのインスタンスストアは /scratch ディレクトリに自動マウントされる
  • スポットインスタンスの提供あり
  • ap-northeast-1(東京)ではまだ利用できません(現時点: 2022/5/14)

相性の良い使い方

AWS ParallelCluster と組み合わせて利用する際の相性の良い点と、ローカル AWS Nitro SSD ストレージの注意事項

  • 一時ファイル、中間ファイルを大量に生成するようなワークロード
  • 高速なインスタンスストアを活かすのであれば単一ノードで実行するアプリケーション向き
    • 最大 vCPU 128core(Hyper-Threading 無効化時は 64core
    • 最大メモリ 1TiB 最大ローカル AWS Nitro SSD ストレージ 30TB
  • ストレージコストの最適化
    • 高速なストレージ(インスタンスストア)を計算中の間だけ利用するためコスパが高い
      • コンピュートノードの停止とともにインスタンスストアのデータは消失する
      • 実行結果など残したいデータは永続ストレージ(S3 バケットなど)へ退避する必要がある

クラスター作成準備

キューの2番目にi4iインスタンスタイプを起動するクラスターを作成します。

項目
AWS ParallelCluster 3.1.3
Job Scheduler Slurm
OS Ubuntu 20.04 LTS
CPU Intel
Simultaneous Multi-Threading 無効
CloudWatch Dashboard 作成しない
Placement group 有効

スポットインスタンスは提供されていましたのでコンピュートノードではスポットで利用します。

$ aws ec2 describe-instance-types --instance-types i4i.8xlarge --region us-east-2 | jq '.InstanceTypes[].SupportedUsageClasses[]'
"on-demand"
"spot"

サンプルコンフィグ

実行環境依存のパラメータは適時変更してご利用ください。

  • SubnetId:
  • SubnetIds:
  • KeyName:
  • BucketName:
  • Script:

sample-i4i-parallelcluster.yml

Region: us-east-2
Image:
  Os: ubuntu2004
Monitoring:
  Logs:
    CloudWatch:
      Enabled: true
      RetentionInDays: 30
      DeletionPolicy: "Delete"
  Dashboards:
    CloudWatch:
      Enabled: false
Tags:
  - Key: Name
    Value: SampleCluster
HeadNode:
  InstanceType: t3.micro
  Networking:
    ElasticIp: false
    SubnetId: subnet-06bef5c18e9a5f4c6
  Ssh:
    KeyName: sandbox-key-useast2
  LocalStorage:
    RootVolume:
      Size: 35
      Encrypted: false
      VolumeType: gp3
      Iops: 3000
      Throughput: 125
  Iam:
    S3Access:
      - BucketName: hpc-dev-postinstall-files
        EnableWriteAccess: False
    AdditionalIamPolicies:
      - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
Scheduling:
  Scheduler: slurm
  SlurmSettings:
    ScaledownIdletime: 5
  SlurmQueues:
    # --- Queue 1 ---
    - Name: debug
      ComputeResources:
        - Name: debug
          InstanceType: t3.micro
          MinCount: 0
          MaxCount: 10
          DisableSimultaneousMultithreading: true
      ComputeSettings:
        LocalStorage:
          RootVolume:
            Size: 35
            Encrypted: false
            VolumeType: gp3
            Iops: 3000
            Throughput: 125
      CapacityType: SPOT
      Networking:
        SubnetIds:
          - subnet-06bef5c18e9a5f4c6
        # PlacementGroup:
        # Enabled: true
      CustomActions:
        OnNodeConfigured:
          Script: s3://hpc-dev-postinstall-files/sample-ubuntu-docker/postinstall.sh
      Iam:
        S3Access:
          - BucketName: hpc-dev-postinstall-files
            EnableWriteAccess: False
        AdditionalIamPolicies:
          - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

    # --- Queue 2 ---
    - Name: i4i
      ComputeResources:
        - Name: large8x
          InstanceType: i4i.8xlarge
          MinCount: 0
          MaxCount: 10
          DisableSimultaneousMultithreading: true
      ComputeSettings:
        LocalStorage:
          RootVolume:
            Size: 35
            Encrypted: false
            VolumeType: gp3
            Iops: 3000
            Throughput: 125
      CapacityType: SPOT
      Networking:
        SubnetIds:
          - subnet-06bef5c18e9a5f4c6
        PlacementGroup:
          Enabled: true
      CustomActions:
        OnNodeConfigured:
          Script: s3://hpc-dev-postinstall-files/sample-ubuntu-docker/postinstall.sh
      Iam:
        S3Access:
          - BucketName: hpc-dev-postinstall-files
            EnableWriteAccess: False
        AdditionalIamPolicies:
          - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

コンピュートノードのCustomActionsは Docker をインストールしています。詳細は以下のリンクをご確認ください。

クラスター作成

クラスター作成コマンドを実行して10分ほど待ちます。ヘッドノードが起動したらログインします。

pcluster create-cluster -n I4iParallelcluster -c sample-i4i-parallelcluster.yml

コンピュートノードの確認

ヘッドノードからテストジョブを投げてコンピュートノードを起動させました。

ローカルストレージのマウント状況

/scratchにマウントされていました。dが付与されたインスタンスタイプ同様に AWS ParallelCluster はローカルストレージを自動マウントしてくれました。

$ df -h
Filesystem                             Size  Used Avail Use% Mounted on
/dev/root                               34G   18G   17G  51% /
devtmpfs                               124G     0  124G   0% /dev
tmpfs                                  124G     0  124G   0% /dev/shm
tmpfs                                   25G  1.1M   25G   1% /run
tmpfs                                  5.0M     0  5.0M   0% /run/lock
tmpfs                                  124G     0  124G   0% /sys/fs/cgroup
/dev/loop0                              27M   27M     0 100% /snap/amazon-ssm-agent/5163
/dev/loop2                              62M   62M     0 100% /snap/core20/1405
/dev/loop1                              56M   56M     0 100% /snap/core18/2344
/dev/loop3                              68M   68M     0 100% /snap/lxd/22753
/dev/loop4                              44M   44M     0 100% /snap/snapd/15177
/dev/loop5                              45M   45M     0 100% /snap/snapd/15534
10.0.1.12:/home                         34G   17G   18G  49% /home
10.0.1.12:/opt/parallelcluster/shared   34G   17G   18G  49% /opt/parallelcluster/shared
/dev/loop6                              62M   62M     0 100% /snap/core20/1434
/dev/mapper/vg.01-lv_ephemeral         6.8T   89M  6.5T   1% /scratch
10.0.1.12:/opt/intel                    34G   17G   18G  49% /opt/intel
10.0.1.12:/opt/slurm                    34G   17G   18G  49% /opt/slurm
tmpfs                                   25G   40K   25G   1% /run/user/1000

ここまでで確認できたこと

  • AWS ParallelCluster 3.1.3 で i4i の起動をサポート
  • ローカル AWS Nitro SSD ストレージは/scratchにマウントされる

自動マウント設定はどこに入っているのか?

/scratchのマウント設定は起動テンプレートに書き込まれています。起動テンプレートはクラスター作成時に CloudFormation(CDK)から生成されます。

aws-parallelcluster/cluster_stack.py at 85bc7b7aebd9cadaab9b9059ba9daf48bb4c5cf9 · aws/aws-parallelcluster

こちらは実際のクラスター作成後に生成された起動テンプレートです。

ストレージ設定確認するとephemeral0 - 23までの設定が入っています。実際のマウント処理はユーザーデータから呼び出している chef のスクリプトではないかと思いますがまだコードを追いきれてないです。

おわりに

勉強になったのは ParallelCluster 3系からは AutoScaling Group は使わなくなりましたが、2系から引き続き起動テンプレートは使われていたことを知りました。 2系はコンピュートノードの管理に AutoScaling Group を使っていましたが、3系からは Slurm ジョブスケジューラの場合は clustermgtd デーモンで管理されるように変更となっています。