Slurm Power Saving Guide

Slurm provides an integrated power saving mechanism for powering down idle nodes. Nodes that remain idle for a configurable period of time can be placed in a power saving mode, which can reduce power consumption or fully power down the node. The nodes will be restored to normal operation once work is assigned to them. For example, power saving can be accomplished using a cpufreq governor that can change CPU frequency and voltage (note that the cpufreq driver must be enabled in the Linux kernel configuration). Of particular note, Slurm can power nodes up or down at a configurable rate to prevent rapid changes in power demands. For example, starting a 1000 node job on an idle cluster could result in an instantaneous surge in power demand of multiple megawatts without Slurm's support to increase power demands in a gradual fashion.
Slurmは、アイドルノードの電源を切るための統合された省電力メカニズムを提供します。構成可能な期間アイドル状態になっているノードは、省電力モードにすることができます。これにより、消費電力を削減したり、ノードの電源を完全に切断したりできます。作業が割り当てられると、ノードは通常の動作に復元されます。たとえば、CPUの周波数と電圧を変更できるcpufreqガバナーを使用して省電力を実現できます(Linuxカーネル構成でcpufreqドライバーを有効にする必要があることに注意してください)。特に注目すべき点として、Slurmは構成可能な速度でノードの電源を投入または切断して、電力需要の急激な変化を防ぐことができます。たとえば、アイドル状態のクラスターで1000ノードのジョブを開始すると、Slurmのサポートなしで電力需要が段階的に増加することなく、数メガワットの電力需要が瞬間的に急増する可能性があります。

Configuration

