Tensor对于图形分布而言太大 - “InternalError:消息长度为负”

时间:2016-09-02 23:15:17

标签: python tensorflow distribution

我尝试运行以下图表: Graph that causes the error.

很遗憾,我收到以下错误消息:

tensorflow.python.framework.errors.InternalError: Message length was negativ
 [[Node: random_uniform_1_S1 = _Recv[client_terminated=false,
  recv_device= "/job:worker/replica:0/task:1/cpu:0",
  send_device="/job:worker/replica:0/task:0/cpu:0",
  send_device_incarnation=3959744268201087672,
  tensor_name="edge_18_random_uniform_1",
  tensor_type=DT_DOUBLE,
  _device="/job:worker/replica:0/task:1/cpu:0"]()]]

我注意到如果random_uniform_1的大小为800MB,则不会出现此错误消息,但如果大小为8GB,则会发生此错误消息。

(请注意,random_uniform_1必须从一台设备转移到另一台设备。)

问题:如果张量必须在设备之间传输,那么张量的大小是否有限制?

1 个答案:

答案 0 :(得分:2)

是的,目前在进程之间发送时,单个张量上存在 2GB限制。这个限制是由TensorFlow通信层中使用的协议缓冲区表示(更确切地说,由protoc编译器生成的自动生成的C ++包装器)强加的。

我们正在调查解除此限制的方法。与此同时,您可以通过手动添加tf.split()tf.slice()tf.concat()操作来解决此问题,以便对张量进行分区以进行传输。如果您有非常大的tf.Variable个对象,则可以使用variable partitioners自动执行此转换。请注意,在您的程序中,您同时在内存中有多个8GB张量,因此峰值内存利用率至少为16GB。