AWS ParallelClusterにEBSのgp3, io2が選択可能になりました
ParallelClusterのEBSボリュームに gp3, io2 Block Express(プレビュー) を選択できるようになりました。
- ParallelCluster 2.10.1 がリリースされ新しいEBSボリュームタイプに対応!
- ヘッドノードから NFSで共有されるボリューム のEBSの選択肢が増えました
- ヘッドノードの ルートボリューム のEBSはgp2しか今のところ選択できません
AWS ParallelCluster 2.10.1 Release
2020年12月23日にリリースされました。年の瀬なので今までのリリースタイミングを振り返ってみてみましょう。可視化すると2020年は昨年に比べるとアップデートが多かったことがよくわかります。
Release AWS ParallelCluster v2.10.1 · aws/aws-parallelcluster
ヘッドノードの標準共有ストレージ
gp3, io2 Block Expressを活かせるのはヘッドノードからNFSで共有されるストレージを利用する場合です。デフォルトでヘッドノードの/shared
ディレクトリがコンピュートノードと共有されるため、ParallelClusterではもっとも手軽な共有ストレージです。
やってみた
最新のpclusterコマンドを準備します。
> pip3 install aws-parallelcluster > pcluster version 2.10.1
コンフィグ作成
io2 Block Expressはプレビューなので、gp3を性能違いで2個アタッチする設定を作ります。
ParallelClusterのgp3のデフォルト設定値は無料枠内の最大パフォーマンス設定でした。より高いIOPS、スループットを求める場合はParallelClusterのコンフィグで指定するだけで簡単に変更・ヘッドノードにアタッチも可能です。その分、容量、IOPS、スループットに応じた追加料金が発生します。
設定 | デフォルト値 |
---|---|
volume_iops | 3000 |
volume_throughput | 125 |
サンプルコンフィグ
注目ポイント
external_ebs
設定でデフォルト値のEBSを/shared
にマウントexternal_ebs2
設定でデフォルト値の2倍性能のEBSを/mnt
にマウント
下記の項目は環境に依存します。構築する環境に合わせて適時変更してください。
- aws_region_name
- key_name
- vpc_id
- master_subnet_id
- compute_subnet_id
[aws] aws_region_name = us-east-1 [global] cluster_template = default update_check = true sanity_check = true [aliases] ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS} [cluster default] key_name = sandbox-key-useast1 base_os = alinux2 scheduler = slurm vpc_settings = custom # Instance Type master_instance_type = c6g.large # Queue queue_settings = standard-spot # Shared EBS ebs_settings = external_ebs, external_ebs2 # Tag tags = { "Name" : "Single-Cluster" } # --- VPC Setting --- [vpc custom] vpc_id = vpc-07edfc27679c9ca80 master_subnet_id = subnet-0ab2754446b2f87a4 compute_subnet_id = subnet-0ab2754446b2f87a4 use_public_ips = false # --- EBS Setting --- [ebs external_ebs] shared_dir = /shared volume_type = gp3 volume_size = 50 [ebs external_ebs2] shared_dir = /mnt volume_type = gp3 volume_size = 50 volume_iops = 6000 volume_throughput = 250 # --- ComputeNode Setting --- [queue standard-spot] compute_resource_settings = standard-spot placement_group = DYNAMIC compute_type = spot [compute_resource standard-spot] instance_type = c6g.2xlarge max_count = 32
ヘッドノードから確認
サンプルコンフィグからクラスターを作成しました。ヘッドノードにログインして確認します。
50GBのディスク2個確認できました。
[ec2-user@ip-10-1-11-128 ~]$ df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 616K 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/nvme0n1p1 xfs 25G 12G 14G 47% / /dev/nvme0n1p128 vfat 10M 3.7M 6.3M 38% /boot/efi /dev/nvme1n1 ext4 50G 53M 47G 1% /shared /dev/nvme2n1 ext4 50G 53M 47G 1% /mnt tmpfs tmpfs 387M 0 387M 0% /run/user/0 tmpfs tmpfs 387M 0 387M 0% /run/user/1000
/shared, /mnt
ともにNFSで共有されています。
[ec2-user@ip-10-1-11-128 ~]$ showmount -e Export list for ip-10-1-11-128: /opt/slurm 10.1.0.0/16 /home 10.1.0.0/16 /mnt 10.1.0.0/16 /shared 10.1.0.0/16
マネジメントコンソールから確認
ヘッドノードのインスタンスにはルートボリュームの他に2個EBSがアタッチされています。
IOPS、スループット未指定のEBSはデフォルト値で、値を指定したものは指定通りgp3のEBSがアタッチされています。
ルートボリュームのボリュームタイプは今のところParallelClusterのコンフィグで指定できません。 従来どおりgp2 で作成されていました。
おわりに
NFSマウントでのデフォルト提供される共有ストレージがもっとも手軽なので楽です。しかし、多数のコンピュートノードからアクセスがあるとヘッドノードのネットワーク帯域がボトルネックになる可能性があります。ヘッドノードのインスタンスタイプの見直しや、FSx for Lustreの利用などワークロードに応じた共有ストレージをご検討いただければと思います。
以上、網走の大村でした。
参考
[cluster] section - AWS ParallelCluster
[ebs] section - AWS ParallelCluster