AWS ParallelClusterにEBSのgp3, io2が選択可能になりました

ParallelClusterでデフォルトNFS共有ストレージの守備範囲が拡大!
2020.12.23

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

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

single-cluster

[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