Cloud Scheduling Guide

Overview

Slurm has the ability to support a cluster that grows and shrinks on demand, typically relying upon a service such as Amazon Elastic Computing Cloud (Amazon EC2) and Google Cloud Platform for resources.
Slurmには、オンデマンドで拡大および縮小するクラスターをサポートする機能があり、通常、リソースはAmazon Elastic Computing Cloud(Amazon EC2)やGoogle CloudPlatformなどのサービスに依存しています。
These resources can be combined with an existing cluster to process excess workload (cloud bursting) or it can operate as an independent self-contained cluster.
これらのリソースを既存のクラスターと組み合わせて、過剰なワークロード(クラウドバースト)を処理することも、独立した自己完結型クラスターとして動作させることもできます。
Good responsiveness and throughput can be achieved while you only pay for the resources needed.
必要なリソースに対してのみ料金を支払う一方で、優れた応答性とスループットを実現できます。

The rest of this document describes details about Slurm's infrastructure that can be used to support cloud scheduling.
このドキュメントの残りの部分では、クラウドスケジューリングをサポートするために使用できるSlurmのインフラストラクチャについて詳しく説明します。

Slurm's cloud scheduling logic relies heavily upon the existing power save logic.
Slurmのクラウドスケジューリングロジックは、既存の省電力ロジックに大きく依存しています。
Review of Slurm's Power Saving Guide is strongly recommended.
Slurmの省電力ガイドを確認することを強くお勧めします。
This logic initiates programs when nodes are required for use and another program when those nodes are no longer required.
このロジックは、ノードの使用が必要になったときにプログラムを開始し、それらのノードが不要になったときに別のプログラムを開始します。
For cloud scheduling, these programs will need to provision the resources from the cloud and notify Slurm of the node's name and network address and later relinquish the nodes back to the cloud.
クラウドスケジューリングの場合、これらのプログラムはクラウドからリソースをプロビジョニングし、ノードの名前とネットワークアドレスをSlurmに通知し、後でノードをクラウドに戻す必要があります。
Most of the Slurm changes to support cloud scheduling were changes to support node addressing that can change.
クラウドスケジューリングをサポートするためのSlurmの変更のほとんどは、変更される可能性のあるノードアドレス指定をサポートするための変更でした。

Slurm Configuration

There are many ways to configure Slurm's use of resources.
Slurmのリソースの使用を構成する方法はたくさんあります。
See the slurm.conf man page for more details about these options.
これらのオプションの詳細については、slurm.confのマニュアルページを参照してください。
Some general Slurm configuration parameters that are of interest include:
関心のある一般的なSlurm構成パラメーターには次のものがあります。

