Job Launch Design Guide

Overview

This guide describes at a high level the processes which occur in order to initiate a job including the daemons and plugins involved in the process.
このガイドでは、プロセスに関与するデーモンやプラグインなど、ジョブを開始するために発生するプロセスを大まかに説明します。
It describes the process of job allocation, step allocation, task launch and job termination.
ジョブの割り当て、ステップの割り当て、タスクの起動、およびジョブの終了のプロセスについて説明します。
The functionality of tens of thousands of lines of code has been distilled here to a couple of pages of text, so much detail is missing.
ここでは、数万行のコードの機能が数ページのテキストに抽出されているため、詳細が欠落しています。

Job Allocation

The first step of the process is to create a job allocation, which is a claim on compute resources.
プロセスの最初のステップは、コンピューティングリソースに対する要求であるジョブ割り当てを作成することです。
A job allocation can be created using the salloc, sbatch or srun command.
ジョブの割り当ては、salloc、sbatch、またはsrunコマンドを使用して作成できます。
The salloc and sbatch commands create resource allocations while the srun command will create a resource allocation (if not already running within one) plus launch tasks.
sallocコマンドとsbatchコマンドはリソース割り当てを作成し、srunコマンドはリソース割り当て(まだ実行されていない場合)と起動タスクを作成します。
Each of these commands will fill in a data structure identifying the specifications of the job allocation requirement (e.g. node count, task count, etc.) based upon command line options and environment variables and send the RPC to the slurmctld daemon.
これらの各コマンドは、コマンドラインオプションと環境変数に基づいてジョブ割り当て要件の仕様(ノード数、タスク数など)を識別するデータ構造を入力し、RPCをslurmctldデーモンに送信します。
If the new job request is the highest priority, the slurmctld daemon will attempt to select resources for it immediately, otherwise it will validate that the job request can be satisfied at some time and queue the request.
新しいジョブ要求が最高の優先度である場合、slurmctldデーモンはすぐにそのリソースを選択しようとします。そうでない場合、ジョブ要求がいつか満たされるかどうかを検証し、要求をキューに入れます。
In either case the request will receive a response almost immediately containing one of the following:
いずれの場合も、要求は次のいずれかを含む応答をほぼ即座に受信します。

  • A job ID and the resource allocation specification (nodes, cpus, etc.)
    ジョブIDとリソース割り当ての仕様(ノード、CPUなど)
  • A job ID and notification of the job being in a queued state OR
    ジョブIDとジョブがキュー状態にあることの通知または
  • An error code
    エラーコード

The process of selecting resources for a job request involves multiple steps, some of which involve plugins.
ジョブリクエストのリソースを選択するプロセスには複数のステップが含まれ、その一部にはプラグインが含まれます。
The process is as follows:
プロセスは次のとおりです。

  1. Call job_submit plugins to modify the request as appropriate
    job_submitプラグインを呼び出して、必要に応じてリクエストを変更します
  2. Validate that the options are valid for this user (e.g. valid partition name, valid limits, etc.)
    オプションがこのユーザーに対して有効であることを検証します(たとえば、有効なパーティション名、有効な制限など)。
  3. Determine if this job is the highest priority runnable job, if so then really try to allocate resources for it now, otherwise only validate that it could run if no other jobs existed
    このジョブが最も優先度の高い実行可能ジョブであるかどうかを判断します。そうである場合は、今すぐリソースを割り当ててみてください。そうでない場合は、他のジョブが存在しない場合にのみ実行できることを検証してください
  4. Determine which nodes could be used for the job.
    ジョブに使用できるノードを決定します。
    If the feature specification uses an exclusive OR option, then multiple iterations of the selection process below will be required with disjoint sets of nodes
    機能仕様で排他的論理和オプションを使用する場合は、ノードの互いに素なセットを使用して、以下の選択プロセスを複数回繰り返す必要があります。
  5. Call the select plugin to select the best resources for the request
    selectプラグインを呼び出して、リクエストに最適なリソースを選択します
  6. The select plugin will consider network topology and the topology within a node (e.g. sockets, cores, and threads) to select the best resources for the job
    selectプラグインは、ネットワークトポロジとノード内のトポロジ(ソケット、コア、スレッドなど)を考慮して、ジョブに最適なリソースを選択します。
  7. If the job can not be initiated using available resources and preemption support is configured, the select plugin will also determine if the job can be initiated after preempting lower priority jobs.
    使用可能なリソースを使用してジョブを開始できず、プリエンプションサポートが構成されている場合、selectプラグインは、優先度の低いジョブをプリエンプションした後にジョブを開始できるかどうかも判断します。
    If so then initiate preemption as needed to start the job
    その場合は、必要に応じてプリエンプションを開始してジョブを開始します