A great deal of flexibility is offered in terms of when and how idle nodes are put into or removed from power save mode. Note that the Slurm control daemon, slurmctld, must be restarted to initially enable power saving mode. Changes in the configuration parameters (e.g. SuspendTime) will take effect after modifying the slurm.conf configuration file and executing "scontrol reconfig". The following configuration parameters are available:
アイドル状態のノードを省電力モードにしたり、省電力モードから削除したりするタイミングと方法に関して、非常に高い柔軟性が提供されます。最初に省電力モードを有効にするには、Slurm制御デーモンslurmctldを再起動する必要があることに注意してください。構成パラメーター(SuspendTimeなど)の変更は、slurm.conf構成ファイルを変更して「scontrol reconfig」を実行した後に有効になります。次の構成パラメータを使用できます。

  • SuspendTime: Nodes becomes eligible for power saving mode after being idle or down for this number of seconds. For efficient system utilization, it is recommended that the value of SuspendTime be at least as large as the sum of SuspendTimeout plus ResumeTimeout. A negative number disables power saving mode. The default value is -1 (disabled).
    SuspendTime:ノードは、この秒数アイドルまたはダウンした後、省電力モードの対象になります。システムを効率的に使用するには、SuspendTimeの値を少なくともSuspendTimeoutとResumeTimeoutの合計と同じ大きさにすることをお勧めします。負の数は省電力モードを無効にします。デフォルト値は-1(無効)です。
  • SuspendRate: Maximum number of nodes to be placed into power saving mode per minute. A value of zero results in no limits being imposed. The default value is 60. Use this to prevent rapid drops in power consumption.
    SuspendRate:1分間に省電力モードに移行するノードの最大数。値がゼロの場合、制限は課されません。デフォルト値は60です。これを使用して、消費電力の急激な低下を防ぎます。
  • ResumeRate: Maximum number of nodes to be removed from power saving mode per minute. A value of zero results in no limits being imposed. The default value is 300. Use this to prevent rapid increases in power consumption.
    ResumeRate:1分あたりに省電力モードから削除されるノードの最大数。値がゼロの場合、制限は課されません。デフォルト値は300です。これを使用して、消費電力の急激な増加を防ぎます。
  • SuspendProgram: Program to be executed to place nodes into power saving mode. The program executes as SlurmUser (as configured in slurm.conf). The argument to the program will be the names of nodes to be placed into power savings mode (using Slurm's hostlist expression format).
    SuspendProgram:ノードを省電力モードにするために実行されるプログラム。プログラムはSlurmUserとして実行されます(slurm.confで構成)。プログラムへの引数は、節電モードに置かれるノードの名前になります(Slurmのホストリスト式形式を使用)。
  • ResumeProgram: Program to be executed to remove nodes from power saving mode. The program executes as SlurmUser (as configured in slurm.conf). The argument to the program will be the names of nodes to be removed from power savings mode (using Slurm's hostlist expression format). This program may use the scontrol show node command to ensure that a node has booted and the slurmd daemon started. 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. If the node isn't actually rebooted (i.e. when multiple-slurmd is configured) starting slurmd with "-b" option might be useful. For reasons of reliability, ResumeProgram may execute more than once for a node when the slurmctld daemon crashes and is restarted.
    ResumeProgram:ノードを省電力モードから解除するために実行されるプログラム。プログラムはSlurmUserとして実行されます(slurm.confで構成)。プログラムへの引数は、省電力モードから削除するノードの名前になります(Slurmのホストリスト式形式を使用)。このプログラムはscontrol show nodeコマンドを使用して、ノードが起動し、slurmdデーモンが起動したことを確認します。slurmdデーモンが更新されたBootTimeで構成されたSlurmdTimeout値内で応答しない場合、ノードはDOWN状態になり、ノードを要求するジョブは再キューイングされます。ノードが実際に再起動されない場合(つまり、複数のslurmdが構成されている場合)、「-b」オプションを指定してslurmdを開始すると役立つ場合があります。信頼性の理由から、
  • SuspendTimeout: Maximum time permitted (in second) between when a node suspend request is issued and when the node shutdown is complete. At that time the node must ready for a resume request to be issued as needed for new workload. The default value is 30 seconds.
    SuspendTimeout:ノードの中断要求が発行されてからノードのシャットダウンが完了するまでの最大許容時間(秒単位)。その時点で、ノードは、再開要求が新しいワークロードの必要に応じて発行される準備ができている必要があります。デフォルト値は30秒​​です。
  • ResumeTimeout: Maximum time permitted (in seconds) between when a node resume request is issued and when the node is actually available for use. Nodes which fail to respond in this time frame will be marked DOWN and the jobs scheduled on the node requeued. Nodes which reboot after this time frame will be marked DOWN with a reason of "Node unexpectedly rebooted." The default value is 60 seconds.
    ResumeTimeout:ノード再開要求が発行されてからノードが実際に使用可能になるまでの最大許容時間(秒単位)。この時間内に応答しないノードはDOWNとマークされ、ノードでスケジュールされたジョブはキューに再登録されます。この時間枠の後に再起動したノードは、「ノードが予期せず再起動した」という理由でDOWNとマークされます。デフォルト値は60秒です。
  • SuspendExcNodes: List of nodes to never place in power saving mode. Use Slurm's hostlist expression format. By default, no nodes are excluded.
    SuspendExcNodes:節電モードにしないノードのリスト。Slurmのホストリスト式形式を使用します。デフォルトでは、除外されるノードはありません。
  • SuspendExcParts: List of partitions with nodes to never place in power saving mode. Multiple partitions may be specified using a comma separator. By default, no nodes are excluded.
    SuspendExcParts:節電モードにしないノードがあるパーティションのリスト。カンマ区切りを使用して複数のパーティションを指定できます。デフォルトでは、除外されるノードはありません。
  • BatchStartTimeout: Specifies how long to wait after a batch job start request is issued before we expect the batch job to be running on the compute node. Depending upon how nodes are returned to service, this value may need to be increased above its default value of 10 seconds.
    BatchStartTimeout:バッチジョブの開始リクエストが発行されてから、計算ノードでバッチジョブが実行されると予想されるまでの待機時間を指定します。ノードがサービスに戻る方法によっては、この値をデフォルト値の10秒より大きくする必要がある場合があります。

Note that SuspendProgram and ResumeProgram execute as SlurmUser on the node where the slurmctld daemon runs (primary and backup server nodes). Use of sudo may be required for SlurmUserto power down and restart nodes. If you need to convert Slurm's hostlist expression into individual node names, the scontrol show hostnames command may prove useful. The commands used to boot or shut down nodes will depend upon your cluster management tools.
SuspendProgramおよびResumeProgramは、slurmctldデーモンが実行されているノード(プライマリおよびバックアップサーバーノード)でSlurmUserとして実行されることに注意してください。SlurmUserがノードの電源をオフにして再起動するには、sudoの使用が必要になる場合があります。Slurmのホストリスト式を個々のノード名に変換する必要がある場合、scontrol show hostnamesコマンドが役立つことがあります。ノードの起動またはシャットダウンに使用されるコマンドは、クラスター管理ツールによって異なります。

Note that SuspendProgram and ResumeProgram are not subject to any time limits. They should perform the required action, ideally verify the action (e.g. node boot and start the slurmd daemon, thus the node is no longer non-responsive to slurmctld) and terminate. Long running programs will be logged by slurmctld, but not aborted.
SuspendProgramとResumeProgramには時間制限がありません。彼らは必要なアクションを実行し、理想的にはアクション(ノードの起動とslurmdデーモンの起動、つまりノードがslurmctldに応答しなくなった)を検証して終了する必要があります。長時間実行されているプログラムはslurmctldによってログに記録されますが、中止されません。

Also note that the stderr/out of the suspend and resume programs are not logged. If logging is desired it should be added to the scripts.
また、一時停止および再開プログラムのstderr / outはログに記録されないことに注意してください。ロギングが必要な場合は、スクリプトに追加する必要があります。

#!/bin/bash
# Example SuspendProgram
echo "`date` Suspend invoked $0 $*" >>/var/log/power_save.log
hosts=`scontrol show hostnames $1`
for host in $hosts
do
   sudo node_shutdown $host
done

#!/bin/bash
# Example ResumeProgram
echo "`date` Resume invoked $0 $*" >>/var/log/power_save.log
hosts=`scontrol show hostnames $1`
for host in $hosts
do
   sudo node_startup $host
done

Subject to the various rates, limits and exclusions, the power save code follows this logic:
さまざまなレート、制限、除外を条件として、省電力コードは次のロジックに従います。

  1. Identify nodes which have been idle for at least SuspendTime.
    少なくともSuspendTimeの間アイドル状態であったノードを特定します。
  2. Execute SuspendProgram with an argument of the idle node names.
    アイドルノード名の引数を指定してSuspendProgramを実行します。
  3. Identify the nodes which are in power save mode (a flag in the node's state field), but have been allocated to jobs.
    節電モード(ノードの状態フィールドのフラグ)であるが、ジョブに割り当てられているノードを特定します。
  4. Execute ResumeProgram with an argument of the allocated node names.
    割り当てられたノード名を引数としてResumeProgramを実行します。
  5. Once the slurmd responds, initiate the job and/or job steps allocated to it.
    slurmdが応答したら、それに割り当てられたジョブまたはジョブステップ、あるいはその両方を開始します。
  6. If the slurmd fails to respond within the value configured for SlurmdTimeout, the node will be marked DOWN and the job requeued if possible.
    slurmdがSlurmdTimeoutに構成された値内で応答しない場合、ノードはDOWNとマークされ、可能であればジョブが再キューイングされます。
  7. Repeat indefinitely.
    無期限に繰り返します。

The slurmctld daemon will periodically (every 10 minutes) log how many nodes are in power save mode using messages of this sort:
slurmctldデーモンは、次のようなメッセージを使用して、定期的に(10分ごとに)節電モードになっているノードの数をログに記録します。

[May 02 15:31:25] Power save mode 0 nodes
...
[May 02 15:41:26] Power save mode 10 nodes
...
[May 02 15:51:28] Power save mode 22 nodes

Using these logs you can easily see the effect of Slurm's power saving support. You can also configure Slurm with programs that perform no action as SuspendProgram and ResumeProgram to assess the potential impact of power saving mode before enabling it.
これらのログを使用すると、Slurmの省電力サポートの効果を簡単に確認できます。また、SurspendProgramおよびResumeProgramとしてアクションを実行しないプログラムでSlurmを構成して、省電力モードを有効にする前に、潜在的な影響を評価することもできます。

Use of Allocations

A resource allocation request will be granted as soon as resources are selected for use, possibly before the nodes are all available for use. The launching of job steps will be delayed until the required nodes have been restored to service (it prints a warning about waiting for nodes to become available and periodically retries until they are available).
リソース割り当て要求は、リソースが選択された直後に、おそらくノードがすべて使用可能になる前に許可されます。ジョブステップの起動は、必要なノードがサービスに復元されるまで遅延します(ノードが使用可能になるのを待機する警告が出力され、ノードが使用可能になるまで定期的に再試行されます)。

In the case of an sbatch command, the batch program will start when node zero of the allocation is ready for use and pre-processing can be performed as needed before using srun to launch job steps. The sbatch --wait-all-nodes=<value> command can be used to override this behavior on a per-job basis and a system-wide default can be set with the SchedulerParameters=sbatch_wait_nodes option.
sbatchコマンドの場合、バッチプログラムは、割り当てのノード0が使用可能になったときに開始され、srunを使用してジョブステップを起動する前に、必要に応じて前処理を実行できます。sbatch --wait-all-nodes = コマンドを使用して、この動作をジョブごとにオーバーライドできます。システム全体のデフォルトは、SchedulerParameters = sbatch_wait_nodesオプションで設定できます。

In the case of the salloc command, once the allocation is made a new shell will be created on the login node. The salloc --wait-all-nodes=<value> command can be used to override this behavior on a per-job basis and a system-wide default can be set with the SchedulerParameters=salloc_wait_nodes option.
sallocコマンドの場合、割り当てが行われると、ログインノードに新しいシェルが作成されます。salloc --wait-all-nodes = コマンドを使用して、ジョブごとにこの動作をオーバーライドできます。システム全体のデフォルトは、SchedulerParameters = salloc_wait_nodesオプションで設定できます。

Fault Tolerance

If the slurmctld daemon is terminated gracefully, it will wait up to SuspendTimeout or ResumeTimeout (whichever is larger) for any spawned SuspendProgram or ResumeProgram to terminate before the daemon terminates. If the spawned program does not terminate within that time period, the event will be logged and slurmctld will exit in order to permit another slurmctld daemon to be initiated. Synchronization problems could also occur when the slurmctld daemon crashes (a rare event) and is restarted.
slurmctldデーモンが正常に終了した場合、デーモンは終了する前に、生成されたSuspendProgramまたはResumeProgramが終了するまでSuspendTimeoutまたはResumeTimeout(どちらか大きい方)まで待機します。生成されたプログラムがその時間内に終了しない場合、イベントがログに記録され、slurmctldが終了して、別のslurmctldデーモンを開始できるようにします。同期の問題は、slurmctldデーモンがクラッシュし(まれなイベント)、再起動したときにも発生する可能性があります。

In either event, the newly initiated slurmctld daemon (or the backup server) will recover saved node state information that may not accurately describe the actual node state. In the case of a failed SuspendProgram, the negative impact is limited to increased power consumption, so no special action is currently taken to execute SuspendProgram multiple times in order to ensure the node is in a reduced power mode. The case of a failed ResumeProgram is more serious in that the node could be placed into a DOWN state and/or jobs could fail. In order to minimize this risk, when the slurmctld daemon is started and node which should be allocated to a job fails to respond, the ResumeProgram will be executed (possibly for a second time).
どちらの場合も、新しく開始されたslurmctldデーモン(またはバックアップサーバー)は、実際のノード状態を正確に記述していない可能性がある保存されたノード状態情報を回復します。SuspendProgramに障害が発生した場合、悪影響は電力消費の増加に限定されるため、ノードが確実に省電力モードになるようにするために、現在SuspendProgramを複数回実行する特別なアクションは行われていません。ResumeProgramが失敗した場合は、ノードがDOWN状態になったり、ジョブが失敗したりする可能性があるため、より深刻です。このリスクを最小限に抑えるために、slurmctldデーモンが開始され、ジョブに割り当てられるべきノードが応答しない場合、ResumeProgramが実行されます(おそらく2回目)。

Booting Different Images

Slurm's PrologSlurmctld configuration parameter can identify a program to boot different operating system images for each job based upon its constraint field (or possibly comment). If you want ResumeProgram to boot a various images according to job specifications, it will need to be a fairly sophisticated program and perform the following actions:
SlurmのPrologSlurmctld構成パラメーターは、制約フィールド(またはコメント)に基づいて、ジョブごとに異なるオペレーティングシステムイメージを起動するプログラムを識別できます。ResumeProgramでジョブの仕様に応じてさまざまなイメージを起動する場合は、かなり高度なプログラムであり、次のアクションを実行する必要があります。

  1. Determine which jobs are associated with the nodes to be booted
    起動するノードに関連付けられているジョブを特定する
  2. Determine which image is required for each job and
    各ジョブに必要なイメージを決定し、
  3. Boot the appropriate image for each node
    各ノードに適切なイメージを起動します

Last modified 11 November 2019