CommunicationParameters=NoAddrCache
By default, Slurm will cache a node's network address after successfully establishing the node's network address.
デフォルトでは、Slurmはノードのネットワークアドレスを正常に確立した後、ノードのネットワークアドレスをキャッシュします。
This option disables the cache and Slurm will look up the node's network address each time a connection is made.
このオプションはキャッシュを無効にし、Slurmは接続が確立されるたびにノードのネットワークアドレスを検索します。
This is useful, for example, in a cloud environment where the node addresses come and go out of DNS.
これは、たとえば、ノードアドレスがDNSに出入りするクラウド環境で役立ちます。
ResumeFailProgram
The program that will be executed when nodes fail to resume by ResumeTimeout.
ResumeTimeoutによってノードの再開に失敗したときに実行されるプログラム。
The argument to the program will be the names of the failed nodes (using Slurm's hostlist expression format).
プログラムへの引数は、失敗したノードの名前になります(Slurmのホストリスト式形式を使用)。
ResumeProgram
The program executed when a node has been allocated and should be made available for use.
ノードが割り当てられたときに実行されるプログラムであり、使用できるようにする必要があります。
If the slurmd daemon fails to respond within the configured SlurmdTimeout value with an updated BootTime, the node will be placed in a DOWN state and the job requesting the node will be requeued.
slurmdデーモンが構成されたSlurmdTimeout値内で更新されたBootTimeで応答しない場合、ノードはDOWN状態になり、ノードを要求しているジョブが再キューイングされます。
If the node isn't actually rebooted (i.e. when multiple-slurmd is configured) starting slurmd with "-b" option might be useful.
ノードが実際に再起動されない場合(つまり、multiple-slurmdが構成されている場合)、「-b」オプションを指定してslurmdを開始すると便利な場合があります。
SlurmctldParameters=cloud_dns
By default, Slurm expects that the network addresses for cloud nodes won't be known until creation of the node and that Slurm will be notified of the node's address (e.g. scontrol update nodename=<name> nodeaddr=<addr>). Since Slurm communications rely on the node configuration found in the slurm.conf, Slurm will tell the client command, after waiting for all nodes to boot, each node's ip address.
デフォルトでは、Slurmは、ノードが作成されるまでクラウドノードのネットワークアドレスがわからないこと、およびノー​​ドのアドレスがSlurmに通知されることを想定しています(例:scontrol update nodename = <name> nodeaddr = <addr>)。Slurm通信はslurm.confにあるノード構成に依存しているため、Slurmは、すべてのノードが起動するのを待った後、各ノードのIPアドレスをクライアントコマンドに通知します。
However, in environments where the nodes are in DNS, this step can be avoided by configuring this option.
ただし、ノードがDNSにある環境では、このオプションを構成することでこの手順を回避できます。
SlurmctldParameters=idle_on_node_suspend
Mark nodes as idle, regardless of current state, when suspending nodes with SuspendProgram so that nodes will be eligible to be resumed at a later time.
SuspendProgramでノードを一時停止するときに、現在の状態に関係なく、ノードをアイドルとしてマークして、ノードが後で再開できるようにします。
SuspendExcNodes
Nodes not subject to suspend/resume logic.
一時停止/再開ロジックの対象ではないノード。
This may be used to avoid suspending and resuming nodes which are not in the cloud.
これは、クラウドにないノードの一時停止と再開を回避するために使用できます。
Alternately the suspend/resume programs can treat local nodes differently from nodes being provisioned from cloud.
あるいは、サスペンド/レジュームプログラムは、クラウドからプロビジョニングされているノードとは異なる方法でローカルノードを処理できます。
SuspendProgram
The program executed when a node is no longer required and can be relinquished to the cloud.
ノードが不要になり、クラウドに放棄できるときに実行されるプログラム。
SuspendTime
The time interval that a node will be left idle or down before a request is made to relinquish it.
ノードの放棄が要求される前に、ノードがアイドル状態またはダウン状態のままになる時間間隔。
Units are in seconds.
単位は秒単位です。
TCPTimeout
Time permitted for TCP connections to be established.
TCP接続が確立されるのに許可された時間。
This value may need to be increased from the default (2 seconds) to account for latency between your local site and machines in the cloud.
ローカルサイトとクラウド内のマシン間の遅延を考慮して、この値をデフォルト(2秒)から増やす必要がある場合があります。
TreeWidth
Since the slurmd daemons are not aware of the network addresses of other nodes in the cloud, the slurmd daemons on each node should be sent messages directly and not forward those messages between each other.
slurmdデーモンはクラウド内の他のノードのネットワークアドレスを認識しないため、各ノードのslurmdデーモンはメッセージを直接送信し、それらのメッセージを相互に転送しないようにする必要があります。
To do so, configure TreeWidth to a number at least as large as the maximum node count.
これを行うには、TreeWidthを少なくとも最大ノード数と同じ数に構成します。
The value may not exceed 65533.
値は65533を超えてはなりません。

Some node parameters that are of interest include:
対象となるノードパラメータには、次のものがあります。

Feature
A node feature can be associated with resources acquired from the cloud and user jobs can specify their preference for resource use with the "--constraint" option.
ノード機能はクラウドから取得したリソースに関連付けることができ、ユーザージョブは「--constraint」オプションを使用してリソース使用の設定を指定できます。
NodeName
This is the name by which Slurm refers to the node.
これは、Slurmがノードを参照するための名前です。
A name containing a numeric suffix is recommended for convenience.
便宜上、数字の接尾辞を含む名前をお勧めします。
The NodeAddr and NodeHostname should not be set, but will be configured later using scripts.
NodeAddrとNodeHostnameは設定しないでください。ただし、後でスクリプトを使用して構成します。
State
Nodes which are to be be added on demand should have a state of "CLOUD".
オンデマンドで追加されるノードは、「CLOUD」の状態である必要があります。
These nodes will not actually appear in Slurm commands until after they are configured for use.
これらのノードは、使用するように構成されるまで、Slurmコマンドに実際には表示されません。
Weight
Each node can be configured with a weight indicating the desirability of using that resource.
各ノードは、そのリソースを使用することの望ましさを示す重みで構成できます。
Nodes with lower weights are used before those with higher weights.
重みの小さいノードは、重みの大きいノードの前に使用されます。

Nodes to be acquired on demand can be placed into their own Slurm partition.
オンデマンドで取得するノードは、独自のSlurmパーティションに配置できます。
This mode of operation can be used to use these nodes only if so requested by the user.
この操作モードは、ユーザーから要求された場合にのみ、これらのノードを使用するために使用できます。
Note that jobs can be submitted to multiple partitions and will use resources from whichever partition permits faster initiation.
ジョブは複数のパーティションに送信でき、より高速な開始が許可されているパーティションのリソースを使用することに注意してください。
A sample configuration in which nodes are added from the cloud when the workload exceeds available resources.
ワークロードが利用可能なリソースを超えたときにノードがクラウドから追加されるサンプル構成。
Users can explicitly request local resources or resources from the cloud by using the "--constraint" option.
ユーザーは、「-constraint」オプションを使用して、ローカルリソースまたはクラウドからのリソースを明示的に要求できます。

# Excerpt of slurm.conf
SelectType=select/cons_res
SelectTypeParameters=CR_CORE_Memory

SuspendProgram=/usr/sbin/slurm_suspend
ResumeProgram=/usr/sbin/slurm_suspend
SuspendTime=600
SuspendExcNodes=tux[0-127]
TreeWidth=128

NodeName=DEFAULT    Sockets=1 CoresPerSocket=4 ThreadsPerCore=2
NodeName=tux[0-127] Weight=1 Feature=local State=UNKNOWN
NodeName=ec[0-127]  Weight=8 Feature=cloud State=CLOUD
PartitionName=debug MaxTime=1:00:00 Nodes=tux[0-32] Default=yes
PartitionName=batch MaxTime=8:00:00 Nodes=tux[0-127],ec[0-127] Default=no

Operational Details

When the slurmctld daemon starts, all nodes with a state of CLOUD will be included in its internal tables, but these node records will not be seen with user commands or used by applications until allocated to some job.
slurmctldデーモンが起動すると、状態がCLOUDのすべてのノードが内部テーブルに含まれますが、これらのノードレコードは、何らかのジョブに割り当てられるまで、ユーザーコマンドで表示されたり、アプリケーションで使用されたりすることはありません。
After allocated, the ResumeProgram is executed and should do the following:
割り当てられた後、ResumeProgramが実行され、次のことを実行する必要があります。

  1. Boot the node
    ノードを起動します
  2. Configure and start Munge (depends upon configuration)
    Mungeを構成して起動します(構成によって異なります)
  3. Install the Slurm configuration file, slurm.conf, on the node.
    Slurm構成ファイルslurm.confをノードにインストールします。
    Note that configuration file will generally be identical on all nodes and not include NodeAddr or NodeHostname configuration parameters for any nodes in the cloud.
    構成ファイルは通常、すべてのノードで同一であり、クラウド内のノードのNodeAddrまたはNodeHostname構成パラメーターは含まれないことに注意してください。
    Slurm commands executed on this node only need to communicate with the slurmctld daemon on the SlurmctldHost.
    このノードで実行されるSlurmコマンドは、SlurmctldHost上のslurmctldデーモンとのみ通信する必要があります。
  4. Notify the slurmctld daemon of the node's hostname and network address:
    slurmctldデーモンにノードのホスト名とネットワークアドレスを通知します。

    scontrol update nodename=ec0 nodeaddr=123.45.67.89 nodehostname=whatever
    Note that the node address and hostname information set by the scontrol command are are preserved when the slurmctld daemon is restarted unless the "-c" (cold-start) option is used.
    scontrolコマンドで設定されたノードアドレスとホスト名の情報は、「-c」(コールドスタート)オプションを使用しない限り、slurmctldデーモンの再起動時に保持されることに注意してください。
  5. Start the slurmd daemon on the node
    ノードでslurmdデーモンを起動します

The SuspendProgram only needs to relinquish the node back to the cloud.
SuspendProgramは、ノードをクラウドに戻すだけで済みます。

An environment variable SLURM_NODE_ALIASES contains sets of node name, communication address and hostname.
環境変数SLURM_NODE_ALIASESには、ノード名、通信アドレス、およびホスト名のセットが含まれています。
The variable is set by salloc, sbatch, and srun.
変数は、salloc、sbatch、およびsrunによって設定されます。
It is then used by srun to determine the destination for job launch communication messages.
次に、srunは、ジョブ開始通信メッセージの宛先を決定するために使用します。
This environment variable is only set for nodes allocated from the cloud.
この環境変数は、クラウドから割り当てられたノードにのみ設定されます。
If a job is allocated some resources from the local cluster and others from the cloud, only those nodes from the cloud will appear in SLURM_NODE_ALIASES.
ジョブにローカルクラスターからのリソースとクラウドからのリソースが割り当てられている場合、クラウドのノードのみがSLURM_NODE_ALIASESに表示されます。
Each set of names and addresses is comma separated and the elements within the set are separated by colons.
名前とアドレスの各セットはコンマで区切られ、セット内の要素はコロンで区切られます。
For example:
例えば:

SLURM_NODE_ALIASES=ec0:123.45.67.8:foo,ec2,123.45.67.9:bar

Remaining Work

  • We need scripts to provision resources from EC2.
    EC2からリソースをプロビジョニングするためのスクリプトが必要です。
  • The SLURM_NODE_ALIASES environment variable needs to change if a job expands (adds resources).
    SLURM_NODE_ALIASES環境変数は、ジョブが拡張される(リソースを追加する)場合に変更する必要があります。
  • Some MPI implementations will not work due to the node naming.
    一部のMPI実装は、ノードの命名が原因で機能しません。
  • Some tests in Slurm's test suite fail.
    Slurmのテストスイートの一部のテストは失敗します。

Last modified 19 March 2020