2015-12-23 5 views
6

Auf der CIFAR-10-Tutorial, habe ich festgestellt, dass die Variablen in der CPU-Speicher abgelegt sind, aber es ist in cifar10-train.py angegeben, dass es mit einer einzigen GPU trainiert wird.Variablen auf CPU, Training/Gradienten auf GPU

Ich bin ziemlich verwirrt .. sind die Layer/Aktivierungen in GPU gespeichert? Oder sind die Gradienten in der GPU gespeichert? Ansonsten würde es so aussehen, als würde das Speichern von Variablen auf der CPU die GPU überhaupt nicht nutzen - alles ist im CPU-Speicher gespeichert, so dass nur die CPU für die Vorwärts-/Rückwärts-Propagierung verwendet wird.

Wenn die GPU für f/b-Propagierung verwendet wurde, wäre das nicht eine Verschwendung aufgrund von Latenz-Shuffling-Daten CPU < -> GPU?

Antwort

5

Tatsächlich sind in cifar10-train die Aktivierungen und Gradienten auf GPU, nur die Parameter sind auf der CPU. Sie haben Recht, dass dies aufgrund der Kosten für das Kopieren von Parametern zwischen CPU und GPU nicht optimal für das Einzel-GPU-Training ist. Ich vermute, der Grund dafür ist eine einzige Bibliothek für Single-GPU- und Multi-GPU-Modelle, da es im Multi-GPU-Fall wahrscheinlich schneller ist, Parameter auf der CPU zu haben. Sie können leicht testen, welche Geschwindigkeit Sie erreichen können, indem Sie alle Variablen in die GPU verschieben. Entfernen Sie einfach die Datei "mit tf.device ('/ cpu: 0')" in "_variable_on_cpu" in cifar10.py.