3

GPU 計算をサポートするためにバッチ システムを拡張したいと考えています。

問題は、バッチ システムの観点からは、GPU がリソースであることです。使用済みリソースを簡単に数えることはできますが、それらへのアクセスを制限する必要もあります。

GPU の場合、各ジョブが GPU を排他的に要求することを意味します (GPU が要求された場合)。

私が聞いたところによると、ジョブ間で GPU を共有することは非常に悪い考えです (ジョブの GPU 部分がランダムに強制終了される可能性があるため)。

したがって、CUDA と OpenCL の GPU へのアクセスを制限する何らかの方法が必要です。バッチ システムには root 権限があります。/dev/使用中のデバイスへのアクセスを制限することはできますがcgroups、この場合、これでは十分ではないと考えました。

理想的な状態は、ジョブが要求した数の GPU のみを認識し、他のジョブがこれらの GPU にアクセスできない場合です。

4

3 に答える 3

4

現在、2 つの関連するメカニズムがあります。

  • nvidia-smi を使用して、デバイスを排他モードに設定します。これにより、プロセスが GPU を持つと、他のプロセスが同じ GPU にアタッチできなくなります。
  • CUDA_VISIBLE_DEVICES 変数を使用して、プロセスが GPU を探すときにどの GPU を認識するかを制限します。

後者はもちろん悪用される可能性がありますが、今はそれが始まりです。

私が聞いたことによると、ジョブ間で GPU を共有することは非常に悪い考えです (ジョブの GPU 部分がランダムに強制終了される可能性があるため)。

そうではありませんが、GPU の共有が悪い考えである主な理由は、使用可能なメモリをめぐって競合する必要があり、実際にはプロセスの 1 つが続行できたとしても、プロセスがすべて失敗する可能性があるためです。さらに、DMA と計算エンジンへのアクセスを競合するため、全体的なパフォーマンスが低下する可能性があります。

于 2010-11-03T16:16:15.413 に答える
1

NVIDIA CUDA GPU で役立つことが 2 つあります。

  1. nvidia-smiツールを使用して GPU を「Compute Exclusive」モードにします。
  2. 未使用の GPU を自動的に選択する、引数なしの「cudaSetDevice()」呼び出しを使用するようにユーザーに指示します。
  3. 「ベスト プラクティス ガイド」cudaSetDeviceのセクション 8.3 で説明されているように、デバイスを初期化するために 以外の方法を使用するようユーザーに指示します。

OpenCL でこれを実現する方法がわかりません。

于 2010-11-02T15:24:29.820 に答える
0

利用可能な OpenCL プラットフォームとデバイスを並べ替えるライブラリを開発しました。プラットフォーム上で最適なデバイスをピックアップします。次に、その上にコンテキストを作成しようとします。これが失敗すると、リストの次の項目に進みます。リストは計算ユニットの数でソートされます。

nvidia (gpu)、amd (gpu & cpu)、intel (cpu)、apple (gpu & cpu) をサポートしています。

排他的なアクセスのためのロック機構があります。しかし、それは最高ではありません。私はまだより良い解決策を探しています。基本的に、/tmp で使用されるプラットフォーム + デバイスでファイルを保存します。

これは私たちの研究室で使用しているものです。これは GPLv3 の下で利用可能で、github で見つけることができます: https://github.com/nbigaouette/oclutils/

于 2011-07-26T01:05:03.560 に答える