AWS ParallelCluster のメジャーアップデート v3.0.0 がリリースされました

2021.09.11

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

AWS ParallelCluster v3.0.0がリリースされました。v2.11.2からのメジャーアップデートです。

機能追加、変更が多すぎるため詳細はリリースノートをご確認ください。

Release AWS ParallelCluster v3.0.0 · aws/aws-parallelcluster

目立った機能追加

  • Amazon API Gatewayからpclusterコマンドを呼び出せるようになりました。
    • 外部から容易にクラスターの管理ができるようになりました。
    • 従来はAWS Systems Manager Run Commandや、Lambdaで頑張ってやってました。
  • カスタムAMIの作成をサポート
    • コンピュートノードで利用する設定済みアプリケーションを焼き込んだゴールデンAMIを作るのが容易になりました。
    • 従来はカスタムAMIの利用はできたのですが非推奨となっていました。
    • ハマって時間を溶かしたことがあるので非推奨たる所以を身を以て知りました。

個人的な注目ポイント

  • コンフィグファイルの書式が刷新されてYAML形式になりました。
  • pclusterコマンドのオプションが刷新された。
  • ヘッドノード、コンピュートノードのルートボリュームにgp3をついにサポート。
    • デフォルトはgp2のため明示的にgp3を指定する必要はある。
    • 最低必要容量は35GBと変更なし。
  • ヘッドノードのNFS共有していた追加EBS(/share)がなくなった。
    • 代りにルートボリュームの/homeをNFS共有。
    • デフォルトのEBS構成はルートボリュームの1本のみ
  • ヘッドノード、コンピュートノードで別々のセキュリティグループ、IAMロールを設定可能になった。
    • 込み入った要件があるとき設計が大変だったのが解消されました。
  • モニタリングツールGangliaが廃止された。

今回はコンフィグファイル移植が手間そうですね。マルチキューモードのコンフィグを紹介するために作ってみます。

クラスターを作ってみた

項目
AWS ParallelCluster 3.0.0
Slurm(sinfo -V) 20.11.8
OS Ubuntu 20.04 LTS
CPU AMD
HeadNode t3a.micro
ComputeNode t3a.small(Ondemand) and c5a.large(Spot)
Multiple queue mode Enable

コンフィグファイル作成

クラスターを生み出すコンフィグファイルの設定値は以下のリンクを参考にサンプルを作成しました。移行ガイド見ても新しい設定項目名がよくわからないので、素直にドキュメント見ながら書き直した方が早いと判断しました。

設定概要

  • マルチキューモード設定
    • オンデマンド起動のtest-ondemand
    • スポット起動のcpu-spot
      • プレイスメントグループ有効
  • ヘッドノードのルートボリュームgp3指定
  • コンピュートノードのルートボリュームgp3指定

first-config.yml

Region: ap-northeast-1
Image:
  Os: ubuntu2004
HeadNode:
  InstanceType: t3a.micro
  Networking:
    ElasticIp: true
    SubnetId: subnet-035be95eeaa091603
  Ssh:
    KeyName: sandbox-key
  LocalStorage:
    RootVolume:
      Size: 35
      Encrypted: false
      VolumeType: gp3
      Iops: 3000
      Throughput: 125
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: test-ondemand
      ComputeResources:
        - Name: t3asmall
          InstanceType: t3a.small
          MinCount: 0
          MaxCount: 5
      Networking:
        SubnetIds:
          - subnet-035be95eeaa091603
    - Name: cpu-spot
      ComputeResources:
        - Name: c5alarge
          InstanceType: c5a.large
          MinCount: 0
          MaxCount: 10
      ComputeSettings:
        LocalStorage:
          RootVolume:
            Size: 35
            Encrypted: false
            VolumeType: gp3
            Iops: 3000
            Throughput: 125
      CapacityType: SPOT
      Networking:
         SubnetIds:
           - subnet-035be95eeaa091603
         PlacementGroup:
           Enabled: true

クラスター作成

pcluster create-clusterコマンドを使用します。

> pcluster create-cluster --cluster-name sample-cluster --region ap-northeast-1 --cluster-configuration first-config.yml --debug
{
  "cluster": {
    "clusterName": "sample-cluster",
    "cloudformationStackStatus": "CREATE_IN_PROGRESS",
    "cloudformationStackArn": "arn:aws:cloudformation:ap-northeast-1:12345679012:stack/sample-cluster/7d248650-12e1-11ec-9487-0e61a8e4def9",
    "region": "ap-northeast-1",
    "version": "3.0.0",
    "clusterStatus": "CREATE_IN_PROGRESS"
  }
}

ヘッドノードへログイン

SSHで接続しました。

オンデマンドインスタンスが起動するパーティション指定でテストジョブを登録します。計算するわけではなくホスト名を返すだけのスクリプトを投げています。

sbatch -n 1 -p test-ondemand tesh.sh

コンピュートノードが起動してきました。

オンデマンドインスタンスで間違いないです。はじめてのコンフィグファイルだと意図通り設定されているかいつも不安です。

次はスポットインスタンスが起動するパーティション指定でテストジョブを登録してみます。せっかくなので-n 20で20プロセス分指定しました。

$ sbatch -n 20 -p cpu-spot tesh.sh

コンピュートノードが10台起動してきました。

スポットインスタンスです。プレイスメントグループも設定も入っています。

クラスター構築と簡単な動作確認はできました。

クラウドHPCのよいところ

同時に大量のコンピュートノードを利用できて、インスタンスが起動していた時間分の従量課金です。計算リソースを気にせず、すぐに使えるのが魅力ですね。あと、スポットインスタンスを活用することで最大9割り引きで計算リソースを確保できます。ただ、インスタンスが中断する可能性があります。それでもHPCの計算ノードにスポットインスタンスは相性が良いと思います。

コンピュートノードは仕事を終えると削除されるテンポラリなインスタンスです。ここが従来のHPC環境と大きく異なる点です。v3.0.0からカスタムAMIが使いやすくなっていそうなので、旧来のParallelClusterとはまた違った構成を検討できそうです。追々検証しながら考えてみます。

おわりに

予想通りコンフィグファイル作成に難航しました。マルチキューモード、スポット利用、プレイスメントグループの最低限抑えたものを作りました。さっそく試してみたい方は環境作って検証してみてください。

参考