2016-05-19 31 views
13

Hướng dẫn MNIST For ML Beginners cho tôi lỗi khi chạy print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})). Mọi thứ khác chạy tốt.TensorFlow: Dst tensor không được khởi tạo

Lỗi và dấu vết:

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"]()]] 

tôi chỉ chuyển sang một phiên bản mới hơn của CUDA, vì vậy có lẽ đây có cái gì để làm với điều đó? Có vẻ như lỗi này là về việc sao chép một tensor vào GPU.

Stack: EC2 máy g2.8xlarge, Ubuntu 14.04

UPDATE:

print(sess.run(accuracy, feed_dict={x: batch_xs, y_: batch_ys})) chạy tốt. Điều này dẫn tôi đến nghi ngờ rằng vấn đề là tôi đang cố gắng chuyển một tensor lớn đến GPU và nó không thể lấy nó. Nhỏ tensors như một minibatch làm việc tốt.

UPDATE 2:

tôi đã tìm ra một cách chính xác lớn như thế nào tensors phải để gây ra vấn đề này:

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]})) 
+0

Tôi cũng gặp vấn đề tương tự, mặc dù có mô hình khác. Tuy nhiên, nó chỉ xảy ra khi tôi cố gắng chọn gpus bản thân mình bằng cách sử dụng td.device(). Bạn đang sử dụng nhiều GPU? – Cesar

Trả lời

2

Hãy ghi nhớ những g2.8xlarge EC2 chỉ có 4 gb của gpu ký ức.
https://aws.amazon.com/ec2/instance-types/

Tôi không có cách nào tốt để tìm hiểu số lượng không gian mà mô hình chiếm không phải khi chạy nó với kích thước lô là 1, sau đó bạn có thể trừ đi bao nhiêu không gian.

Từ đó bạn có thể xác định kích thước lô tối đa của mình. Điều này sẽ làm việc nhưng tôi nghĩ rằng tensorflow phân bổ bộ nhớ gpu tự động tương tự như ngọn đuốc và không giống như caffe sẽ chặn không gian tối đa gpu nó đòi hỏi từ nhận được đi. Vì vậy, bạn có thể muốn được bảo thủ với kích thước lô tối đa.

5

Đối với ngắn gọn, thông báo lỗi này được tạo khi không đủ bộ nhớ để xử lý kích thước lô.

Mở rộng vào liên kết Steven 's (Tôi không thể gửi bình luận nào), sau đây là một vài thủ thuật để giám sát/sử dụng bộ nhớ kiểm soát trong Tensorflow:

  • Theo dõi sử dụng bộ nhớ trong quá trình chạy, hãy xem xét đăng chạy siêu dữ liệu. Sau đó, bạn có thể thấy mức sử dụng bộ nhớ trên mỗi nút trong biểu đồ của mình trong Tensorboard. Xem Tensorboard information page để biết thêm thông tin và ví dụ về điều này.
  • Theo mặc định, Tensorflow sẽ cố gắng cấp phát càng nhiều bộ nhớ GPU càng tốt. Bạn có thể thay đổi điều này bằng cách sử dụng các tùy chọn GPUConfig, do đó, Tensorflow sẽ chỉ cấp phát bộ nhớ nhiều khi cần thiết. Xem số documentation về điều này. Ở đó bạn cũng tìm thấy một tùy chọn mà sẽ cho phép bạn chỉ phân bổ một phần nhất định của bộ nhớ GPU của bạn (tôi đã tìm thấy điều này được chia đôi khi mặc dù.).
+0

xin lưu ý rằng ['thanks'] (https://meta.stackoverflow.com/questions/288160/no-thanks-damn-it) và ['greetings'] (https://meta.stackexchange.com/questions/2950/nên-hi-thanks-taglines-và-salutations-be-removed-từ-bài viết) được coi là phong cách xấu cho loại trang web FAQ. Muốn truyền đạt thông tin, vì gần đây tôi đã học được nó! – Zroach

Các vấn đề liên quan