このチュートリアルでは、Slurm クラスタを Compute Engine にデプロイする方法を説明します。Slurm Resource Manager は、多くのハイ パフォーマンス コンピューティング センターでよく使用されているリソース マネージャーです。ハイ パフォーマンス コンピューティングの用語とユースケースの検討については、クラウドでの大規模な技術計算にクラスタを使用するをご覧ください。
次の図は、このチュートリアルで作成する構成を示しています。
クラスタ ワークロード マネージャーとして Slurm は次の処理を行います。
- リソース(コンピューティング ノード)をユーザーに割り当てます。
- ノードで作業を開始、実行、モニタリングするための構造を提供します。
- 保留中の作業のキューを管理します。
このチュートリアル用に開発されたデプロイは、単一アプリのワークロードを実行する数人のユーザーをサポートする単純化されたクラスタ アーキテクチャです。マルチ ワークロード デプロイ、大規模な本番環境デプロイ、オンプレミス クラスタまたはマルチクラウド クラスタで動作する混合型デプロイには、他の構成を使用できますが、これらの構成はこのチュートリアルの範囲外です。
このチュートリアルでは、ログイン(ヘッド)ノードを使用してシステムを操作します。クラスタをデプロイしたら、SSH を使用してログインノードに接続し、Slurm コマンドライン ツールを使用して計算ジョブを送信します。コントローラ ノードで実行されている Slurm スケジューラは、利用可能なリソースをジョブ要件と照合してジョブのキューの予定を決め、コンピューティング ノードでのジョブの実行を管理します。NFS サーバーにファイル用の共通の共有スペースを用意します。
目標
- Cloud Deployment Manager を使用して Slurm クラスタをデプロイします。
- Slurm を使用してジョブを実行します。
- クラスタ情報をクエリし、Slurm で実行中のジョブをモニタリングします。
- ジョブ パラメータを格納するためにノードを自動スケーリングします。
料金
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。新しい Google Cloud ユーザーは無料トライアルをご利用いただけます。
このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。
始める前に
- Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する。
- Compute Engine and Deployment Manager API を有効にします。
-
Cloud Console で、Cloud Shell をアクティブにします。
Cloud Console の下部にある Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。
gcloud
コマンドライン ツールなどの Cloud SDK がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
Slurm クラスタのデプロイ
このセクションでは、クラスタ構成を準備し、Deployment Manager を使用して Slurm クラスタを Google Cloud にデプロイしてから、クラスタが動作していることを確認します。
クラスタ構成を準備する
Cloud Shell で
slurm-gcp
GitHub リポジトリのクローンを作成します。git clone https://github.com/SchedMD/slurm-gcp.git
次の環境変数を定義します。
export CLUSTER_DEPLOY_NAME="cluster-deployment-name" export CLUSTER_NAME="cluster-name" export CLUSTER_REGION="cluster-region" export CLUSTER_ZONE="cluster-zone"
次のように置き換えます。
cluster-deployment-name
: クラスタ デプロイの一意の名前。cluster-name
: クラスタの一意の名前。cluster-region
: クラスタをデプロイするリージョン。ロケーションに近いリージョンを選択します。詳細については、リージョンとゾーンをご覧ください。cluster-zone
: クラスタをデプロイするゾーン。
slurm-gcp
フォルダで、slurm-cluster.yaml
ファイルを${CLUSTER_DEPLOY_NAME}.yaml
ファイルにコピーします。cd slurm-gcp cp slurm-cluster.yaml ${CLUSTER_DEPLOY_NAME}.yaml
テキスト エディタで、環境に合わせて
${CLUSTER_DEPLOY_NAME}.yaml
ファイルを変更します。default_users
値を除くすべての構成プロパティに許可されるデフォルト値と使用可能な値を指定するslurm.jinja.schema
ファイルで定義されているタイプを使用します。次のとおり必要な変更を行います。cluster_name
: クラスタの名前をcluster-name
に変更します。region
とzone
:cluster-region
とcluster-zone
に置き換えます。compute_machine_type
: (省略可)別のマシンタイプを使用する場合は、compute_machine_type
値を変更します。たとえば、デフォルト設定のn1-standard-2
で使用可能な CPU コアやメモリよりも多くが必要な場合は、n1-standard-4
を選択します。詳細については、マシンタイプをご覧ください。vpc_net
とvpc_subnet
: (省略可)既存の Virtual Private Cloud(VPC)ネットワークと VPC サブネットを使用します。ネットワークとサブネットの要件については、slurm.jinja.schema
ファイルで説明します。値を指定しない場合、クラスタ用に新しいネットワークまたはサブネットが作成されます。詳細については、VPC ネットワークをご覧ください。
ファイルを保存します。
Deployment Manager を使用した Slurm クラスタのデプロイ
Cloud Shell で、Deployment Manager を使用してクラスタを Google Cloud にデプロイします。
gcloud deployment-manager deployments \ --project="$(gcloud config get-value core/project)" \ create $CLUSTER_DEPLOY_NAME \ --config ${CLUSTER_DEPLOY_NAME}.yaml
出力は次のようになります。
The fingerprint of the deployment is VWVaIYX1mFpjv9UDhzalYQ== Waiting for create [operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545]...done. Create operation operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545 completed successfully. NAME TYPE STATE ERRORS INTENT helloworld-all-internal-firewall-rule compute.v1.firewall IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute-image compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute1 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute2 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-controller compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-login1 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-router compute.v1.router IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-slurm-network compute.v1.network IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-slurm-subnet compute.v1.subnetwork IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-ssh-firewall-rule compute.v1.firewall IN_PREVIEW [] CREATE_OR_ACQUIRE
クラスタの構成が完了するまでに 5~10 分かかります。構成の進行状況をトラッキングします。
gcloud compute ssh ${CLUSTER_NAME}-controller \ --command "sudo journalctl -fu google-startup-scripts.service" \ --zone $CLUSTER_ZONE
スクリプトが終了すると、Slurm クラスタを使用できるようになります。出力は次の行で終了します。
Started Google Compute Engine Startup Scripts.
構成の監視を停止するには、Control+C キーを押します。
クラスタが実行中であることを検証します。
Cloud Shell で、ログインノードにログインしてクラスタの準備ができていることを確認します。
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list \ --zones ${CLUSTER_ZONE} \ --filter="name ~ .*login." \ --format="value(name)" | head -n1) gcloud compute ssh ${CLUSTER_LOGIN_NODE} \ --zone $CLUSTER_ZONE
出力が次のようになると、クラスタの準備ができています。
SSSSSSS SSSSSSSSS SSSSSSSSS SSSSSSSSS SSSS SSSSSSS SSSS SSSSSS SSSSSS SSSSSS SSSSSSS SSSSSS SSSS SSSSSSSSS SSSS SSS SSSSSSSSS SSS SSSSS SSSS SSSSSSSSS SSSS SSSSS SSS SSSSSS SSSSSSSSS SSSSSS SSS SSSSSS SSSSSSS SSSSSS SSS SSSSSS SSSSSS SSS SSSSS SSSS SSSSSSS SSSS SSSSS S SSS SSSSSSSSS SSS S SSS SSSS SSSSSSSSS SSSS SSS S SSS SSSSSS SSSSSSSSS SSSSSS SSS S SSSSS SSSSSS SSSSSSSSS SSSSSS SSSSS S SSSSS SSSS SSSSSSS SSSS SSSSS S S SSS SSS SSS SSS S S S S S SSS SSS SSS SSS SSSSSSSSSSSS SSS SSSS SSSS SSSSSSSSS SSSSSSSSSSSSSSSSSSSS SSSSSSSSSSSSS SSS SSSS SSSS SSSSSSSSSS SSSSSSSSSSSSSSSSSSSSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSSS SSS SSSSSSSSSSSSSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSSSSSSSSSSS SSSS SSSS SSSS SSSS
クラスタを終了するには、
Control+D
を押します。クラスタの準備ができたら、ジョブが正しく動作していることを確認するスケジュールを設定します。このジョブは、クラスタ内の複数のノードで
hostname
コマンドを実行します。gcloud compute ssh ${CLUSTER_NAME}-login1 \ --command 'sbatch -N2 --wrap="srun hostname"' --zone $CLUSTER_ZONE gcloud compute ssh ${CLUSTER_NAME}-login1 \ --command 'cat slurm-*.out' --zone $CLUSTER_ZONE
出力は次のようになります。
helloworld-compute1 helloworld-compute2
これで、動作中のクラスタが作成されました。
Slurm クラスタの自動スケーリング
Slurm クラスタをデプロイするときは、max_node_count
と static_node_count
プロパティの値を指定します。max_node_count
値は、クラスタが任意の時点で実行するコンピューティングノードの最大数を決定します。static_node_count
値は、常に実行中のコンピューティング ノードの数を指定します。デフォルトでは、slurm-cluster.yaml
ファイルは 10
に max_node_count
を、2
に static_node_count
を設定します。
これら 2 つの数値の差(max_node_count
- static_node_count
)が、クラスタ内のエフェメラル ノードの数になります。エフェメラル ノードは、ジョブ スケジューリング リクエストに応答してオンデマンドで作成されます。実行するために作成されたジョブが完了すると、クラスタが他のジョブの実行に使用できない場合、ノードは破棄されます。Google Cloud では、Slurm 省電力メカニズムは必要時のみエフェメラル ノードをインスタンス化することでクラスタを自動スケーリングします。
Cloud Shell で、ノード数を表示します。
sinfo
出力は次のようになります。
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 8 idle~ demo-compute[3-10] debug* up infinite 2 idle demo-compute[1-2]
出力の最初の行にある
STATE
記述子idle
の~
サフィックスは、8 つのエフェメラル ノードが省電力モードであることを示します。クラスタを自動スケーリングするには、3 つのエフェメラル ノードを作成します。
sbatch -N5 --wrap="srun hostname"
出力は次のようになります。
Submitted batch job JOB_ID
ノード数を再表示します。
sinfo
出力は次のようになります。
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 3 alloc# demo-compute[3-5] debug* up infinite 5 idle~ demo-compute[6-10] debug* up infinite 2 idle demo-compute[1-2]
出力の最初の行にある
STATE
記述子alloc
の#
サフィックスは、3 つのエフェメラル ノードが作成されたことを示します。追加のノードが作成して構成されると、ジョブが実行され、少し後に破棄されます。
クリーンアップ
課金を停止する最も簡単な方法は、チュートリアル用に作成した Cloud プロジェクトを削除することです。また、リソースを個別に削除することもできます。プロジェクトの削除
- Cloud Console で [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
Slurm クラスタを削除する
クラスタを削除します。
gcloud deployment-manager deployments delete slurm
次のステップ
- Google Cloud のその他の機能を試す。チュートリアルをご覧ください。