Slurm メモリベースのスケジューリング - AWS ParallelCluster

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Slurm メモリベースのスケジューリング

バージョン 3.2.0 以降、 は / SlurmSettings EnableMemoryBasedSchedulingクラスター設定パラメータを使用してSlurmメモリベースのスケジューリング AWS ParallelCluster をサポートします。

注記

AWS ParallelCluster バージョン 3.7.0 以降では、インスタンス で複数のインスタンスタイプを設定すると、 を有効にEnableMemoryBasedSchedulingできます。

AWS ParallelCluster バージョン 3.2.0 から 3.6.x では、インスタンス EnableMemoryBasedScheduling複数のインスタンスタイプを設定した場合、 を有効にすることはできません。

警告

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.confConstrainRAMSpace=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 オプションを指定しないことをお勧めします。これらのオプションは、 Slurmドキュメント で説明されている動作とは異なる動作を引き起こす可能性があります。

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 仕様を含めることをお勧めします。に含まれているSlurmデフォルト設定では AWS ParallelCluster、メモリオプション (--mem、、または --mem-per-gpu) が含まれていない場合--mem-per-cpu、 は割り当てられたノードのメモリ全体をジョブにSlurm割り当てます。これは、CPUs GPUs。これにより、他のジョブに使用できるメモリがなくなるため、ジョブが終了するまでノードを共有できなくなります。これは、ジョブの送信時にメモリ仕様が提供されていないとき、Slurm がジョブのノードあたりのメモリを DefMemPerNode に設定するためです。このパラメータのデフォルト値は 0 で、ノードのメモリに無制限にアクセスできるようになっています。

メモリ量の異なる複数のタイプのコンピューティングリソースが同じキューにある場合、メモリオプションなしで送信されたジョブには、異なるノードに異なる量のメモリが割り当てられる可能性があります。これは、スケジューラがどのノードをジョブに使用できるようにするかによって異なります。ユーザーは、Slurm 設定ファイルのクラスターまたはパーティションレベルで、DefMemPerNodeDefMemPerCPU のようなオプションのカスタム値を定義して、この動作を防ぐことができます。

Slurm RealMemory および AWS ParallelCluster SchedulableMemory

に同梱Slurmされている設定では AWS ParallelCluster、 Slurm RealMemoryは をジョブで使用できるノードあたりのメモリ量として解釈します。バージョン 3.2.0 以降、デフォルトでは、 AWS ParallelCluster は Amazon EC2 インスタンスタイプにリストされ、Amazon EC2 API によって返されるメモリの 95% RealMemoryに設定しますDescribeInstanceTypes。 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 値よりも小さく設定してジョブが使用できるメモリを制限します。