Kann ich das Keras-Modell auf einer GPU ausführen?

125

Ich verwende ein Keras-Modell mit einer Einreichungsfrist von 36 Stunden. Wenn ich mein Modell auf der CPU trainiere, dauert es ungefähr 50 Stunden. Gibt es eine Möglichkeit, Keras auf der GPU auszuführen?

Ich verwende das Tensorflow-Backend und führe es auf meinem Jupyter-Notebook aus, ohne dass Anaconda installiert ist.

Ryan
quelle
Ich fand dies: medium.com/@kegui/… Es scheint, als könnte man hier hoch bewertete Fragen in einem engen Feld lesen und dann eine vollständige "Antwort" auf Medium geben und mit Ansichten tatsächlich Geld verdienen.
EngrStudent
Für AMD GPU. Siehe diesen Beitrag. stackoverflow.com/a/60016869/6117565
Bikram

Antworten:

175

Ja, Sie können Keras-Modelle auf einer GPU ausführen. Einige Dinge, die Sie zuerst überprüfen müssen.

  1. Ihr System verfügt über eine GPU (Nvidia. Da AMD noch nicht funktioniert)
  2. Sie haben die GPU-Version von Tensorflow installiert
  3. Sie haben die Installationsanweisungen für CUDA installiert
  4. Stellen Sie sicher, dass der Tensorflow mit der GPU ausgeführt wird. Überprüfen Sie, ob die GPU funktioniert

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

ODER

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

Die Ausgabe wird ungefähr so ​​aussehen:

[
  name: "/cpu:0"device_type: "CPU",
  name: "/gpu:0"device_type: "GPU"
]

Sobald dies alles erledigt ist, läuft Ihr Modell auf der GPU:

So überprüfen Sie, ob Keras (> = 2.1.1) eine GPU verwendet:

from keras import backend as K
K.tensorflow_backend._get_available_gpus()

Alles Gute.

Vikash Singh
quelle
Ich muss Python 3.5 für dieses Recht installieren, sonst funktioniert Tensorflow nicht.
Ryan
Nicht nötig. TF arbeitet mit 2.7 und 3.5. Wählen Sie die richtige Version von TF.
Vikash Singh
In Ordnung, ich gehe mit 2.7, habe Probleme mit der Installation von 3.5
Ryan
Ich bekomme diesen Fehler -Could not find any downloads that satisfy the requirement tensorflow in /usr/local/lib/python2.7/dist-packages Downloading/unpacking tensorflow Cleaning up... No distributions at all found for tensorflow in /usr/local/lib/python2.7/dist-packages Storing debug log for failure in /home/hyperworks/.pip/pip.log
Ryan
12
K.tensorflow_backend._get_available_gpus()funktioniert nicht in TensorFlow 2.0.
nbro
21

Sicher. Ich nehme an, Sie haben TensorFlow für GPU bereits installiert.

Nach dem Importieren von Keras müssen Sie den folgenden Block hinzufügen. Ich arbeite an einer Maschine mit 56 Kern-CPU und einer GPU.

import keras
import tensorflow as tf


config = tf.ConfigProto( device_count = {'GPU': 1 , 'CPU': 56} ) 
sess = tf.Session(config=config) 
keras.backend.set_session(sess)

Natürlich erzwingt diese Verwendung die Höchstgrenzen meiner Maschinen. Sie können die CPU- und GPU-Verbrauchswerte verringern.

Johncasey
quelle
Fehlermodule 'tensorflow' has no attribute 'ConfigProto'
Divyanshu Srivastava
Sie verwenden Tensorflow 2? Ich habe es für tf 1.X getestet.
Johncasey
13

2.0 Kompatible Antwort : Während die oben erwähnte Antwort ausführlich erklärt, wie die GPU im Keras-Modell verwendet wird, möchte ich erklären, wie dies getan werden kann Tensorflow Version 2.0.

Um zu wissen, wie viele GPUs verfügbar sind, können wir den folgenden Code verwenden:

print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

Geben Sie tf.debugging.set_log_device_placement(True)als erste Anweisung Ihres Programms an, welchen Geräten Ihre Operationen und Tensoren zugewiesen sind .

Durch Aktivieren der Geräteplatzierungsprotokollierung werden alle Tensorzuordnungen oder -vorgänge gedruckt. Führen Sie beispielsweise den folgenden Code aus:

tf.debugging.set_log_device_placement(True)

# Create some tensors
a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)

print(c)

gibt die unten gezeigte Ausgabe an:

Ausführen von op MatMul in Gerät / Job: localhost / replica: 0 / task: 0 / Gerät: GPU: 0 tf.Tensor ([[22. 28.] [49. 64.]], shape = (2, 2), dtype = float32)

Weitere Informationen finden Sie unter diesem Link

Tensorflow-Unterstützung
quelle
1

Natürlich. Wenn Sie auf Tensorflow- oder CNTk-Backends ausgeführt werden, wird Ihr Code standardmäßig auf Ihren GPU-Geräten ausgeführt. Bei Theano-Backends können Sie jedoch Folgendes verwenden

Theano Flaggen:

"THEANO_FLAGS = device = gpu, floatX = float32 python my_keras_script.py"

Kevin Jarvis
quelle
0

Überprüfen Sie, ob in Ihrem Skript die GPU im Task-Manager ausgeführt wird. Wenn nicht, vermuten Sie, dass Ihre CUDA-Version für die von Ihnen verwendete Tensorflow-Version geeignet ist, wie die anderen bereits vorgeschlagenen Antworten zeigen.

Darüber hinaus ist eine ordnungsgemäße CUDA-DNN-Bibliothek für die CUDA-Version erforderlich, um die GPU mit Tensorflow auszuführen. Laden Sie es von hier herunter / extrahieren Sie es und legen Sie die DLL (z. B. cudnn64_7.dll) im Ordner CUDA bin ab (z. B. C: \ Programme \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.1 \ bin).

Tae-Sung Shin
quelle