Le tutoriel MNIST For ML Beginners
me donne une erreur lorsque j'exécute print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
. Tout le reste fonctionne bien.
Erreur et trace:
InternalErrorTraceback (most recent call last)
<ipython-input-16-219711f7d235> in <module>()
----> 1 print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata)
338 try:
339 result = self._run(None, fetches, feed_dict, options_ptr,
--> 340 run_metadata_ptr)
341 if run_metadata:
342 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata)
562 try:
563 results = self._do_run(handle, target_list, unique_fetches,
--> 564 feed_dict_string, options, run_metadata)
565 finally:
566 # The movers are no longer used. Delete them.
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
635 if handle is None:
636 return self._do_call(_run_fn, self._session, feed_dict, fetch_list,
--> 637 target_list, options, run_metadata)
638 else:
639 return self._do_call(_prun_fn, self._session, handle, feed_dict,
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc in _do_call(self, fn, *args)
657 # pylint: disable=protected-access
658 raise errors._make_specific_exception(node_def, op, error_message,
--> 659 e.code)
660 # pylint: enable=protected-access
661
InternalError: Dst tensor is not initialized.
[[Node: _recv_Placeholder_3_0/_1007 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="Edge_312__recv_Placeholder_3_0", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
[[Node: Mean_1/_1011 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="Edge_319_Mean_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
Je viens de passer à une version plus récente de CUDA, alors peut-être que cela a quelque chose à voir avec ça? On dirait que cette erreur concerne la copie d'un tenseur sur le GPU.
Pile: EC2 g2.8xlarge machine, Ubuntu 14.04
METTRE À JOUR:
print(sess.run(accuracy, feed_dict={x: batch_xs, y_: batch_ys}))
fonctionne correctement. Cela me laisse penser que le problème est que j'essaie de transférer un tenseur énorme sur le GPU et que cela ne peut pas le supporter. Les petits tenseurs, comme les mini-lots, fonctionnent parfaitement.
MISE À JOUR 2:
J'ai compris exactement la taille que doivent avoir les tenseurs pour causer ce problème:
batch_size = 7509 #Works.
print(sess.run(accuracy, feed_dict={x: mnist.test.images[0:batch_size], y_: mnist.test.labels[0:batch_size]}))
batch_size = 7510 #Doesn't work. Gets the Dst error.
print(sess.run(accuracy, feed_dict={x: mnist.test.images[0:batch_size], y_: mnist.test.labels[0:batch_size]}))
Par souci de brièveté, ce message d'erreur est généré lorsqu'il n'y a pas assez de mémoire pour gérer la taille du lot.
En développant le lien de Steven (je ne peux pas encore publier de commentaires), voici quelques astuces pour surveiller/contrôler l'utilisation de la mémoire dans Tensorflow:
Gardez à l'esprit que l'ec2 g2.8xlarge ne dispose que de 4 Go de mémoire gpu.
https://aws.Amazon.com/ec2/instance-types/
Je ne dispose pas d'un moyen efficace de connaître la quantité d'espace occupée par le modèle, si ce n'est de l'exécuter avec une taille de lot de 1, puis vous pouvez soustraire la quantité d'espace occupée par une image.
De là, vous pouvez déterminer la taille maximale de votre lot. Cela devrait fonctionner, mais je pense que tensorflow alloue de la mémoire gpu de manière dynamique, semblable à la torche et contrairement à caffe, qui bloquera l’espace gpu maximum requis dès le départ. Donc, vous voudrez probablement être prudent avec la taille maximale du lot.
Je pense que ce lien peut aider https://github.com/aymericdamien/TensorFlow-Examples/issues/38#issuecomment-223793214 . Dans mon cas, c’était le GPU qui était occupé (occupé à 93%) à former un autre modèle dans une screen
. J'avais besoin de mettre fin à ce processus et j'étais heureux plus tard de voir les choses fonctionner.