Comment puis-je résoudre «manqué de mémoire gpu» dans TensorFlow
J'ai couru le MNIST démo en TensorFlow avec 2 conv couches et la conect couche, j'ai reçu un message 'a manqué de mémoire en essayant de répartir 2.59 GiB' , mais elle montre que la mémoire totale est de 4.69 GiB, et la mémoire libre est 3.22 GiB, comment peut-il arrêter avec 2.59 GiB? Et avec un plus grand réseau, comment puis-je gérer la mémoire gpu? Je ne concerner que la meilleure façon d'utiliser de la mémoire graphique et vous voulez savoir comment c'est arrivé, non pas à la pré-allocation de mémoire
source d'informationauteur Fangxin
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas ça. tout d'abord, vous pouvez voir combien de mémoire il obtient quand il s'exécute par le suivi de votre gpu. par exemple, si vous avez un gpu nvidia u peut vérifier avec
watch -n 1 nvidia-smi
de commande.Mais dans la plupart des cas si vous n'avez pas de fixer la limite de la fraction de la mémoire gpu, il alloue près de la totalité de la mémoire libre. votre problème est le manque de suffisamment de mémoire pour votre gpu. cnn réseaux sont totalement lourd. Lorsque vous essayez de nourrir votre réseau NE le faites PAS avec votre ensemble de données. NE ce procédé d'alimentation en bas des tailles de lots.
Je rencontre des erreurs de mémoire insuffisante lors de la formation d'une petite CNN sur une GTX 970. Grâce à un peu d'un coup de chance, j'ai découvert que de dire TensorFlow d'allouer de la mémoire sur la carte graphique, si nécessaire (au lieu de à l'avant) résolu tous mes problèmes. Ceci peut être accompli en utilisant le code Python suivant:
Précédemment, TensorFlow serait pré-allouer ~90% de la mémoire GPU. Mais, pour une raison inconnue, ce sera plus tard suite à des erreurs de mémoire quand j'ai augmenté la taille du réseau. En utilisant le code ci-dessus, je n'ai plus OOM erreurs.
Par défaut, TensorFlow cartes presque tous les GPU de la mémoire de tous les Gpu (sous réserve de CUDA_VISIBLE_DEVICES) visibles pour le processus. Ceci est fait pour utiliser plus efficacement les relativement précieux de la mémoire graphique de ressources sur les appareils en réduisant la fragmentation de la mémoire.
TensorFlow fournit deux options de configuration de la Session de contrôle.
La première est la allow_growth option, qui tente d'allouer seulement la quantité de mémoire graphique basé sur l'exécution des allocations:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)
La deuxième méthode est la per_process_gpu_memory_fraction option, qui détermine la fraction de la quantité totale de mémoire que chaque visibles GPU doit être alloué. Par exemple, vous pouvez dire TensorFlow à seulement allouer 40% de la mémoire totale de chaque GPU par:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config, ...)