Step Allocation

The srun command is always used for job step creation.
srunコマンドは、ジョブステップの作成に常に使用されます。
It fills in a job step request RPC using information from the command line and environment variables then sends that request to the slurmctld daemon.
コマンドラインと環境変数からの情報を使用してジョブステップ要求RPCに入力し、その要求をslurmctldデーモンに送信します。
It is important to note that many of the srun options are intended for job allocation and are not supported by the job step request RPC (for example the socket, core and thread information is not supported).
srunオプションの多くはジョブの割り当てを目的としており、ジョブステップ要求RPCではサポートされていないことに注意することが重要です(たとえば、ソケット、コア、およびスレッドの情報はサポートされていません)。
If a job step uses all of the resources allocated to the job then the lack of support for some options is not important.
ジョブステップがジョブに割り当てられたすべてのリソースを使用する場合、一部のオプションのサポートの欠如は重要ではありません。
If one wants to execute multiple job steps using various subsets of resources allocated to the job, this shortcoming could prove problematic.
ジョブに割り当てられたリソースのさまざまなサブセットを使用して複数のジョブステップを実行する場合、この欠点が問題になる可能性があります。
It is also worth noting that the logic used to select resources for a job step is relatively simple and entirely contained within the slurmctld daemon code (the select plugin is not used for job steps).
また、ジョブステップのリソースを選択するために使用されるロジックは比較的単純であり、slurmctldデーモンコード内に完全に含まれていることにも注意してください(選択プラグインはジョブステップには使用されません)。
If the request can not be immediately satisfied due to a request for exclusive access to resources, the appropriate error message will be sent and the srun command will retry the request on a periodic basis.
リソースへの排他的アクセスの要求のために要求をすぐに満たすことができない場合、適切なエラーメッセージが送信され、srunコマンドは定期的に要求を再試行します。
(NOTE: It would be desirable to queue the job step requests to support job step dependencies and better performance in the initiation of job steps, but that is not currently supported.)
(注:ジョブステップの依存関係をサポートし、ジョブステップの開始時のパフォーマンスを向上させるために、ジョブステップ要求をキューに入れることが望ましいですが、現在はサポートされていません。)
If the request can be satisfied, the response contains a digitally signed credential (by the cred plugin) identifying the resources to be used.
要求が満たされる場合、応答には、使用されるリソースを識別するデジタル署名された資格情報(credプラグインによる)が含まれます。

Task Launch

The srun command builds a task launch request data structure including the credential, executable name, file names, etc. and sends it to the slurmd daemon on node zero of the job step allocation.
srunコマンドは、資格情報、実行可能ファイル名、ファイル名などを含むタスク起動要求データ構造を構築し、それをジョブステップ割り当てのノード0のslurmdデーモンに送信します。
The slurmd daemon validates the signature and forwards the request to the slurmd daemons on other nodes to launch tasks for that job step.
slurmdデーモンは署名を検証し、要求を他のノードのslurmdデーモンに転送して、そのジョブステップのタスクを起動します。
The degree of fanout in this message forwarding is configurable using the TreeWidth parameter.
このメッセージ転送のファンアウトの程度は、TreeWidthパラメーターを使用して構成できます。
Each slurmd daemon tests that the job has not been cancelled since the credential was issued (due to a possible race condition) and spawns a slurmstepd program to manage the job step.
各slurmdデーモンは、資格情報が発行されてから(競合状態の可能性があるため)ジョブがキャンセルされていないことをテストし、ジョブステップを管理するためのslurmstepdプログラムを生成します。
Note that the slurmctld daemon is not directly involved in task launch in order to minimize the overhead on this critical resource.
この重要なリソースのオーバーヘッドを最小限に抑えるために、slurmctldデーモンはタスクの起動に直接関与しないことに注意してください。

