翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Slurm メモリベースのスケジューリング
バージョン 3.2.0 以降、AWS ParallelCluster は、SlurmSettings/EnableMemoryBasedScheduling クラスターの設定パラメータを使用して、Slurm メモリベースのスケジューリングをサポートします。
注記
警告
EnableMemoryBasedScheduling
が有効になっている Slurm キューコンピューティングリソースで複数のインスタンスタイプを指定すると、RealMemory
の値はすべてのインスタンスタイプで使用できる最小メモリ量になります。これにより、メモリ容量が大きく異なるインスタンスタイプを指定すると、大量の未使用メモリが発生する可能性があります。
EnableMemoryBasedScheduling: true
では、Slurm スケジューラは各ジョブが各ノードで必要とするメモリ量を追跡します。次に、Slurm スケジューラはこの情報を使用して、同じコンピューティングノード上の複数のジョブをスケジュールします。ノード上でジョブが必要とするメモリの合計量は、使用可能なノードメモリを超えることはできません。スケジューラは、ジョブが、ジョブ送信時に要求された量よりも多くのメモリを使用するのを防ぎます。
EnableMemoryBasedScheduling: false
を使用すると、ジョブが共有ノード上のメモリを奪い合い、ジョブの失敗や out-of-memory
のイベントが発生する可能性があります。
警告
Slurm ラベルには MB や GB などの 2 のべき乗表記を使用します。これらのラベルをそれぞれ MiB と GiB として読み取ります。
Slurm 設定とメモリベースのスケジューリング
EnableMemoryBasedScheduling: true
では、Slurm は以下の Slurm 設定パラメータを設定します。
-
SelectTypeParameters=CR_CPU_Memory
」( slurm.conf
) を参照してください。このオプションは、ノードメモリを Slurm で消費可能なリソースとして設定します。 -
Slurm
cgroup.conf
のConstrainRAMSpace=yes
。このオプションでは、ジョブのメモリへのアクセスは、ジョブが送信時に要求したメモリ量に制限されます。
注記
これら 2 つのオプションを設定すると、Slurm スケジューラとリソースマネージャの動作に影響する Slurm 設定パラメータが他にもいくつかあります。詳細については、Slurm のドキュメント
Slurm スケジューラとメモリベースのスケジューリング
EnableMemoryBasedScheduling: false
(デフォルト)
デフォルトで EnableMemoryBasedScheduling
は false に設定されます。false の場合、Slurm はスケジューリングアルゴリズムにメモリをリソースとして含めず、ジョブが使用するメモリも追跡しません。ユーザーは、ジョブに必要なノードあたりの最小メモリ量を設定する --mem MEM_PER_NODE
オプションを指定できます。これにより、スケジューラはジョブをスケジューリングするときに、RealMemory
値が少なくとも MEM_PER_NODE
のノードを選択する必要があります。
例えば、ユーザーが --mem=5GB
のジョブを 2 つ送信したとします。CPU や GPU などの要求されたリソースが使用可能な場合、ジョブは 8 GiB のメモリのノードで同時に実行できます。この 2 つのジョブは、RealMemory
が 5 GiB 未満のコンピューティングノードではスケジュールされません。
警告
メモリベースのスケジューリングが無効になっている場合、Slurm はジョブが使用するメモリ量を追跡しません。同じノードで実行されるジョブがメモリリソースを奪い合い、他のジョブが失敗する可能性があります。
メモリベースのスケジューリングが無効になっている場合、--mem-per-cpu
--mem-per-gpu
EnableMemoryBasedScheduling: true
EnableMemoryBasedScheduling
を true に設定すると、Slurm は各ジョブのメモリ使用量を追跡し、ジョブが --mem
送信オプションで要求された量よりも多くのメモリを使用するのを防ぎます。
前述の例を使用して、ユーザーは --mem=5GB
のジョブを 2 つ送信します。メモリが 8 GiB のノードでは、ジョブを同時に実行することはできません。これは、必要なメモリの合計量がノードで使用可能なメモリ量よりも多いためです。
メモリベースのスケジューリングが有効になっている場合は、--mem-per-cpu
と --mem-per-gpu
は「Slurm documentation」に記載されている内容と一貫した動作をします。例えば、ジョブは --ntasks-per-node=2 -c 1 --mem-per-cpu=2GB
で送信されます。この場合、Slurm はジョブに合計 4 GiB をノードごとに割り当てます。
警告
メモリベースのスケジューリングが有効になっている場合は、ジョブを送信する際に --mem
仕様を含めることをお勧めします。AWS ParallelCluster に含まれるデフォルトの Slurm 設定では、メモリオプション (--mem
、--mem-per-cpu
、または --mem-per-gpu
) が含まれていない場合、Slurm は、ジョブが CPU や GPU などの他のリソースの一部のみを要求したとしても、割り当てられたノードのメモリ全体をジョブに割り当てます。これにより、他のジョブに使用できるメモリがなくなるため、ジョブが終了するまでノードを共有できなくなります。これは、ジョブの送信時にメモリ仕様が提供されていないとき、Slurm がジョブのノードあたりのメモリを DefMemPerNode
メモリ量の異なる複数のタイプのコンピューティングリソースが同じキューにある場合、メモリオプションなしで送信されたジョブには、異なるノードに異なる量のメモリが割り当てられる可能性があります。これは、スケジューラがどのノードをジョブに使用できるようにするかによって異なります。ユーザーは、Slurm 設定ファイルのクラスターまたはパーティションレベルで、DefMemPerNode
や DefMemPerCPU
Slurm RealMemory と AWS ParallelCluster SchedulableMemory
AWS ParallelCluster に付属する Slurm 設定で、Slurm は RealMemoryRealMemory
を Amazon EC2 インスタンスタイプ
メモリベースのスケジューリングが無効な場合、--mem
を指定したジョブをユーザーが送信すると、Slurm スケジューラは RealMemory
を使用しノードをフィルタリングします。
メモリーベースのスケジューリングが有効な場合、Slurm スケジューラは RealMemory
をコンピューティングノード上で実行中のジョブに使用可能な最大メモリー容量と解釈します。
デフォルト設定は、すべてのインスタンスタイプに最適であるとは限りません。
-
この設定は、ノードが実際にアクセスできるメモリ量よりも多い場合があります。これは、コンピューティングノードが小さいインスタンスタイプである場合に発生する可能性があります。
-
この設定は、ノードが実際にアクセスできるメモリ量よりも少ない場合があります。これは、コンピューティングノードが大きいインスタンスタイプの場合に発生し、大量のメモリが未使用のままになる可能性があります。
SlurmQueues/ComputeResources/SchedulableMemory を使用すると、コンピューティングノードの AWS ParallelCluster で設定された RealMemory
の値を微調整できます。デフォルトをオーバーライドするには、クラスター設定専用に SchedulableMemory
のカスタム値を定義します。
コンピューティングノードの実際に使用可能なメモリを確認するには、ノード上で /opt/slurm/sbin/slurmd -C
コマンドを実行します。このコマンドは、RealMemory
slurmd
-C
コンピューティングノードのオペレーティングシステムプロセスに十分なメモリがあることを確認してください。そのためには、SchedulableMemory
値を、slurmd -C
コマンドが返した RealMemory
値よりも小さく設定してジョブが使用できるメモリを制限します。