LSB_GPU 要求

GPU 要件を 1 つのステートメントで一緒に指定します。

構文

LSB_GPU_REQ = "[num=num_gpus[/task | host]] [:mode=shared | exclusive_process] [:mps=yes[,shared][,nocvd] | no | per_socket[,shared][,nocvd] | per_gpu[,shared][,nocvd]] [:j_exclusive=yes | no] [:aff=yes | no] [:block=yes | no] [:gpack=yes | no]"

説明

LSB_GPU_REQ パラメーターは、以下の引数を取ります。
num =num_gpus [/task | host]
ジョブが必要とする物理 GPU の数。 デフォルトでは、この数はホストごとです。 数値の後に /task を指定することによって、タスクごとに数値を指定することもできます。

タスクごとの数を指定した場合、 lsb.resources ファイル内の ngpus_physical リソースの構成が PER_TASKに設定されている場合、 または RESOURCE_RESERVE_PER_TASK=Y パラメーターが lsb.params ファイル内に設定されている場合、この数はタスクごとに要求されるカウントです。

mode=shared | exclusive_process (モード = 共用 | 排他プロセス)
ジョブが実行されているときの GPU モード。 shared または exclusive_processのいずれかです。 デフォルト・モードは sharedです。

shared モードは、Nvidia または AMD DEFAULT 計算モードに対応しています。 exclusive_process モードは、Nvidia EXCLUSIVE_PROCESS 計算モードに対応します。

注: AMD GPU を使用する場合 (つまり、 gvendor=amd が指定されている場合) は、 exclusive_process を指定しないでください。
mps=yes[, nocvd][, shared] | per_socket[, shared][, nocvd] | per_gpu[, shared][, nocvd] | no
ジョブに割り振られている GPU の Nvidia マルチプロセス・サービス (MPS) を有効または無効にします。 MPS を効果的に使用すると、EXCLUSIVE_PROCESS モードはすべての MPS クライアントに対して DEFAULT モードのように動作します。 MPS では常に、複数のクライアントが MPS サーバーを介して GPU を使用できます。
注: 動作の不整合を避けるため、AMD GPU を使用している場合 (つまり、 gvendor=amd が指定されている場合) は、 mps を有効にしないでください。 クラスター・レベル、キュー・レベル、アプリケーション・レベル、およびジョブ・レベルで GPU 要件をマージした結果が gvendor=amd であり、 スタンプ が有効になっている場合 (例えば、 gvendor=amdMPS = NOを指定せずにジョブ・レベルで指定され、 MPS = YES がアプリケーション・レベル、キュー・レベル、またはクラスター・レベルで指定されている場合)、 LSFスタンプ 要件を無視します。

MPS は、共有プロセス GPU と排他プロセス GPU の両方に役立ち、GPU リソースをより効率的に共有し、GPU の使用率を向上させることができます。 詳しくは、Nvidia の資料を参照してください。

MPS を使用する場合は、EXCLUSIVE_PROCESS モードを使用して、単一の MPS サーバーのみが GPU を使用するようにします。これにより、MPS サーバーがその GPU のすべての CUDA プロセス間の単一調停点となる追加保険が提供されます。

コンマとスペースなしで share キーワードを追加することにより、MPS デーモン共有を使用可能にすることもできます (例えば、 mps=yes,shared を指定すると、ホスト上で MPS デーモン共有が使用可能になります)。 共有が有効になっている場合、同じリソース要件を持つ同じユーザーによって実行依頼されるすべてのジョブは、ホスト、ソケット、または GPU 上の同じ MPS デーモンを共有します。

