2016-10-19 4 views
2

Caffe에 GPU를 사용하고 있습니다. 내가 nvidia-smi을 할 때,GPU 장치 번호가 일치하지 않습니다.

| NVIDIA-SMI 352.63  Driver Version: 352.63   |      
|-------------------------------+----------------------+----------------------+ 
| 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 750 Ti Off | 0000:01:00.0  On |     N/A | 
| 44% 52C P0  2W/38W | 464MiB/2047MiB |  0%  Default | 
+-------------------------------+----------------------+----------------------+ 
| 1 Quadro M4000  Off | 0000:02:00.0  Off |     N/A | 
| 59% 74C P0 66W/120W | 7434MiB/8191MiB |  95%  Default | 


+-----------------------------------------------------------------------------+ 
| Processes:              GPU Memory | 
| GPU  PID Type Process name        Usage  | 
|=============================================================================| 
| 0  1428 G /usr/lib/xorg/Xorg        316MiB | 
| 0  2200 G compiz           139MiB | 
| 1  29863 C ./caffe-segnet/build/tools/caffe    7413MiB | 
+-----------------------------------------------------------------------------+ 

을 보여줍니다하지만 CAFFE을 실행하고 GPU 하나를 선택할 때, 그것은 메모리가 나에게 말할 것이다. GPU 0 build/tools/caffe train -gpu 0 -solver solver.prototxt을 선택하면 실행할 수 있습니다.

왜 그렇습니까?

+3

CUDA는 PCIe와는 별도의 고유 한 장치 열거 형을 사용하며 가장 "가능한"장치에 장치 서수 0을 할당하는 경험적 방법을 사용합니다. 나는 문서에서 장과 절을 인용 할 시간이 없으며 누군가가 적절한 답을 쓸 수 있기를 바랍니다. – njuffa

+0

일괄 처리 크기가 2GB 메모리에 비해 너무 큰지 확인합니다. 이미지 크기 및 네트워크 계층 설계로 인해 많은 메모리가 필요할 수 있습니다. 600x800의 이미지를 사용하고 2GB 메모리 내에 들어 가지 않는 출력과 커널 크기가 많은 16 개의 네트워크 레이어가 있다면 ... –

+0

GPU 1에서 실행중인 동일한 프로그램을 실행하려고한다면 반드시 GPU 0에 맞지 않습니다. 당신의 정보에서 그것은 약 7GB의 (** 7434MiB **/8191MiB)와 1GB의 당신의'GPU 0' –

답변

3

Nvidia CUDA는 어떤 장치가 가장 빠른 것으로 간주되는지에 따라 고유 한 장치 번호를 사용합니다. 그러나 PCI 버스 ID로 장치를 구할 수도 있습니다.

cudaError_t cudaDeviceGetByPCIBusId (int* device, char* pciBusId) 

또한 다른 방식으로 작동하며 특정 장치에 대한 버스 ID를 얻을 수 있습니다.

cudaError_t cudaDeviceGetPCIBusId (char* pciBusId, int len, int device) 

버스 ID는 값 0000:01:00.0 및 테이블에서 0000:02:00.0 될 것이다. 형식은 [domain]:[bus]:[device].[function]입니다.

[1][2]을 참조하십시오.