2017-03-27 11 views
0

GPUのトルク割り当てに奇妙な問題があります。CUDA_VISIBLE_DEVICESが0でなければトルクジョブでGPUが見つかりません

2台のNVIDIA GTX Titan X GPUを搭載した1台のマシンでTorque 6.1.0を実行しています。私はスケジューリングのためにpbs_schedを使用しています。次のように安静時のnvidia-SMI出力は次のとおりです。

+-----------------------------------------------------------------------------+ 
| NVIDIA-SMI 375.39     Driver Version: 375.39     | 
|-------------------------------+----------------------+----------------------+ 
| GPU Name  Persistence-M| Bus-Id  Disp.A | Volatile Uncorr. ECC | 
| Fan Temp Perf Pwr:Usage/Cap|   Memory-Usage | GPU-Util Compute M. | 
|===============================+======================+======================| 
| 0 GeForce GTX TIT... Off | 0000:03:00.0  On |     N/A | 
| 22% 40C P8 15W/250W |  0MiB/12204MiB |  0% E. Process | 
+-------------------------------+----------------------+----------------------+ 
| 1 GeForce GTX TIT... Off | 0000:04:00.0  Off |     N/A | 
| 22% 33C P8 14W/250W |  0MiB/12207MiB |  0% E. Process | 
+-------------------------------+----------------------+----------------------+ 

+-----------------------------------------------------------------------------+ 
| Processes:              GPU Memory | 
| GPU  PID Type Process name        Usage  | 
|=============================================================================| 
| No running processes found             | 
+-----------------------------------------------------------------------------+ 

私は次のようにGPUの割り当てを評価するために、簡単なテストスクリプトを持っている:

#PBS -S /bin/bash 
#PBS -l nodes=1:ppn=1:gpus=1:reseterr:exclusive_process 

echo "CUDA_VISIBLE_DEVICES: $CUDA_VISIBLE_DEVICES" 
~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery 

DEVICEQUERYは、CUDAに付属しているユーティリティです。コマンドラインから実行すると、両方のGPUが正しく検出されます。私はこのようなコマンドラインから一つのデバイスに制限すると...

CUDA_VISIBLE_DEVICES=0 ~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery 
#or 
CUDA_VISIBLE_DEVICES=1 ~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery 

...それも正しく、どちらか一方のGPUを見つけました。

qsubを使用してtest.shをキューに登録すると、他のジョブが実行されていないときにも、正しく動作します。ここでは出力があります。しかし

CUDA_VISIBLE_DEVICES: 0 
~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery Starting... 

CUDA Device Query (Runtime API) version (CUDART static linking) 

Detected 1 CUDA Capable device(s) 

Device 0: "GeForce GTX TITAN X" CUDA Driver Version/Runtime Version   8.0/8.0 CUDA Capability Major/Minor version number: 5.2 Total amount of global memory:     12204 MBytes (12796887040 bytes) (24) Multiprocessors, (128) CUDA Cores/MP:  3072 CUDA Cores GPU Max Clock rate:     1076 MHz (1.08 GHz) Memory Clock rate:        3505 Mhz Memory Bus Width:        384-bit L2 Cache Size:         3145728 bytes Maximum Texture Dimension Size (x,y,z)   1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory:    65536 bytes Total amount of shared memory per block:  49152 bytes Total number of registers available per block: 65536 Warp size:          32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block:   1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch:   2147483647 bytes Texture alignment:        512 bytes Concurrent copy and kernel execution:   Yes with 2 copy engine(s) Run time limit on kernels:      No Integrated GPU sharing Host Memory:   No Support host page-locked memory mapping:  Yes Alignment requirement for Surfaces:   Yes Device has ECC support:      Disabled Device supports Unified Addressing (UVA):  Yes Device PCI Domain ID/Bus ID/location ID: 0/3/0 Compute Mode: 
    < Exclusive Process (many threads in one process is able to use ::cudaSetDevice() with this device) > 

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX TITAN X Result = PASS 

、(それは= 1 CUDA_VISIBLE_DEVICESを割り当てられている場合、すなわち)ジョブがすでにgpu0上で実行されている場合、ジョブはどんなのGPUを見つけることができません。出力:

CUDA_VISIBLE_DEVICES: 1 
~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery Starting... 

CUDA Device Query (Runtime API) version (CUDART static linking) 

cudaGetDeviceCount returned 38 
-> no CUDA-capable device is detected 
Result = FAIL 

何が起こっているのですか?

+0

私は6.1-devで最近のGPU/CUDAの多くの修正を見ました。そのブランチに対して、それがどのように動作するかを調べる価値があるかもしれません。 – clusterdude

+0

ありがとう@clusterdude。私は6.1-devを動作させることができませんでしたが、同じ問題が6.1.1にあります – Shaun

答えて

0

私は自分の問題を解決したと思いますが、残念ながらすぐに2つのことを試みました。私は戻って問題を解決したかどうか確認したくありません。

  1. ビルドする前に、Torqueのconfigureスクリプトから--enable-cgroupsオプションを削除してください。

  2. トルクにこれらのステップを実行すると、インストールプロセス:

    はパッケージを作る

    SH torque-package-server-linux-x86_64.sh --install

    SHトルク・パッケージmom- linux-x86_64.sh --install

    SH torque-package-clients-linux-x86_64.sh --install

2番目のオプションについては、これらの手順がTorqueのインストール手順に適切に記載されていることを知っています。しかし、私はちょうど1つのノード(計算ノードとサーバーは同じマシン)を持っている簡単なセットアップを持っています。私は、 'make install'は、パッケージがインストールされているすべてのことをその単一ノードで行うべきだと思っていましたが、おそらく私は間違っていました。

関連する問題