scicore.slurm
CIテスト | ギャラクシーリリース |
---|---|
scicore.slurm
SLURM クラスターの設定
このロールは以下を設定します:
- SLURM 会計デーモン
- SLURM マスターデーモン
- SLURM ワーカーノード
- SLURM 提出ホスト
SLURM ユーザーは、最初のジョブ提出時に自動的に SLURM 会計データベースに追加されます。これは Lua ジョブ提出プラグイン を使用します。
インベントリの例
master ansible_host=192.168.56.100 ansible_user=vagrant ansible_password=vagrant
submit ansible_host=192.168.56.101 ansible_user=vagrant ansible_password=vagrant
compute ansible_host=192.168.56.102 ansible_user=vagrant ansible_password=vagrant
[slurm_submit_hosts]
submit
[slurm_workers]
compute
インベントリを定義した後は、マスターホストのホスト名を指す変数「slurm_master_host」を定義してください。
ロール変数
# すべての SLURM ホストを各マシンの /etc/hosts に追加します
# IPは ansible facts hostvars[ansible_hostname]['ansible_default_ipv4']['address'] から取得されます。
slurm_update_etc_hosts_file: true
# git で SLURM 設定を持っている場合、この変数を git リポジトリにポイントします
# slurm_config_git_repo: ""
# デフォルトでは、ユーザーを SLURM 会計 DB に自動的に追加する lua 提出プラグインがデプロイされます
# 詳細は "templates/job_submit.lua.j2" を確認してください
slurm_config_deploy_lua_submit_plugin: true
# SLURM の設定なしモードを使用します https://slurm.schedmd.com/configless_slurm.html
# この機能は SLURM 20.02 以上が必要です
# RedHat システムでのみテストされていますが、Ubuntu 20.02 以上をインストールすれば動作するはずです。
slurm_configless: false
# OpenStack を使用したクラウドスケジューリングのために SLURM マスターで必要なスクリプトをデプロイします
# これにより "ResumeProgram"、"SuspendProgram" が slurm.conf にデプロイされます。
# /etc/openstack/clouds.yaml には SLURM マスターのアプリケーションクレデンシャルが含まれます。
# カスタム slurm.conf が必要です。例として "templates/slurm.conf.j2.cloud.example" を参照してください。
# [OpenStack の内部 DNS 解決] を使用することをお勧めします (https://docs.openstack.org/neutron/latest/admin/config-dns-int.html#the-networking-service-internal-dns-resolution)
slurm_openstack_cloud_scheduling: false
slurm_openstack_venv_path: /opt/venv_slurm
slurm_openstack_auth_url: https://my-openstack-cloud.com:5000/v3
slurm_openstack_application_credential_id: "4eeabeabcabdwe19451e1d892d1f7"
slurm_openstack_application_credential_secret: "supersecret1234"
slurm_openstack_region_name: "RegionOne"
slurm_openstack_interface: "public"
slurm_openstack_identity_api_version: 3
slurm_openstack_auth_type: "v3applicationcredential"
# slurm.cfg で定義された SLURM クラスター名
slurm_cluster_name: slurm-cluster
# slurm-master の ansible_hostname にこの変数を設定してください
slurm_master_host: slurm-master.cluster.com
# slurm-dbd ホストの ansible_hostname にこの変数を設定してください (デフォルトでは slurm-master と同じ)
slurm_dbd_host: "{{ slurm_master_host }}"
# あなたの ansible インベントリ内のすべての SLURM ワーカーを含むグループ
slurm_workers_group: slurm_workers
# あなたの ansible インベントリ内のすべての提出ホストを含むグループ
slurm_submit_group: slurm_submit_hosts
# これは slurm.conf の設定 "StateSaveLocation"
slurm_slurmctld_spool_path: /var/spool/slurmctld
# これは slurm.conf の設定 "SlurmdSpoolDir"
slurm_slurmd_spool_path: /var/spool/slurmd
# SLURM 会計デーモンの設定
slurm_slurmdbd_mysql_db_name: slurm
slurm_slurmdbd_mysql_user: slurm
slurm_slurmdbd_mysql_password: aadAD432saAdfaoiu
# SLURM デーモンを実行するユーザーとグループ
slurm_user:
RedHat: "root"
Debian: "slurm"
slurm_group:
RedHat: "root"
Debian: "slurm"
# EPEL は CentOS/RedHat システムで SLURM パッケージおよび依存関係をインストールするために必要です。
slurm_add_epel_repo: true
# centos で openhpc yum リポジトリを有効にするためにこれを true に設定できます
# openhpc のパッケージを使用する予定がある場合は、以下の RedHat のパッケージリストも更新する必要があります。
slurm_add_openhpc_repo: false
slurm_ohpc_repos_url:
rhel7: "https://github.com/openhpc/ohpc/releases/download/v1.3.GA/ohpc-release-1.3-1.el7.x86_64.rpm"
rhel8: "http://repos.openhpc.community/OpenHPC/2/CentOS_8/x86_64/ohpc-release-2-1.el8.x86_64.rpm"
# 各クラスター構成メンバーにインストールする SLURM パッケージ
slurm_packages_common:
RedHat:
- slurm
- slurm-doc
- slurm-contribs
Debian:
- slurm-client
# マスターノードのみにインストールする SLURM パッケージ
slurm_packages_master:
RedHat:
- slurm-slurmctld
# - slurm-slurmrestd
Debian:
- slurmctld
# slurmdbd ノードのみにインストールする SLURM パッケージ
slurm_packages_slurmdbd:
RedHat:
- slurm-slurmdbd
- mariadb-server
Debian:
- slurmdbd
- mariadb-server
# ワーカーノードのみにインストールする SLURM パッケージ
slurm_packages_worker:
RedHat:
- slurm-slurmd
- vte-profile # slurm対話シェルでのエラーメッセージ "bash __vte_prompt_command command not found" を回避します。
Debian:
- slurmd
OpenStack のための SLURM クラウドスケジューリングの設定
このロールは、SLURM クラスターを OpenStack クラウド上でクラウドスケジューリングを使用するように設定できます。
設定を試みる前に、Slurm のクラウドスケジューリングガイド と Slurm の設定なしドキュメントを読むことをお勧めします。
あなたの OpenStack クラウドが 内部 DNS 解決 を有効にしていることを確認してください。 これは、新しいノードが起動するとき、そのホスト名が SLURM マスターによって OpenStack 内部 DNS で解決できるようにするために必要です。
また、このロールに付属の設定ファイルの例 slurm.conf.j2.cloud.example も確認してください。
slurm.conf.j2.cloud.example は例として提供されており、あなた自身の特定のニーズに合わせて適応させ、ロール変数 slurm_conf_custom_template
をあなたのカスタム設定ファイルにポイントさせる必要があります。
クラウドスケジューリング設定の概要
SLURM のクラウドスケジューリングドキュメントに記載されているように、ユーザーがクラウドノードにジョブを提出すると、SLURM マスターは slurm.conf に定義された "ResumeProgram" を実行してクラウドの計算ノードを起動します。
このロールに付属の ResumeProgram は、計算ノードを起動するために OpenStack API を使用する Python スクリプトです。この Python スクリプトは、仮想環境内にインストールされた OpenStack クライアントを必要とします。プログラムへの引数は、パワーアップするノードの名前(SLURM のホストリスト式フォーマットを使用)です。
計算ノードがアイドル状態のとき、SLURM マスターはノードを停止するために SuspendProgram を実行します。プログラムへの引数は、シャットダウンするノードの名前(SLURM のホストリスト式フォーマットを使用)です。
動的計算ノードを起動するために使用される OpenStack オプション(フレーバー、イメージ、ネットワーク、キーパー、セキュリティグループ)は、slurm.conf の ノードの特徴として定義する必要があります。例:
NodeName=compute-dynamic-[01-04] CPUs=4 RealMemory=7820 State=CLOUD Features=image=centos7,flavor=m1.large,keypair=key123,network=slurm_network,security_groups=default|slurm
"ResumeProgram" と "SuspendProgram" の両方には、有効な認証情報を持つ OpenStack 設定ファイルが必要です。このファイルはデフォルトで SLURM マスターのホストに "/etc/openstack/clouds.yaml" に populated されています。OpenStack アプリケーションクレデンシャル を使用することをお勧めします。テンプレート templates/clouds.yaml.j2 を確認して、この設定ファイルを埋めるための必要なロール変数を見つけてください。
"ResumeProgram" と "SuspendProgram" の両方は、SLURM マスターのホストの "/var/log/messages" にログを書き込みます。クラウドノードを起動する際のデバッグ目的でこのログを確認できます。
OpenStackクラウドスケジューリングを使用した SLURM の展開に対する推奨アプローチ
リポジトリに SLURM 20.02 以上があることを確認し、SLURM の設定なしモードをサポートします。
少なくとも 3 台のマシンをブートしてください:
- SLURM マスター
- SLURM 提出(ログインノード)
- SLURM ワーカー(これは、クラウドコンピュートノードのための必要な設定で OpenStack イメージを作成するために使用する小さなマシンで構いません)
あなたの ansible インベントリを埋め、マシンをロール変数 slurm_submit_group
と slurm_workers_group
で参照される正しいインベントリグループに追加します。
ロール変数 slurm_master_host
に SLURM マスターのホスト名を定義します。クラスター内のすべてのマシンがこのホスト名をマスターの IP に解決できる必要があります。クラスター内のすべてのマシンがこのマシンに接続できる必要があります(セキュリティグループとローカルファイアウォールを確認してください)。
slurm.conf.j2.cloud.example
のコピーを作成し、ニーズに合わせて適応させ、ロール変数 slurm_conf_custom_template
をあなたの設定ファイルにポイントします。あなたの設定ファイルは、「static」という名前のパーティションを提供し、以前にブートした SLURM ワーカーマシンのみを含む必要があります。
ansible 変数 slurm_configless: true
を定義して計算ノードが設定なしモードで構成されるようにします。SLURM ワーカーが設定なしモードで構成されると、slurmd デーモンは最初の起動時に SLURM マスターに連絡し、/var/run/slurm/conf/slurm.conf
に slurm.conf をダウンロードします。
ロールを実行してすべてのマシンを構成すると、 "static" パーティションに単一のノードを持つ稼働中の SLURM クラスターが得られます。
これで、自分のカスタムプレイブックやスクリプトを実行して SLURM ワーカーをカスタマイズできます。例:NFS マウントを追加する、LDAP クライアントをインストールする、ソフトウェアモジュールを有効にする、追加のソフトウェアをインストールするなど。
"static" パーティションのマシンから OpenStack イメージを作成し、必要なカスタマイズを含めます。[create-slurm-compute-node-image.yml](aux-playbook/create-slurm-compute-node-image.yml)
の例を確認してください。
slurm.conf.j2.cloud.example
のコピーを更新し、OpenStack イメージ名、キーナム、ネットワーク名、およびセキュリティグループを含む適切なノードの特徴を定義します。更新された設定を展開するためにプレイブックを再実行します。
さて(多分)、クラウドスケジューリングサポートを持つ稼働中の SLURM クラスターができているはずです。sinfo -Nel
を実行すると SLURM クラウドパーティションが表示されるはずです。クラウドパーティションのいずれかにジョブを提出し、SLURM マスターのホストで /var/log/messages
と /var/log/slurm/slurmctld.log
を監視してください。