LSF は、 mps キーワードの値に応じて、ホストごと、ソケットごと、または GPU ごとに MPS デーモンを開始します。

  • mps=yes が設定されている場合、 LSF はジョブごとにホストごとに 1 つの MPS デーモンを開始します。

    共有が有効になっている場合 (つまり、 mps=yes,shared が設定されている場合)、 LSF は、同じリソース要件を持つ同じユーザーによって実行依頼されたすべてのジョブに対して、ホストごとに 1 つの MPS デーモンを開始します。 これらのジョブはすべて、ホスト上の同じ MPS デーモンを使用します。

    CUDA_VISIBLE_DEVICES 環境変数が無効になっている場合 (つまり、 mps=yes,nocvd が設定されている場合)、 LSF はタスクの CUDA_VISIBLE_DEVICES<number> 環境変数を設定しないため、 LSF MPI はタスクの CUDA_VISIBLE_DEVICES を設定しません。 LSF は、 CUDA_VISIBLE_DEVICESではなく、タスクの CUDA_VISIBLE_DEVICES<number> 環境変数のみを設定します。 LSF MPI は、 CUDA_VISIBLE_DEVICES<number> 環境変数を CUDA_VISIBLE_DEVICES に変換し、それをタスク用に設定します。

  • mps=per_socket が設定されている場合、 LSF は、ジョブごとにソケットごとに 1 つの MPS デーモンを開始します。 共有が有効になっている場合 (つまり、 mps=per_socket,shared が設定されている場合)、 LSF は、同じリソース要件を持つ同じユーザーによって実行依頼されたすべてのジョブについて、ソケットごとに 1 つの MPS デーモンを開始します。 これらのジョブはすべて、ソケットに対して同じ MPS デーモンを使用します。
  • mps=per_gpu が設定されている場合、 LSF は、ジョブごとに GPU ごとに 1 つの MPS デーモンを開始します。 共有が有効になっている場合 (つまり、 mps=per_gpu,shared が設定されている場合)、 LSF は、同じリソース要件を持つ同じユーザーによって実行依頼されたすべてのジョブに対して、GPU ごとに 1 つの MPS デーモンを開始します。 これらのジョブはすべて、GPU に対して同じ MPS デーモンを使用します。
重要: MPS で EXCLUSIVE_THREAD モードを使用することはサポートされていないため、予期しない動作が発生する可能性があります。
j_exclusive=yes | いいえ
割り振られた GPU を他のジョブが使用できるかどうかを指定します。 モードを exclusive_processに設定すると、 j_exclusive=yes オプションが自動的に設定されます。
aff=yes | いいえ
厳密な GPU-CPU アフィニティー・バインディングを適用するかどうかを指定します。 noに設定すると、 LSF は CPU アフィニティーを維持しながら GPU アフィニティーを緩和します。 デフォルトでは、 aff=yes は、厳密な GPU-CPU アフィニティー・バインディングを維持するように設定されています。
注: aff=yes 設定は、 block=yes と競合します (タスクの数が要求された GPU の数より多い場合は、割り振られた GPU をブロックとして分散します)。 これは、厳密な CPU-GPU バインディングにより、CPU NUMA ID に基づいてタスクに GPU が割り振られるためです。これは、割り振られた GPU のブロックとしての配分と競合します。 aff=yesblock=yes の両方が GPU 要件ストリングで指定されている場合、 block=yes 設定が優先され、厳密な CPU-GPU アフィニティー・バインディングが無効になります (つまり、 aff=no が自動的に設定されます)。
ブロック = はい | いいえ
ブロック配布を使用可能にするかどうかを指定します。つまり、タスクの数が要求された GPU の数より多い場合に、ジョブの割り振られた GPU をブロックとして配布するかどうかを指定します。 yesに設定すると、 LSF は、タスクの数が要求された GPU の数より多い場合に、ジョブの割り振り済み GPU をすべてブロックとして分散します。 デフォルトでは、割り振られた GPU がブロックとして配布されないように block=no が設定されています。

例えば、GPU ジョブが 4 個の GPU と 40 個のタスクを持つホスト上で実行するように要求した場合、ブロック配布により、 GPU0 (ランク 0 から 9)、 GPU1 (ランク 10 から 19)、 GPU2 (タンク 20 から 29)、および GPU3 (ランク 30 から 39) が割り当てられます。

注: block=yes 設定は、 aff=yes (厳密な CPU-GPU アフィニティー・バインディング) と競合します。 これは、厳密な CPU-GPU バインディングにより、CPU NUMA ID に基づいてタスクに GPU が割り振られるためです。これは、割り振られた GPU のブロックとしての配分と競合します。 block=yesaff=yes の両方が GPU 要件ストリングで指定されている場合、 block=yes 設定が優先され、厳密な CPU-GPU アフィニティー・バインディングが無効になります (つまり、 aff=no が自動的に設定されます)。
gpack=yes | いいえ
共用 モードのジョブの場合のみ。 パック・スケジューリングを使用可能にするかどうかを指定します。 yesに設定すると、 LSF は、割り振られた GPU に複数の共有モード GPU ジョブをパックします。 LSF は、以下のように共用モード GPU をスケジュールします。
  1. LSF は、既に実行中のジョブがある共有 GPU の数に基づいて候補ホストを (最大から最小の順に) ソートし、次に排他的でない GPU の数に基づいてソートします。

    リソース要件ストリングに order [] キーワードが定義されている場合、 LSF は、 order []をソートした後、 gpack ポリシーによって候補ホストを再ソートします (最初に実行中のジョブがある共有 GPU、次に排他的でない GPU の数によって)。 gpack ポリシーのソート優先度が order [] ソートより高くなっています。

  2. LSF は、実行中のジョブの数に基づいて、各ホスト上の候補 GPU を (最大から最小の順に) ソートします。

