Cuda GPU设备编号不为';不匹配

Cuda GPU设备编号不为';不匹配,cuda,gpu,nvidia,caffe,Cuda,Gpu,Nvidia,Caffe,我正在为Caffe使用GPU。当我执行nvidia smi时,它会显示 | NVIDIA-SMI 352.63 Driver Version: 352.63 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A

我正在为Caffe使用GPU。当我执行nvidia smi时,它会显示

| 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并选择GPU1时,它会告诉我内存不足。如果我选择GPU 0
build/tools/caffe train-GPU 0-solver solver.prototxt
,它可以运行


为什么

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]


请参阅和。

CUDA使用自己的设备枚举,与PCIe分离,并具有将设备序号0分配给最“有能力”的设备的启发式方法。我现在没有时间引用文档中的章节和诗句,希望有人能写出正确的答案。让我们检查一下,对于2GB内存来说,批大小是否太大。由于图像尺寸和网络层设计,它可能需要大量内存。假设您使用600x800的映像,并且您有16层网络,这些网络具有大量的输出和内核大小,可能不适合2GB内存……如果您尝试在
GPU 1
上运行相同的程序,那么它肯定不适合
GPU 0
。从您的信息来看(7434MiB/8191MiB)大约需要7GB,而您的
GPU 0能够达到1GB