Dans Keras
, la bibliothèque d'apprentissage en profondeur de haut niveau, il existe plusieurs types de couches récurrentes; ceux-ci incluent LSTM
(mémoire à court terme) et CuDNNLSTM
. Selon le documentation de Keras , un CuDNNLSTM
est un:
Mise en œuvre rapide de LSTM soutenue par CuDNN. Ne peut être exécuté que sur GPU, avec le backend TensorFlow.
Je pense que Keras utilise automatiquement le GPU chaque fois que cela est possible. Selon le instructions de compilation de TensorFlow , pour disposer d’un backend GPU TensorFlow fonctionnel, vous aurez besoin de CuDNN:
Le logiciel NVIDIA suivant doit être installé sur votre système:
- Cuda Toolkit de NVIDIA (> = 7.0). Nous recommandons la version 9.0. Pour plus de détails, voir la documentation de NVIDIA. Assurez-vous d’ajouter les noms de chemin Cuda pertinents à la variable d’environnement LD_LIBRARY_PATH, comme décrit dans la documentation NVIDIA.
- Les pilotes NVIDIA associés au Cuda Toolkit de NVIDIA.
- cuDNN (> = v3). Nous recommandons la version 6.0. Pour plus de détails, reportez-vous à la documentation de NVIDIA, en particulier à la description de l'ajout du chemin d'accès approprié à votre variable d'environnement LD_LIBRARY_PATH.
Par conséquent, en quoi un CuDNNLSTM
pourrait-il différer de quelque manière que ce soit d'un LSTM
normal utilisant un backend GPU TensorFlow? Est-ce que CuDNNLSTM
sera automatiquement sélectionné et remplacera le LSTM
normal lorsqu'un backend GPU TensorFlow disponible sera trouvé?
Pourquoi ne pas l'essayer pour vous-même et voir? Dans mon cas, former un modèle avec LSTM
a pris 10 minutes et 30 secondes. Basculer simplement l'appel de LSTM()
à CuDNNLSTM()
a pris moins d'une minute.
J'ai également remarqué que le passage à CuDNNLSTM()
accélère considérablement model.evaluate()
et model.predict()
.
Les GPU sont utiles pour les calculs parallèles massifs. La plupart des opérations d’algèbre linéaire peuvent être parallélisées pour améliorer les performances. Des opérations vectorielles telles que la multiplication de matrice et la descente de gradient peuvent être appliquées à de grandes matrices exécutées en parallèle avec la prise en charge de GPU. CUDA - Compute Unified Device Architecture fournit une interface permettant aux opérateurs de vecteurs de tirer parti du parallélisme des GPU. CuDNN implémente les noyaux pour les grandes opérations matricielles sur GPU en utilisant CUDA.
Ici, CuDNNLSTM est conçu pour le traitement parallèle CUDA et ne peut pas s'exécuter s'il n'y a pas de GPU. Mais LSTM est conçu pour les processeurs normaux. La rapidité d'exécution est due au parallélisme.