很遗憾,我收到以下错误消息:
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
必须从一台设备转移到另一台设备。)
问题:如果张量必须在设备之间传输,那么张量的大小是否有限制?
答案 0 :(得分:2)
是的,目前在进程之间发送时,单个张量上存在 2GB限制。这个限制是由TensorFlow通信层中使用的协议缓冲区表示(更确切地说,由protoc
编译器生成的自动生成的C ++包装器)强加的。
我们正在调查解除此限制的方法。与此同时,您可以通过手动添加tf.split()
或tf.slice()
和tf.concat()
操作来解决此问题,以便对张量进行分区以进行传输。如果您有非常大的tf.Variable
个对象,则可以使用variable partitioners自动执行此转换。请注意,在您的程序中,您同时在内存中有多个8GB张量,因此峰值内存利用率至少为16GB。