Each slurmstepd program executes a single job step.
各slurmstepdプログラムは、単一のジョブステップを実行します。
Besides the functions listed below, the slurmstepd program also executes several SPANK plugin functions at various times.
以下にリストされている関数に加えて、slurmstepdプログラムは、さまざまな時点でいくつかのSPANKプラグイン関数も実行します。

  1. Performs MPI setup (using the appropriate plugin)
    MPIセットアップを実行します(適切なプラグインを使用)
  2. Calls the switch plugin to perform any needed network configuration
    スイッチプラグインを呼び出して、必要なネットワーク構成を実行します
  3. Creates a container for the job step using a proctrack plugin
    proctrackプラグインを使用してジョブステップのコンテナを作成します
  4. Change user ID to that of the user
    ユーザーIDをユーザーのIDに変更します
  5. Configures I/O for the tasks (either using files or a socket connection back to the srun command
    タスクのI / Oを構成します(ファイルまたはsrunコマンドへのソケット接続を使用)
  6. Sets up environment variables for the tasks including many task-specific environment variables
    多くのタスク固有の環境変数を含むタスクの環境変数を設定します
  7. Fork/exec the tasks
    タスクをフォーク/実行する

Job Step Termination

There are several ways in which a job step or job can terminate, each with slight variation in the logic executed.
ジョブステップまたはジョブを終了する方法はいくつかあり、それぞれ実行されるロジックがわずかに異なります。
The simplest case is if the tasks run to completion.
最も単純なケースは、タスクが完了するまで実行される場合です。
The srun will note the termination of output from the tasks and notify the slurmctld daemon that the job step has completed.
srunは、タスクからの出力の終了を記録し、ジョブステップが完了したことをslurmctldデーモンに通知します。
slurmctld will simply log the job step termination.
slurmctldは、単にジョブステップの終了をログに記録します。
The job step can also be explicitly cancelled by a user, reach the end of its time limit, etc.
ジョブステップは、ユーザーが明示的にキャンセルしたり、制限時間の終わりに到達したりすることもできます。
and those follow a sequence of steps very similar to that for job termination, which is described below.
これらは、以下で説明するジョブ終了の場合と非常によく似た一連の手順に従います。

Job Termination

Job termination can either be user initiated (e.g. scancel command) or system initiated (e.g. time limit reached).
ジョブの終了は、ユーザーが開始する(例:scancelコマンド)か、システムが開始する(例:制限時間に達する)ことができます。
The termination ultimately requires the slurmctld daemon to notify the slurmd daemons on allocated nodes that the job is to be ended.
最終的には、slurmctldデーモンが、割り当てられたノード上のslurmdデーモンにジョブが終了することを通知する必要があります。
The slurmd daemon does the following:
slurmdデーモンは次のことを行います。

  1. Send a SIGCONT and SIGTERM signal to any user tasks
    SIGCONTおよびSIGTERMシグナルを任意のユーザータスクに送信します
  2. Wait KilLWait seconds if there are any user tasks
    ユーザータスクがある場合は、KilLWait秒待ちます
  3. Send a SIGKILL signal to any user tasks
    ユーザータスクにSIGKILLシグナルを送信する
  4. Wait for all tasks to complete
    すべてのタスクが完了するのを待ちます
  5. Execute any Epilog program
    Epilogプログラムを実行します
  6. Send an epilog_complete RPC to the slurmctld daemon
    epilog_completeRPCをslurmctldデーモンに送信します

Last modified 7 January 2019