J'essaie de former un réseau neuronal sur un GPU à l'aide de Keras et j'obtiens une erreur «Ressources épuisées: MOO lors de l'affectation d'un tenseur». Le tenseur spécifique qu’il essaie d’affecter n’est pas très gros, alors je suppose qu’un tenseur précédent avait consommé presque toute la mémoire VRAM. Le message d'erreur est accompagné d'un indice suggérant ceci:
Conseil: Si vous souhaitez voir une liste des tenseurs attribués lorsque le MOO se produit, ajoutez report_tensor_allocations_upon_oom à RunOptions pour obtenir des informations sur l'allocation actuelle.
Cela sonne bien, mais comment puis-je le faire? RunOptions semble être une chose de Tensorflow, et le peu de documentation que je peux trouver pour l’associer à une "session". J'utilise Keras, donc Tensorflow est caché sous une couche d'abstraction et ses sessions sous une autre couche en dessous de celle-ci.
Comment puis-je creuser sous tout pour définir cette option de manière à ce qu'elle prenne effet?
Ce n’est pas aussi difficile qu’il semble, ce que vous devez savoir, c’est que, selon documentation , le paramètre ** kwargs passé à model.compile
sera passé à session.run
Ainsi, vous pouvez faire quelque chose comme:
import tensorflow as tf
run_opts = tf.RunOptions(report_tensor_allocations_upon_oom = True)
model.compile(loss = "...", optimizer = "...", metrics = "..", options = run_opts)
Et il devrait être passé directement à chaque appel de session.run
.
Actuellement, il n'est pas possible d'ajouter les options à model.compile
. Voir: https://github.com/tensorflow/tensorflow/issues/19911