web-dev-qa-db-ja.com

CUDAデバイスのAGEを設定するにはどうすればよいですか?

私は現在、GPUサーバーを既存のSGE環境に統合するという問題に直面しています。グーグルを使用して、これが設定されているクラスターのいくつかの例を見つけましたが、これがどのように行われたかについての情報はありません。

これに関するハウツーやチュートリアルの形式はどこかにありますか?非常に冗長である必要はありませんが、「cudaキュー」を起動して実行するのに十分な情報が含まれている必要があります...

前もって感謝します...

編集:ノード内の空きGPUの数に関する負荷センサーを設定するために、次のことを行いました。

  • gPUの計算モードを排他的に設定します
  • gPUを永続モードに設定します
  • 次のスクリプトを負荷センサーとしてクラスター構成に追加します(1秒に設定します)。
#!/ bin/sh 
 
 hostname =ʻuname -n` 
 
 while [1]; do 
 read input 
 result = $?
 if [$ result!= 0]; then 
 exit 1 
 fi 
 if ["$ input" == "quit"]; then 
 exit 0 
 fi 
 
 
 smitool = `which nvidia-smi` 
 result = $?
 if [$ result!= 0]; then 
 gpusav = 0 
 gpus = 0 
 else 
 gpustotal = `nvidia-smi -L | wc -l` 
 gpusused =` nvidia -smi | grep "プロセス名" -A 6 | grep -v +-| grep -v\| = | grep-v使用法| grep-v "実行されていません" | wc-l` 
 gpusavail = ` echo $ gpustotal- $ gpusused | bc` 
 fi 
 
 echo begin 
 echo "$ hostname:gpu:$ gpusavail" 
 echo end 
完了
 
 0を終了

注:これは明らかにNVIDIAGPUでのみ機能します

4
luxifer

Open Grid Engineは、nvidia-smiを必要とせずに、2011.11リリースでGPUロードセンサーのサポートを追加しました。 nvidia-smiアプリケーションの出力は、ドライバーのリリース間で変わる可能性があります(実際に変わる)ので、他のアプローチはお勧めしません。

GE2011.11ソースツリーがある場合は、dist/gpu /gpu_sensor.cを探します。

ロードセンサーをコンパイルするには(システムにCUDAツールキットが必要です):

%cc gpu_sensor.c -lnvidia-ml

また、負荷センサーによって報告されたステータスをインタラクティブに確認したい場合は、次のコマンドを使用してコンパイルします。

-DSTANDALONE

Grid Engineクラスターで負荷センサーを使用するには、標準の負荷センサーのセットアップ手順に従う必要があります。

http://gridscheduler.sourceforge.net/howto/loadsensor.html

出典:

  1. http://marc.info/?l=npaci-rocks-discussion&m=132872224919575&w=2
4

複数のGPUがあり、ジョブでGPUを要求したいが、Grid EngineスケジューラーがfreeGPUを処理および選択する必要がある場合、RSMAPを構成できます(リソースマップ)複雑(INTの代わりに)。これにより、ホスト構成内の特定のホスト上のGPUの量と名前を指定できます。ホストの消耗品として設定することもできます。これにより、リクエストしたスロットに関係なく、-l cuda = 2でリクエストされたGPUデバイスの数はホスト2ごとになります(並列ジョブが異なるホストで8つのスロットを取得した場合でも) )。

qconf -mc
    #name               shortcut   type        relop   requestable consumable default  urgency     
    #----------------------------------------------------------------------------------------------
    gpu                 gpu        RSMAP         <=      YES         Host        0        0

実行ホスト構成では、ID /名前(ここでは単にGPU1とGPU2)を使用してリソースを初期化できます。

qconf -me yourhost
hostname              yourhost
load_scaling          NONE
complex_values        gpu=2(GPU1 GPU2)

次に、-l gpu = 1を要求すると、GPU1が別のジョブですでに使用されている場合、Univa GridEngineスケジューラーはGPU2を選択します。実際の選択は、qstat-jの出力で確認できます。ジョブは、$ SGE_HGR_gpu環境変数を読み取ることにより、選択されたGPUを取得します。この変数には、選択されたID /名前「GPU2」が含まれています。これは、衝突することなく適切なGPUにアクセスするために使用できます。

マルチソケットホストを使用している場合は、GPUとCPU間の通信を高速化するために、GPUをGPUの近く(PCIeバスの近く)の一部のCPUコアに直接接続することもできます。これは、実行ホスト構成にトポロジマスクをアタッチすることで可能になります。

qconf -me yourhost
hostname              yourhost
load_scaling          NONE
complex_values        gpu=2(GPU1:SCCCCScccc GPU2:SccccSCCCC)

これで、UGEスケジューラーがGPU2を選択すると、ジョブが2番目のソケット(S)の4つのコアすべて(C)に自動的にバインドされるため、最初のソケットでのジョブの実行は許可されません。これには、-bindingqsubパラメーターも必要ありません。

www.gridengine.e にあるその他の構成例。

これらの機能はすべて、Univa Grid Engine(8.1.0/8.1.3以降)でのみ使用でき、SGE 6.2u5およびその他のGrid Engineバージョン(OGE、Sun of Grid Engineなど)では使用できないことに注意してください。 univa.comから48コアの限定無料バージョンをダウンロードして試すことができます。

2
Daniel

ROCKS6.1に付属するSGE2011.11の場合、複合消耗品を次のように設定することがわかりました。

    #name               shortcut   type        relop   requestable consumable default  urgency     
    #----------------------------------------------------------------------------------------------
    gpu                 gpu        INT         <=      YES         JOB        0        0

これにより、ノードごとのGPUの数を設定でき、ジョブを送信したときに、要求されたGPUの数はSMP/SLOTの数に依存しませんでした。その後、ジョブごとに8つのCPUと4つのGPUを使用でき、他のジョブがリークする問題は発生しません。それでも、ノードの消耗品を上記のように設定する必要がありました。

これは他のいくつかのソリューションほど優れたソリューションではありませんが、SGE2011.11ではRSMAPオプションが使用できないことがわかりました。どのGPUを使用するかを設定できるので、最終的にはこの種の構成を取得したいと思います。

これが誰かが構成の数時間を節約するのに役立つことを願っています。

0