Puis-je exécuter le modèle Keras sur GPU?

125

J'utilise un modèle Keras, avec un délai de soumission de 36 heures, si j'entraîne mon modèle sur le processeur, cela prendra environ 50 heures, y a-t-il un moyen d'exécuter Keras sur GPU?

J'utilise le backend Tensorflow et je l'exécute sur mon notebook Jupyter, sans anaconda installé.

Ryan
la source
J'ai trouvé ceci: medium.com/@kegui/ ... On a l'impression que l'on pourrait parcourir les questions hautement cotées dans un champ étroit ici, puis faire une "réponse" complète sur Medium, et gagner de l'argent réel à partir de vues.
EngrStudent
Pour GPU AMD. Voir ce post. stackoverflow.com/a/60016869/6117565
bikram le

Réponses:

175

Oui, vous pouvez exécuter des modèles keras sur GPU. Peu de choses que vous devrez vérifier en premier.

  1. votre système a un GPU (Nvidia. Comme AMD ne fonctionne pas encore)
  2. Vous avez installé la version GPU de tensorflow
  3. Vous avez installé les instructions d'installation de CUDA
  4. Vérifiez que tensorflow fonctionne avec le GPU Vérifiez si le GPU fonctionne

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

OU

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

la sortie sera quelque chose comme ceci:

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

Une fois que tout cela est fait, votre modèle fonctionnera sur GPU:

Pour vérifier si keras (> = 2.1.1) utilise le GPU:

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

Bonne chance.

Vikash Singh
la source
Je devrai installer python 3.5 pour ce droit? Sinon tensorflow ne fonctionnera pas?
Ryan
Pas nécessaire. TF fonctionne avec 2.7 et 3.5 à la fois. Choisissez la bonne version de TF c'est tout.
Vikash Singh
ok, je vais mal avec 2.7, j'ai de gros problèmes avec l'installation de 3.5
Ryan
J'obtiens cette erreur -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()ne fonctionne pas dans TensorFlow 2.0.
nbro
21

Sûr. Je suppose que vous avez déjà installé TensorFlow pour GPU.

Vous devez ajouter le bloc suivant après l'importation des keras. Je travaille sur une machine qui a 56 cpu core et un 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)

Bien sûr, cette utilisation impose les limites maximales de mes machines. Vous pouvez diminuer les valeurs de consommation du processeur et du processeur graphique.

johncasey
la source
1
Erreurmodule 'tensorflow' has no attribute 'ConfigProto'
Divyanshu Srivastava
Vous utilisez tensorflow 2? Je l'ai testé pour tf 1.X.
johncasey
13

2.0 Réponse compatible : Bien que la réponse mentionnée ci-dessus explique en détail comment utiliser le GPU sur le modèle Keras, je veux expliquer comment cela peut être fait Tensorflow Version 2.0.

Pour savoir combien de GPU sont disponibles, nous pouvons utiliser le code ci-dessous:

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

Pour savoir à quels appareils vos opérations et tenseurs sont affectés, mettez-le tf.debugging.set_log_device_placement(True)comme première déclaration de votre programme.

L'activation de la journalisation du placement de périphérique entraîne l'impression de toutes les allocations ou opérations Tensor. Par exemple, exécutez le code ci-dessous:

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)

donne la sortie ci-dessous:

Exécution de l'opération MatMul dans device / job: localhost / replica: 0 / task: 0 / device: GPU: 0 tf.Tensor ([[22. 28.] [49. 64.]], shape = (2, 2), dtype = float32)

Pour plus d'informations, reportez - vous à ce lien

Prise en charge de Tensorflow
la source
1

Bien sûr. si vous utilisez des backends Tensorflow ou CNTk, votre code s'exécutera par défaut sur vos périphériques GPU, mais si les backends Theano, vous pouvez utiliser

Drapeaux Theano:

"THEANO_FLAGS = périphérique = gpu, floatX = float32 python my_keras_script.py"

Kevin Jarvis
la source
0

Vérifiez si votre script exécute le GPU dans le gestionnaire de tâches. Sinon, pensez que votre version de CUDA est la bonne pour la version de tensorflow que vous utilisez, comme les autres réponses le suggèrent déjà.

De plus, une bibliothèque DNN CUDA appropriée pour la version CUDA est requise pour exécuter le GPU avec tensorflow. Téléchargez / extrayez-le ici et placez la DLL (par exemple, cudnn64_7.dll) dans le dossier bin CUDA (par exemple, C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.1 \ bin).

Tae-Sung Shin
la source