Preemption
Slurm supports job preemption, the act of "stopping" one or more "low-priority"
jobs to let a "high-priority" job run.
Slurmは、ジョブのプリエンプション、つまり1つ以上の「優先度の低い」ジョブを「停止」して「優先度の高い」ジョブを実行させる動作をサポートします。
Job preemption is implemented as a variation of Slurm's
Gang Scheduling logic.
ジョブプリエンプションは、Slurmのギャングスケジューリングロジックのバリエーションとして実装されています。
When a job that can preempt others is allocated resources that are
already allocated to one or more jobs that could be preempted by the first job,
the preemptable job(s) are preempted.
他のジョブをプリエンプトできるジョブに、最初のジョブによってプリエンプトされる可能性のある1つ以上のジョブにすでに割り当てられているリソースが割り当てられると、プリエンプト可能なジョブがプリエンプトされます。
Based on the configuration the preempted job(s) can be cancelled, or can be
requeued and started using other resources, or suspended and resumed once the
preemptor job completes, or can even share resources with the preemptor using
Gang Scheduling.
構成に基づいて、プリエンプトされたジョブをキャンセルしたり、キューに入れ直して他のリソースを使用して開始したり、プリエンプタージョブが完了したら一時停止して再開したり、ギャングスケジューリングを使用してプリエンプターとリソースを共有したりすることもできます。
The PriorityTier of the Partition of the job or its Quality Of Service (QOS)
can be used to identify which jobs can preempt or be preempted by other jobs.
ジョブのパーティションのPriorityTierまたはそのサービス品質(QOS)を使用して、どのジョブをプリエンプトできるか、または他のジョブによってプリエンプトできるかを識別できます。
Slurm offers the ability to configure the preemption mechanism used on a per
partition or per QOS basis.
Slurmは、パーティションごとまたはQOSごとに使用されるプリエンプションメカニズムを構成する機能を提供します。
For example, jobs in a low priority queue may get requeued,
while jobs in a medium priority queue may get suspended.
たとえば、優先度の低いキューのジョブは再キューイングされ、優先度の高いキューのジョブは一時停止される場合があります。
Configuration
There are several important configuration parameters relating to preemption:
プリエンプションに関連するいくつかの重要な構成パラメーターがあります。
-
SelectType: Slurm job preemption logic supports
nodes allocated by the select/linear plugin,
socket/core/CPU resources allocated by the select/cons_res and
select/cons_tres plugins, or select/cray_aries for Cray XC
systems without ALPS.
SelectType:Slurmジョブプリエンプションロジックは、select / linearプラグインによって割り当てられたノード、select / cons_resおよびselect / cons_tresプラグインによって割り当てられたソケット/コア/ CPUリソース、またはALPSのないCrayXCシステムのselect / cray_ariesをサポートします。
-
SelectTypeParameter: Since resources may be getting over-allocated
with jobs (suspended jobs remain in memory), the resource selection
plugin should be configured to track the amount of memory used by each job to
ensure that memory page swapping does not occur.
SelectTypeParameter:リソースがジョブで過剰に割り当てられる可能性があるため(中断されたジョブはメモリに残ります)、リソース選択プラグインは、メモリページのスワッピングが発生しないように、各ジョブで使用されるメモリの量を追跡するように構成する必要があります。
When select/linear is chosen, we recommend setting SelectTypeParameter=CR_Memory.
select / linearを選択する場合は、SelectTypeParameter = CR_Memoryを設定することをお勧めします。
When select/cons_res or select/cons_tres are chosen, we recommend including Memory as a resource (e.g. SelectTypeParameter=CR_Core_Memory).
select / cons_resまたはselect / cons_tresを選択する場合は、リソースとしてメモリを含めることをお勧めします(例:SelectTypeParameter = CR_Core_Memory)。
NOTE: Unless PreemptMode=SUSPEND,GANG these memory management parameters are not critical.
注:PreemptMode = SUSPEND、GANGでない限り、これらのメモリ管理パラメータは重要ではありません。
-
DefMemPerCPU: Since job requests may not explicitly specify
a memory requirement, we also recommend configuring
DefMemPerCPU (default memory per allocated CPU) or
DefMemPerNode (default memory per allocated node).
DefMemPerCPU:ジョブ要求はメモリ要件を明示的に指定しない場合があるため、DefMemPerCPU(割り当てられたCPUごとのデフォルトメモリ)またはDefMemPerNode(割り当てられたノードごとのデフォルトメモリ)を構成することもお勧めします。
It may also be desirable to configure MaxMemPerCPU (maximum memory per allocated CPU) or MaxMemPerNode (maximum memory per allocated node) in slurm.conf.
slurm.confでMaxMemPerCPU(割り当てられたCPUあたりの最大メモリ)またはMaxMemPerNode(割り当てられたノードあたりの最大メモリ)を構成することも望ましい場合があります。
Users can use the --mem or --mem-per-cpu option at job submission time to specify their memory requirements.
ユーザーは、ジョブの送信時に--memまたは--mem-per-cpuオプションを使用して、メモリ要件を指定できます。
NOTE: Unless PreemptMode=SUSPEND,GANG these memory management parameters are not critical.
注:PreemptMode = SUSPEND、GANGでない限り、これらのメモリ管理パラメータは重要ではありません。
-
GraceTime: Specifies a time period for a job to execute after
it is selected to be preempted.
GraceTime:プリエンプトするように選択された後、ジョブが実行される期間を指定します。
This option can be specified by partition or QOS using the slurm.conf file or database respectively.
このオプションは、slurm.confファイルまたはデータベースをそれぞれ使用してパーティションまたはQOSで指定できます。
This option is only honored if PreemptMode=CANCEL.
このオプションは、PreemptMode = CANCELの場合にのみ適用されます。
The GraceTime is specified in seconds and the default value is zero, which results in no preemption delay.
GraceTimeは秒単位で指定され、デフォルト値はゼロです。これにより、プリエンプションの遅延は発生しません。
Once a job has been selected for preemption, its end time is set to the current time plus GraceTime.
ジョブがプリエンプション用に選択されると、その終了時刻は現在の時刻にGraceTimeを加えたものに設定されます。
The job is immediately sent SIGCONT and SIGTERM signals in order to provide notification of its imminent termination.
ジョブは、その差し迫った終了の通知を提供するために、すぐにSIGCONTおよびSIGTERMシグナルを送信されます。
This is followed by the SIGCONT, SIGTERM and SIGKILL signal sequence upon reaching its new end time.
これに続いて、新しい終了時刻に達すると、SIGCONT、SIGTERM、およびSIGKILLシグナルシーケンスが続きます。
-
JobAcctGatherType and JobAcctGatherFrequency: The "maximum data segment
size" and "maximum virtual memory size" system limits will be configured for
each job to ensure that the job does not exceed its requested amount of memory.
JobAcctGatherTypeおよびJobAcctGatherFrequency:「最大データセグメントサイズ」および「最大仮想メモリサイズ」のシステム制限は、ジョブが要求されたメモリ量を超えないように、ジョブごとに構成されます。
If you wish to enable additional enforcement of memory limits, configure job accounting with the JobAcctGatherType and JobAcctGatherFrequency parameters.
メモリ制限の追加の適用を有効にする場合は、JobAcctGatherTypeパラメーターとJobAcctGatherFrequencyパラメーターを使用してジョブアカウンティングを構成します。
When accounting is enabled and a job exceeds its configured memory limits, it will be canceled in order to prevent it from adversely affecting other jobs sharing the same resources.
アカウンティングが有効になっていて、ジョブが構成されたメモリ制限を超えると、同じリソースを共有する他のジョブに悪影響を与えないように、ジョブはキャンセルされます。
NOTE: Unless PreemptMode=SUSPEND,GANG these memory management parameters are not critical.
注:PreemptMode = SUSPEND、GANGでない限り、これらのメモリ管理パラメータは重要ではありません。
-
PreemptMode: Mechanism used to preempt jobs or enable gang scheduling.
PreemptMode:ジョブをプリエンプトしたり、ギャングスケジューリングを有効にしたりするために使用されるメカニズム。
When the PreemptType parameter is set to enable preemption, the PreemptMode in the main section of slurm.conf selects the default mechanism used to preempt the preemptable jobs for the cluster.
PreemptTypeパラメーターがプリエンプションを有効にするように設定されている場合、slurm.confのメインセクションのPreemptModeは、クラスターのプリエンプション可能なジョブをプリエンプションするために使用されるデフォルトのメカニズムを選択します。
PreemptMode may be specified on a per partition basis to override this default value if PreemptType=preempt/partition_prio.
PreemptType = preempt / partition_prioの場合、PreemptModeをパーティションごとに指定して、このデフォルト値をオーバーライドできます。
Alternatively, it can be specified on a per QOS basis if PreemptType=preempt/qos.
または、PreemptType = preempt / qosの場合、QOSごとに指定できます。
In either case, a valid default PreemptMode value must be specified for the cluster as a whole when preemption is enabled.
いずれの場合も、プリエンプションが有効になっている場合は、クラスター全体に対して有効なデフォルトのPreemptMode値を指定する必要があります。
The GANG option is used to enable gang scheduling independent of whether preemption is enabled (i.e. independent of PreemptType).
GANGオプションは、プリエンプションが有効かどうかに関係なく(つまり、PreemptTypeに関係なく)ギャングスケジューリングを有効にするために使用されます。
It can be specified in addition to other PreemptMode settings, with the two options comma separated (e.g. PreemptMode=SUSPEND,GANG).
他のPreemptMode設定に加えて、2つのオプションをコンマで区切って指定できます(例:PreemptMode = SUSPEND、GANG)。
-
OFF: Is the default value and disables job preemption and gang
scheduling.
OFF:デフォルト値であり、ジョブのプリエンプションとギャングスケジューリングを無効にします。
It is only compatible with PreemptType=preempt/none.
PreemptType = preempt / noneとのみ互換性があります。
-
CANCEL: The preempted job will be cancelled.
キャンセル:プリエンプトされたジョブはキャンセルされます。
-
GANG: Enables gang scheduling (time slicing) of jobs in the same
partition, and allows the resuming of suspended jobs.
GANG:同じパーティション内のジョブのギャングスケジューリング(タイムスライス)を有効にし、中断されたジョブの再開を許可します。
NOTE: Gang scheduling is performed independently for each partition, so if you only want time-slicing by OverSubscribe, without any preemption, then configuring partitions with overlapping nodes is not recommended.
注:ギャングスケジューリングはパーティションごとに個別に実行されるため、プリエンプションなしでOverSubscribeによるタイムスライスのみが必要な場合は、ノードが重複するパーティションを構成することはお勧めしません。
On the other hand, if you want to use PreemptType=preempt/partition_prio to allow jobs from higher PriorityTier partitions to Suspend jobs from lower PriorityTier partitions, then you will need overlapping partitions, and PreemptMode=SUSPEND,GANG to use Gang scheduler to resume the suspended job(s).
一方、PreemptType = preempt / partition_prioを使用して、優先度の高いパーティションからのジョブを優先度の低いパーティションからのジョブを一時停止できるようにする場合は、パーティションをオーバーラップさせる必要があります。PreemptMode= SUSPEND、GANGを使用して、ギャングスケジューラを使用して再開します。中断されたジョブ。
In either case, time-slicing won't happen between jobs on different partitions.
いずれの場合も、異なるパーティション上のジョブ間でタイムスライスは発生しません。
-
REQUEUE: Preempts jobs by requeuing them (if possible) or canceling
them.
REQUEUE:ジョブを再キューイング(可能な場合)またはキャンセルすることにより、ジョブをプリエンプトします。
For jobs to be requeued they must have the "--requeue" sbatch option set or the cluster wide JobRequeue parameter in slurm.conf must be set to 1.
ジョブを再キューイングするには、「-requeue」スバッチオプションを設定するか、slurm.confのクラスター全体のJobRequeueパラメーターを1に設定する必要があります。
-
SUSPEND: The preempted jobs will be suspended, and later the Gang
scheduler will resume them.
一時停止:プリエンプトされたジョブは一時停止され、後でギャングスケジューラーがジョブを再開します。
Therefore, the SUSPEND preemption mode always needs the GANG option to be specified at the cluster level.
したがって、SUSPENDプリエンプションモードでは、常にGANGオプションをクラスターレベルで指定する必要があります。
Also, because the suspended jobs will still use memory on the allocated nodes, Slurm needs to be able to track memory resources to be able to suspend jobs.
また、中断されたジョブは割り当てられたノードのメモリを引き続き使用するため、Slurmは、ジョブを中断できるようにメモリリソースを追跡できる必要があります。
NOTE: Because gang scheduling is performed independently for each partition, if using PreemptType=preempt/partition_prio then jobs in higher PriorityTier partitions will suspend jobs in lower PriorityTier partitions to run on the released resources.
注:ギャングスケジューリングはパーティションごとに個別に実行されるため、PreemptType = preempt / partition_prioを使用すると、PriorityTierの高いパーティションのジョブは、解放されたリソースで実行するためにPriorityTierの低いパーティションのジョブを一時停止します。
Only when the preemptor job ends then the suspended jobs will be resumed by the Gang scheduler.
プリエンプタージョブが終了した場合にのみ、中断されたジョブがギャングスケジューラによって再開されます。
If PreemptType=preempt/qos is configured and if the preempted job(s) and the preemptor job from are on the same partition, then they will share resources with the Gang scheduler (time-slicing).
PreemptType = preempt / qosが構成されていて、プリエンプトされたジョブとからのプリエンプタージョブが同じパーティション上にある場合、それらはギャングスケジューラーとリソースを共有します(タイムスライス)。
If not (i.e. if the preemptees and preemptor are on different partitions) then the preempted jobs will remain suspended until the preemptor ends.
そうでない場合(つまり、プリエンプティとプリエンプターが異なるパーティションにある場合)、プリエンプトされたジョブは、プリエンプターが終了するまで中断されたままになります。
-
OFF: Is the default value and disables job preemption and gang
scheduling.
-
PreemptType: Specifies the plugin used to identify which jobs can be
preempted in order to start a pending job.
PreemptType:保留中のジョブを開始するためにプリエンプトできるジョブを識別するために使用されるプラグインを指定します。
- preempt/none: Job preemption is disabled (default).
プリエンプション/なし:ジョブのプリエンプションは無効になっています(デフォルト)。 - preempt/partition_prio: Job preemption is based upon partition
PriorityTier.
preempt / partition_prio:ジョブのプリエンプションはパーティションPriorityTierに基づいています。
Jobs in higher PriorityTier partitions may preempt jobs from lower PriorityTier partitions.
PriorityTierの高いパーティションのジョブは、PriorityTierの低いパーティションからジョブをプリエンプトする場合があります。
This is not compatible with PreemptMode=OFF.
これはPreemptMode = OFFと互換性がありません。 - preempt/qos: Job preemption rules are specified by Quality Of
Service (QOS) specifications in the Slurm database.
preempt / qos:ジョブプリエンプションルールは、SlurmデータベースのQuality Of Service(QOS)仕様によって指定されます。
This option is not compatible with PreemptMode=OFF.
このオプションは、PreemptMode = OFFと互換性がありません。
A configuration of PreemptMode=SUSPEND is only supported by the SelectType=select/cons_res and SelectType=select/cons_tres plugins.
PreemptMode = SUSPENDの構成は、SelectType = select / cons_resおよびSelectType = select / cons_tresプラグインでのみサポートされます。
See the sacctmgr man page to configure the options of preempt/qos.
preempt / qosのオプションを設定するには、sacctmgrのマニュアルページを参照してください。
- preempt/none: Job preemption is disabled (default).
-
PreemptExemptTime: Specifies minimum run time of jobs before they are
considered for preemption.
PreemptExemptTime:プリエンプションの対象と見なされる前のジョブの最小実行時間を指定します。
Unlike GraceTime, this is honored for all values of PreemptMode.
GraceTimeとは異なり、これはPreemptModeのすべての値に適用されます。
It is specified as a time string: A time of -1 disables the option, equivalent to 0.
時間文字列として指定されます。時間が-1の場合、0に相当するオプションが無効になります。
Acceptable time formats include "minutes", "minutes:seconds", "hours:minutes:seconds", "days\-hours", "days\-hours:minutes", and "days\-hours:minutes:seconds".
使用可能な時間形式には、「分」、「分:秒」、「時間:分:秒」、「日-時間」、「日-時間:分」、および「日-時間:分:秒」があります。
PreemptEligibleTime is shown in the output of "scontrol show job <job id>"
PreemptEligibleTimeは、「scontrol show job <jobid>」の出力に表示されます。
-
PriorityTier: Configure the partition's PriorityTier setting
relative to other partitions to control the preemptive behavior when
PreemptType=preempt/partition_prio.
PriorityTier:他のパーティションと比較してパーティションのPriorityTier設定を構成し、PreemptType = preempt / partition_prioの場合のプリエンプティブな動作を制御します。
This option is not relevant if PreemptType=preempt/qos.
PreemptType = preempt / qosの場合、このオプションは関係ありません。
If two jobs from two different partitions are allocated to the same resources, the job in the partition with the greater PriorityTier value will preempt the job in the partition with the lesser PriorityTier value.
2つの異なるパーティションからの2つのジョブが同じリソースに割り当てられている場合、PriorityTier値が大きいパーティション内のジョブは、PriorityTier値が小さいパーティション内のジョブをプリエンプトします。
If the PriorityTier values of the two partitions are equal then no preemption will occur.
2つのパーティションのPriorityTier値が等しい場合、プリエンプションは発生しません。
The default PriorityTier value is 1.
デフォルトのPriorityTier値は1です。
-
OverSubscribe: Configure the partition's OverSubscribe setting to
FORCE for all partitions in which job preemption using a suspend/resume
mechanism is used.
OverSubscribe:サスペンド/レジュームメカニズムを使用したジョブプリエンプションが使用されているすべてのパーティションに対して、パーティションのOverSubscribe設定をFORCEに構成します。
The FORCE option supports an additional parameter that controls how many jobs can oversubscribe a compute resource (FORCE[:max_share]).
FORCEオプションは、コンピューティングリソースをオーバーサブスクライブできるジョブの数を制御する追加のパラメーターをサポートします(FORCE [:max_share])。
By default the max_share value is 4.
デフォルトでは、max_shareの値は4です。
In order to preempt jobs (and not gang schedule them), always set max_share to 1.
ジョブをプリエンプトするために(そしてそれらをギャングスケジュールしないために)、常にmax_shareを1に設定します。
To allow up to 2 jobs from this partition to be allocated to a common resource (and gang scheduled), set OverSubscribe=FORCE:2.
このパーティションから最大2つのジョブを共通のリソースに割り当てる(およびギャングをスケジュールする)には、OverSubscribe = FORCE:2を設定します。
NOTE: PreemptType=preempt/qos will permit one additional job to be run on the partition if started due to job preemption.
注:PreemptType = preempt / qosは、ジョブのプリエンプションが原因で開始された場合、パーティションで1つの追加ジョブを実行できるようにします。
For example, a configuration of OverSubscribe=FORCE:1 will only permit one job per resource normally, but a second job can be started if done so through preemption based upon QOS.
たとえば、OverSubscribe = FORCE:1の構成では、通常、リソースごとに1つのジョブのみが許可されますが、QOSに基づくプリエンプションによって許可された場合、2番目のジョブを開始できます。
To enable preemption after making the configuration changes described above,
restart Slurm if it is already running.
上記の構成変更を行った後にプリエンプションを有効にするには、Slurmがすでに実行されている場合は再起動します。
Any change to the plugin settings in
Slurm requires a full restart of the daemons.
Slurmでプラグイン設定を変更するには、デーモンを完全に再起動する必要があります。
If you just change the partition
PriorityTier or OverSubscribe setting, this can be updated with
scontrol reconfig.
パーティションのPriorityTierまたはOverSubscribeの設定を変更するだけの場合、これはscontrolreconfigで更新できます。
If a job request restricts Slurm's ability to run jobs from multiple users or
accounts on a node by using the "--exclusive=user" or "--exclusive=mcs" job
options, that may prevent preemption of jobs to start jobs with preempting
privileges.
ジョブリクエストが、「-exclusive = user」または「--exclusive = mcs」ジョブオプションを使用して、ノード上の複数のユーザーまたはアカウントからジョブを実行するSlurmの機能を制限する場合、ジョブのプリエンプションがプリエンプトでジョブを開始するのを妨げる可能性があります。特権。
If preemption is used, it is generally advisable to disable the
"--exclusive=user" and "--exclusive=mcs" job options by using a job_submit
plugin (set the value of "shared" to "NO_VAL16").
プリエンプションを使用する場合は、通常、job_submitプラグインを使用して「--exclusive = user」および「--exclusive = mcs」ジョブオプションを無効にすることをお勧めします(「shared」の値を「NO_VAL16」に設定します)。
For heterogeneous job to be considered for preemption all components
must be eligible for preemption.
異種ジョブがプリエンプションの対象となるには、すべてのコンポーネントがプリエンプションの対象である必要があります。
When a heterogeneous job is to be preempted
the first identified component of the job with the highest order PreemptMode
(SUSPEND (highest), REQUEUE, CANCEL (lowest)) will be
used to set the PreemptMode for all components.
異種ジョブがプリエンプトされる場合、ジョブの最初に識別されたコンポーネントで、最高次のPreemptMode(SUSPEND(最高)、REQUEUE、CANCEL(最低))が使用され、すべてのコンポーネントのPreemptModeが設定されます。
The GraceTime and user
warning signal for each component of the heterogeneous job remain unique.
異種ジョブの各コンポーネントのGraceTimeおよびユーザー警告シグナルは一意のままです。
Preemption Design and Operation
The SelectType plugin will identify resources where a pending job can
begin execution.
SelectTypeプラグインは、保留中のジョブが実行を開始できるリソースを識別します。
When PreemptMode is configured to CANCEL,
SUSPEND or REQUEUE, the select plugin will also preempt running
jobs as needed to initiate the pending job.
PreemptModeがCANCEL、SUSPEND、またはREQUEUEに構成されている場合、selectプラグインは、保留中のジョブを開始するために必要に応じて実行中のジョブもプリエンプトします。
When
PreemptMode=SUSPEND,GANG the select plugin will initiate the pending
job and rely upon the gang scheduling logic to perform job suspend and resume,
as described below.
PreemptMode = SUSPEND、GANGの場合、選択プラグインは保留中のジョブを開始し、以下に説明するように、ギャングスケジューリングロジックに依存してジョブの一時停止と再開を実行します。
The select plugin is passed an ordered list of preemptable jobs to consider for
each pending job which is a candidate to start.
selectプラグインには、開始候補である保留中のジョブごとに検討するプリエンプティブジョブの順序付きリストが渡されます。
This list is sorted by either:
このリストは、次のいずれかでソートされています。
- QOS priority,
QOSの優先順位、 - Partition priority and job size (to favor preempting smaller jobs), or
パーティションの優先度とジョブサイズ(小さいジョブのプリエンプトを優先するため)、または - Job start time (with SchedulerParameters=preempt_youngest_first).
ジョブの開始時間(SchedulerParameters = preempt_youngest_firstを使用)。
The select plugin will determine if the pending job can start without preempting
any jobs and if so, starts the job using available resources.
selectプラグインは、保留中のジョブがジョブをプリエンプトせずに開始できるかどうかを判断し、プリエンプトする場合は、使用可能なリソースを使用してジョブを開始します。
Otherwise, the select plugin will simulate the preemption of each job in the
priority ordered list and test if the job can be started after each preemption.
それ以外の場合、selectプラグインは、優先順位リスト内の各ジョブのプリエンプションをシミュレートし、各プリエンプションの後にジョブを開始できるかどうかをテストします。
Once the job can be started, the higher priority jobs in the preemption queue
will not be considered, but the jobs to be preempted in the original list may
be sub-optimal.
ジョブを開始できるようになると、プリエンプションキュー内の優先度の高いジョブは考慮されませんが、元のリストでプリエンプトされるジョブは最適ではない可能性があります。
For example, to start an 8 node job, the ordered preemption candidates may be
2 node, 4 node and 8 node.
たとえば、8ノードのジョブを開始する場合、順序付けられたプリエンプション候補は2ノード、4ノード、および8ノードになります。
Preempting all three jobs would allow the pending job to start, but by reordering
the preemption candidates it is possible to start the pending job after
preempting only one job.
3つのジョブすべてをプリエンプトすると、保留中のジョブを開始できますが、プリエンプション候補を並べ替えることにより、1つのジョブのみをプリエンプトした後に保留中のジョブを開始できます。
To address this issue, the preemption candidates are re-ordered with the final
job requiring preemption placed first in the list and all of the other jobs
to be preempted ordered by the number of nodes in their allocation which overlap
the resources selected for the pending job.
この問題に対処するために、プリエンプション候補は、リストの最初にプリエンプションが必要な最終ジョブで並べ替えられ、他のすべてのジョブは、保留中のジョブ用に選択されたリソースと重複する割り当て内のノードの数で並べ替えられます。
In the example above, the 8 node job would be moved to the first position in
the list.
上記の例では、8ノードのジョブがリストの最初の位置に移動されます。
The process of simulating the preemption of each job in the priority ordered
list will then be repeated for the final decision of which jobs to preempt.
次に、優先順位リスト内の各ジョブのプリエンプションをシミュレートするプロセスが繰り返され、プリエンプトするジョブの最終決定が行われます。
This two stage process may preempt jobs which are not strictly in preemption
priority order, but fewer jobs will be preempted than otherwise required.
この2段階のプロセスでは、プリエンプションの優先順位が厳密ではないジョブがプリエンプトされる場合がありますが、他の方法で必要とされるよりも少ないジョブがプリエンプトされます。
See the SchedulerParameters configuration parameter options of
preempt_reorder_count and preempt_strict_order for preemption
tuning parameters.
プリエンプション調整パラメーターについては、preempt_reorder_countおよびpreempt_strict_orderのSchedulerParameters構成パラメーターオプションを参照してください。
When enabled, the gang scheduling logic (which is also supports job
preemption) keeps track of the resources allocated to all jobs.
有効にすると、ギャングスケジューリングロジック(ジョブのプリエンプションもサポート)は、すべてのジョブに割り当てられたリソースを追跡します。
For each partition an "active bitmap" is maintained that tracks all
concurrently running jobs in the Slurm cluster.
パーティションごとに、Slurmクラスターで同時に実行されているすべてのジョブを追跡する「アクティブビットマップ」が維持されます。
Each partition also maintains a job list for that partition, and a list of
"shadow" jobs.
各パーティションは、そのパーティションのジョブリストと「シャドウ」ジョブのリストも保持します。
The "shadow" jobs are high priority job allocations that "cast shadows" on the
active bitmaps of the low priority jobs.
「シャドウ」ジョブは、優先度の低いジョブのアクティブなビットマップに「シャドウをキャスト」する優先度の高いジョブ割り当てです。
Jobs caught in these "shadows" will be preempted.
これらの「影」に捕らえられた仕事は先取りされます。
Each time a new job is allocated to resources in a partition and begins
running, the gang scheduler adds a "shadow" of this job to all lower priority
partitions.
新しいジョブがパーティション内のリソースに割り当てられて実行を開始するたびに、ギャングスケジューラはこのジョブの「シャドウ」をすべての優先度の低いパーティションに追加します。
The active bitmap of these lower priority partitions are then rebuilt, with the shadow jobs added first.
次に、これらの優先度の低いパーティションのアクティブなビットマップが再構築され、シャドウジョブが最初に追加されます。
Any existing jobs that were replaced by one or more "shadow" jobs are
suspended (preempted).
1つ以上の「シャドウ」ジョブに置き換えられた既存のジョブはすべて一時停止(プリエンプト)されます。
Conversely, when a high priority running job completes,
its "shadow" goes away and the active bitmaps of the lower priority
partitions are rebuilt to see if any suspended jobs can be resumed.
逆に、優先度の高い実行中のジョブが完了すると、その「シャドウ」が消え、優先度の低いパーティションのアクティブなビットマップが再構築されて、中断されたジョブを再開できるかどうかが確認されます。
The gang scheduler plugin is designed to be reactive to the resource
allocation decisions made by the "select" plugins.
ギャングスケジューラプラグインは、「選択」プラグインによって行われたリソース割り当ての決定に反応するように設計されています。
The "select" plugins have been enhanced to recognize when job preemption has
been configured, and to factor in the priority of each partition when selecting resources for a job.
「select」プラグインは、ジョブのプリエンプションがいつ構成されたかを認識し、ジョブのリソースを選択するときに各パーティションの優先度を考慮に入れるように拡張されました。
When choosing resources for each job, the selector avoids resources that are
in use by other jobs (unless sharing has been configured, in which case it
does some load-balancing).
各ジョブのリソースを選択するとき、セレクターは他のジョブによって使用されているリソースを回避します(共有が構成されている場合を除き、共有が構成されている場合は、負荷分散が行われます)。
However, when job preemption is enabled, the select plugins may choose
resources that are already in use by jobs from partitions with a lower
priority setting, even when sharing is disabled in those partitions.
ただし、ジョブのプリエンプションが有効になっている場合、selectプラグインは、それらのパーティションで共有が無効になっている場合でも、優先度の低い設定のパーティションからジョブによってすでに使用されているリソースを選択できます。
This leaves the gang scheduler in charge of controlling which jobs should run
on the over-allocated resources.
これにより、ギャングスケジューラは、過剰に割り当てられたリソースで実行するジョブの制御を担当します。
If PreemptMode=SUSPEND, jobs are suspended using the same internal
functions that support scontrol suspend and scontrol resume.
PreemptMode = SUSPENDの場合、ジョブは、scontrolsuspendおよびscontrolresumeをサポートするのと同じ内部関数を使用して中断されます。
A good way to observe the operation of the gang scheduler is by running
squeue -i<time> in a terminal window.
ギャングスケジューラの動作を監視する良い方法は、ターミナルウィンドウでsqueue -i <time>を実行することです。
Limitations of Preemption During Backfill Scheduling
For performance reasons, the backfill scheduler reserves whole nodes for jobs,
not partial nodes.
パフォーマンス上の理由から、バックフィルスケジューラは、ノードの一部ではなく、ノード全体をジョブ用に予約します。
If during backfill scheduling a job preempts one or more
other jobs, the whole nodes for those preempted jobs are reserved for the
preemptor job, even if the preemptor job requested fewer resources than that.
バックフィルスケジューリング中に、ジョブが1つ以上の他のジョブをプリエンプトする場合、プリエンプタージョブがそれより少ないリソースを要求した場合でも、それらのプリエンプトされたジョブのノード全体がプリエンプタージョブ用に予約されます。
These reserved nodes aren't available to other jobs during that backfill
cycle, even if the other jobs could fit on the nodes.
これらの予約済みノードは、他のジョブがノードに収まる場合でも、そのバックフィルサイクル中は他のジョブで使用できません。
Therefore, jobs may
preempt more resources during a single backfill iteration than they requested.
したがって、ジョブは、1回の埋め戻しの反復中に、要求したよりも多くのリソースをプリエンプトする可能性があります。
A Simple Example
The following example is configured with select/linear and
PreemptMode=SUSPEND,GANG.
次の例は、select / linearおよびPreemptMode = SUSPEND、GANGで構成されています。
This example takes place on a cluster of 5 nodes:
この例は、5つのノードのクラスターで実行されます。
[user@n16 ~]$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST active* up infinite 5 idle n[12-16] hipri up infinite 5 idle n[12-16]
Here are the Partition settings:
パーティション設定は次のとおりです。
[user@n16 ~]$ grep PartitionName /shared/slurm/slurm.conf PartitionName=DEFAULT OverSubscribe=FORCE:1 Nodes=n[12-16] PartitionName=active PriorityTier=1 Default=YES PartitionName=hipri PriorityTier=2
The runit.pl script launches a simple load-generating app that runs
for the given number of seconds.
runit.plスクリプトは、指定された秒数の間実行される単純な負荷生成アプリを起動します。
Submit 5 single-node runit.pl jobs to
run on all nodes:
5つの単一ノードrunit.plジョブを送信して、すべてのノードで実行します。
[user@n16 ~]$ sbatch -N1 ./runit.pl 300 sbatch: Submitted batch job 485 [user@n16 ~]$ sbatch -N1 ./runit.pl 300 sbatch: Submitted batch job 486 [user@n16 ~]$ sbatch -N1 ./runit.pl 300 sbatch: Submitted batch job 487 [user@n16 ~]$ sbatch -N1 ./runit.pl 300 sbatch: Submitted batch job 488 [user@n16 ~]$ sbatch -N1 ./runit.pl 300 sbatch: Submitted batch job 489 [user@n16 ~]$ squeue -Si JOBID PARTITION NAME USER ST TIME NODES NODELIST 485 active runit.pl user R 0:06 1 n12 486 active runit.pl user R 0:06 1 n13 487 active runit.pl user R 0:05 1 n14 488 active runit.pl user R 0:05 1 n15 489 active runit.pl user R 0:04 1 n16
Now submit a short-running 3-node job to the hipri partition:
次に、短期間の3ノードジョブをhipriパーティションに送信します。
[user@n16 ~]$ sbatch -N3 -p hipri ./runit.pl 30 sbatch: Submitted batch job 490 [user@n16 ~]$ squeue -Si JOBID PARTITION NAME USER ST TIME NODES NODELIST 485 active runit.pl user S 0:27 1 n12 486 active runit.pl user S 0:27 1 n13 487 active runit.pl user S 0:26 1 n14 488 active runit.pl user R 0:29 1 n15 489 active runit.pl user R 0:28 1 n16 490 hipri runit.pl user R 0:03 3 n[12-14]
Job 490 in the hipri partition preempted jobs 485, 486, and 487 from
the active partition.
hipriパーティションのジョブ490は、アクティブなパーティションからジョブ485、486、および487をプリエンプトしました。
Jobs 488 and 489 in the active partition
remained running.
アクティブパーティションのジョブ488および489は実行されたままでした。
This state persisted until job 490 completed, at which point the preempted jobs
were resumed:
この状態は、ジョブ490が完了するまで持続し、その時点でプリエンプトされたジョブが再開されました。
[user@n16 ~]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST 485 active runit.pl user R 0:30 1 n12 486 active runit.pl user R 0:30 1 n13 487 active runit.pl user R 0:29 1 n14 488 active runit.pl user R 0:59 1 n15 489 active runit.pl user R 0:58 1 n16
Another Example
In this example we have three different partitions using three different
job preemption mechanisms.
この例では、3つの異なるジョブプリエンプションメカニズムを使用する3つの異なるパーティションがあります。
# Excerpt from slurm.conf PartitionName=low Nodes=linux Default=YES OverSubscribe=NO PriorityTier=10 PreemptMode=requeue PartitionName=med Nodes=linux Default=NO OverSubscribe=FORCE:1 PriorityTier=20 PreemptMode=suspend PartitionName=hi Nodes=linux Default=NO OverSubscribe=FORCE:1 PriorityTier=30 PreemptMode=off
$ sbatch tmp Submitted batch job 94 $ sbatch -p med tmp Submitted batch job 95 $ sbatch -p hi tmp Submitted batch job 96 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 96 hi tmp moe R 0:04 1 linux 94 low tmp moe PD 0:00 1 (Resources) 95 med tmp moe S 0:02 1 linux (after job 96 completes) $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 94 low tmp moe PD 0:00 1 (Resources) 95 med tmp moe R 0:24 1 linux
Another Example
In this example we have one partition on which we want to execute only one
job per resource (e.g. core) at a time except when a job submitted to the
partition from a high priority Quality Of Service (QOS) is submitted.
この例では、優先度の高いサービス品質(QOS)からパーティションに送信されたジョブが送信された場合を除いて、一度にリソース(コアなど)ごとに1つのジョブのみを実行するパーティションが1つあります。
In that
case, we want that second high priority job to be started and be gang scheduled
with the other jobs on overlapping resources.
その場合、2番目に優先度の高いジョブを開始し、重複するリソースで他のジョブとギャングスケジュールを設定する必要があります。
# Excerpt from slurm.conf PreemptMode=Suspend,Gang PreemptType=preempt/qos PartitionName=normal Nodes=linux Default=NO OverSubscribe=FORCE:1
Future Ideas
More intelligence in the select plugins: This implementation of
preemption relies on intelligent job placement by the select plugins.
選択プラグインのインテリジェンスの向上:このプリエンプションの実装は、選択プラグインによるインテリジェントなジョブ配置に依存しています。
Take the following example:
次の例を見てください。
[user@n8 ~]$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST active* up infinite 5 idle n[1-5] hipri up infinite 5 idle n[1-5] [user@n8 ~]$ sbatch -N1 -n2 ./sleepme 60 sbatch: Submitted batch job 17 [user@n8 ~]$ sbatch -N1 -n2 ./sleepme 60 sbatch: Submitted batch job 18 [user@n8 ~]$ sbatch -N1 -n2 ./sleepme 60 sbatch: Submitted batch job 19 [user@n8 ~]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 17 active sleepme cholmes R 0:03 1 n1 18 active sleepme cholmes R 0:03 1 n2 19 active sleepme cholmes R 0:02 1 n3 [user@n8 ~]$ sbatch -N3 -n6 -p hipri ./sleepme 20 sbatch: Submitted batch job 20 [user@n8 ~]$ squeue -Si JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 17 active sleepme cholmes S 0:16 1 n1 18 active sleepme cholmes S 0:16 1 n2 19 active sleepme cholmes S 0:15 1 n3 20 hipri sleepme cholmes R 0:03 3 n[1-3] [user@n8 ~]$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST active* up infinite 3 alloc n[1-3] active* up infinite 2 idle n[4-5] hipri up infinite 3 alloc n[1-3] hipri up infinite 2 idle n[4-5]
It would be more ideal if the "hipri" job were placed on nodes n[3-5], which
would allow jobs 17 and 18 to continue running.
「hipri」ジョブをノードn [3-5]に配置すると、ジョブ17と18の実行を継続できるのでより理想的です。
However, a new "intelligent"
algorithm would have to include factors such as job size and required nodes in
order to support ideal placements such as this, which can quickly complicate
the design.
ただし、新しい「インテリジェント」アルゴリズムでは、このような理想的な配置をサポートするために、ジョブサイズや必要なノードなどの要素を含める必要があり、設計がすぐに複雑になる可能性があります。
Any and all help is welcome here!
ありとあらゆる助けがここに歓迎されます!
Last modified 10 April 2020