スケジューリング後、共有モード GPU ジョブは、新しい共有 GPU ではなく、最初にソートされた、割り振られた共有 GPU にパックされます。

Docker 属性アフィニティーが有効になっている場合、GPU でソートする前に、候補ホストの順序が Docker 属性アフィニティーでソートされます。

デフォルトでは、 gpack=no はパック・スケジューリングが使用不可になるように設定されています。

lsb.params ファイルで GPU_REQ_MERGE パラメーターが Y または y として定義されており、GPU 要件が複数レベル (デフォルトのクラスター、キュー、アプリケーション・プロファイル、またはジョブ・レベルの要件のうち少なくとも 2 つ) で指定されている場合、GPU 要件の各オプションは個別にマージされます。 ジョブ・レベルはアプリケーション・レベルをオーバーライドします。これはキュー・レベルをオーバーライドし、デフォルトのクラスター GPU 要件をオーバーライドします。 例えば、GPU 要件の mode オプションが -gpu オプションで定義され、 mps オプションがキューで定義されている場合、ジョブ・レベルのモードとキューの mps 値が使用されます。

lsb.params ファイルで GPU_REQ_MERGE パラメーターが Y または y として定義されておらず、 GPU 要件が複数レベル (デフォルトのクラスター、キュー、アプリケーション・プロファイル、またはジョブ・レベルの要件のうち少なくとも 2 つ) で指定されている場合、GPU 要件ストリング全体が置き換えられます。 ジョブ・レベルの GPU 要件ストリング全体がアプリケーション・レベルをオーバーライドします。これにより、キュー・レベルがオーバーライドされ、デフォルトの GPU 要件がオーバーライドされます。

esub パラメーター LSB_SUB4_GPU_REQ は、 -gpu オプションの値を変更します。

LSF は、トポロジー要件を満たす GPU を最初に選択します。 選択された GPU の GPU モードが要求されたモードでない場合、 LSF は GPU を要求されたモードに変更します。 例えば、 LSF が共有 GPU を必要とするジョブに exclusive_process GPU を割り振ると、 LSF は、ジョブの開始前に GPU モードを共有に変更し、ジョブの終了時にモードを exclusive_process に戻します。

GPU 要件は、ジョブの rusage リソース要件に変換されます。 例えば、 num=2 は次のように変換されます。rusage[ngpus_physical=2]bjobsbhist、および bacct コマンドを使用して、マージされたリソース要件を確認します。

bsub -gpu オプションおよび GPU_REQ パラメーター構文がカバーできない複雑な GPU 要件が存在する場合があります。これには、複合 GPU 要件 (異なるホスト上のジョブに対する異なる GPU 要件、または並列ジョブの異なる部分に対する異なる GPU 要件) および代替 GPU 要件 (1 つのジョブの実行に対して複数の GPU 要件セットが受け入れられる場合) が含まれます。 複雑な GPU 要件の場合は、 bsub -R コマンド・オプションを使用するか、 lsb.applications ファイルまたは lsb.queues ファイル内の RES_REQ パラメーターを使用して、リソース要件ストリングを定義します。

重要: モードj_exclusive、および mps オプションは、 -gpu オプション、 lsf.conf ファイルの LSB_GPU_REQ パラメーター、または lsb.queues ファイルまたは lsb.applications ファイルの GPU_REQ パラメーターを使用してのみ定義できます。 これらのオプションは、 bsub -R コマンド・オプションの rusage リソース要件ストリング、または lsb.queues ファイルや lsb.applications ファイルの RES_REQ パラメーターと一緒に使用することはできません。

デフォルト

未定義

関連資料

  • GPU_REQ
  • bsub -gpu