Je travaille dans un environnement dans lequel les ressources de calcul sont partagées, c'est-à-dire que nous avons quelques machines serveurs équipées de quelques GPU Nvidia Titan X chacune.
Pour les modèles de petite à moyenne taille, les 12 Go du Titan X sont généralement suffisants pour que 2 à 3 personnes puissent exécuter la formation simultanément sur le même GPU. Si les modèles sont suffisamment petits pour qu'un seul modèle ne tire pas pleinement parti de toutes les unités de calcul du GPU, cela peut en fait entraîner une accélération par rapport à l'exécution d'un processus de formation après l'autre. Même dans les cas où l'accès simultané au GPU ralentit le temps de formation individuel, il est toujours agréable d'avoir la flexibilité d'avoir plusieurs utilisateurs simultanément formés sur le GPU.
Le problème avec TensorFlow est que, par défaut, il alloue la quantité totale de mémoire GPU disponible lors de son lancement. Même pour un petit réseau neuronal à deux couches, je constate que les 12 Go de mémoire GPU sont utilisés.
Existe-t-il un moyen de faire en sorte que TensorFlow n'alloue que, disons, 4 Go de mémoire GPU, si l'on sait que cela suffit pour un modèle donné?
la source
MonitoredTrainingSession
https://github.com/tensorflow/tensorflow/issues/1578
la source
from keras import backend as K
etK.set_session(sess)
pour éviter les limitations de mémoireVoici un extrait du livre
Deep Learning with TensorFlow
1) Permettre la croissance: (plus flexible)
La deuxième méthode est l'
per_process_gpu_memory_fraction
option, qui détermine la fraction de la quantité totale de mémoire que leeach
GPU visible doit être alloué. Remarque: Aucune libération de mémoire n'est nécessaire, cela peut même aggraver la fragmentation de la mémoire une fois terminé.2) Allouer de la mémoire fixe :
Pour allouer uniquement
40%
la mémoire totale de chaque GPU par:Remarque: Cela n'est utile que si vous voulez vraiment lier la quantité de mémoire GPU disponible sur le processus TensorFlow.
la source
Mis à jour pour TensorFlow 2.0 Alpha et au-delà
À partir des documents Alpha 2.0, la réponse est maintenant juste une ligne avant de faire quoi que ce soit avec TensorFlow:
la source
Toutes les réponses ci-dessus supposent l'exécution avec un
sess.run()
appel, ce qui devient l'exception plutôt que la règle dans les versions récentes de TensorFlow.Lorsque vous utilisez le
tf.Estimator
framework (TensorFlow 1.4 et supérieur), le moyen de transmettre la fraction à la création impliciteMonitoredTrainingSession
est,De même en mode Désireux (TensorFlow 1.5 et supérieur),
Edit: 11-04-2018 Par exemple, si vous devez utiliser
tf.contrib.gan.train
, vous pouvez utiliser quelque chose de similaire à ci-dessous:la source
Pour Tensorflow versions 2.0 et 2.1, utilisez l'extrait de code suivant :
Pour les versions précédentes , l'extrait suivant fonctionnait pour moi:
la source
Tensorflow 2.0 Beta et (probablement) au-delà
L'API a de nouveau changé. Il se trouve maintenant dans:
Alias:
Références:
Voir aussi: Tensorflow - Utilisez un GPU : https://www.tensorflow.org/guide/gpu
pour Tensorflow 2.0 Alpha voir: cette réponse
la source
Vous pouvez utiliser
dans vos variables d'environnement.
Dans le code tensorflow :
la source
Prise sans vergogne: si vous installez le Tensorflow pris en charge par le GPU, la session allouera d'abord tous les GPU, que vous le configuriez pour n'utiliser que le CPU ou le GPU. Je peux ajouter mon conseil que même si vous définissez le graphique pour utiliser uniquement le CPU, vous devez définir la même configuration (comme indiqué ci-dessus :)) pour éviter l'occupation indésirable du GPU.
Et dans une interface interactive comme IPython, vous devez également définir cette configuration, sinon elle allouera toute la mémoire et n'en laissera presque aucune pour les autres. C'est parfois difficile à remarquer.
la source
Pour Tensorflow 2.0, cette solution a fonctionné pour moi. (TF-GPU 2.0, Windows 10, GeForce RTX 2070)
la source
Si vous utilisez Tensorflow 2, essayez ce qui suit:
la source
j'ai essayé de former unet sur le jeu de données voc mais à cause de la taille énorme de l'image, la mémoire se termine. J'ai essayé tous les conseils ci-dessus, même essayé avec une taille de lot == 1, mais sans amélioration. parfois, la version TensorFlow provoque également des problèmes de mémoire. essayez en utilisant
la source
Eh bien, je suis nouveau sur tensorflow, j'ai Geforce 740m ou quelque chose de GPU avec 2 Go de RAM, je courais un genre d'exemple manuscrit pour une langue maternelle avec des données de formation contenant 38700 images et 4300 images de test et essayais d'obtenir la précision, rappelez-vous, F1 utilisant le code suivant comme sklearn ne me donnait pas de réponses précises. une fois que j'ai ajouté cela à mon code existant, j'ai commencé à obtenir des erreurs GPU.
De plus, mon modèle était lourd, je suppose, j'obtenais une erreur de mémoire après 147, 148 époques, puis j'ai pensé pourquoi ne pas créer de fonctions pour les tâches, donc je ne sais pas si cela fonctionne de cette façon dans Tensrorflow, mais je me suis demandé si une variable locale était utilisé et lorsqu'il est hors de portée, il peut libérer de la mémoire et j'ai défini les éléments ci-dessus pour la formation et les tests dans les modules, j'ai pu atteindre 10000 époques sans aucun problème, j'espère que cela vous aidera.
la source
la source