不幸的是,我收到以下错误消息:
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
必须从一台设备传输到另一台设备。)
问题:如果张量必须在设备之间传输,张量的大小是否有限制?
最佳答案
是的,目前在进程之间发送单个张量时有2GB 限制。此限制是由 TensorFlow 通信层中使用的 Protocol Buffer 表示(更准确地说,由 protoc
编译器生成的自动生成的 C++ 包装器)施加的。
我们正在研究解除此限制的方法。同时,您可以通过手动添加 tf.split()
或 tf.slice()
和 tf.concat()
来解决此问题code> 操作来划分张量以进行传输。如果您有非常大的 tf.Variable 对象,则可以使用 variable partitioners自动执行此转换。请注意,在您的程序中,内存中同时有多个 8GB 张量,因此峰值内存利用率将至少为 16GB。
关于python - 张量对于图形分布来说太大 - "InternalError: Message length was negative",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39301773/