2016-10-19 10 views
2

Ich verwende GPU für Caffe. Wenn ich nvidia-smi tun, es zeigtGPU-Gerätenummer passt nicht

| 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 | 
+-----------------------------------------------------------------------------+ 

Aber wenn ich caffe laufen und wählen GPU 1, wird es mir Speicher aus erzählen. Wenn ich GPU 0 build/tools/caffe train -gpu 0 -solver solver.prototxt wähle, kann es laufen.

Warum ist es?

+3

CUDA verwendet eine eigene Geräteaufzählung, die von PCIe getrennt ist, und verfügt über eine Heuristik, die dem am besten "fähigen" Gerät die Ordnungszahl 0 zuordnet. Ich habe jetzt keine Zeit, Kapitel und Vers aus der Dokumentation zu zitieren und hoffe, dass jemand eine richtige Antwort schreiben wird. – njuffa

+0

können Sie prüfen, ob Ihre Batch-Größe für Ihren 2 GB Speicher zu hoch ist. Aufgrund der Bilddimension und des Netzwerklayer-Designs kann viel Speicher benötigt werden. Sagen Sie, wenn Sie ein Bild von 600x800 verwenden und Sie 16 Schichten des Netzes haben, die hohe Ausgabezahl und Kerngröße haben, die nicht in 2GB Speicher passen .... –

+0

Wenn Sie versuchen, laufen das gleiche Programm laufen auf Ihnen 'GPU 1' sicherlich passt es nicht auf 'GPU 0'. Von Ihren Informationen braucht es (** 7434MiB **/8191MiB) um 7GB und Ihre 'GPU 0' kann 1GB –

Antwort

3

Nvidia CUDA verwendet eine eigene Gerätenummerierung, basierend darauf, welches Gerät als das schnellste gilt. Es besteht jedoch auch die Möglichkeit, ein Gerät über seine PCI-Bus-ID zu erhalten.

Es funktioniert auch andersherum, und Sie können die Bus-ID für ein bestimmtes Gerät erhalten.

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

Die würden Bus-IDs die Werte 0000:01:00.0 und 0000:02:00.0 vom Tisch sein. Sie sind im Format [domain]:[bus]:[device].[function].

Siehe [1] und [2].