Tensor too big for graph distribution - "InternalError: Message length was negative"
Tensor too big for graph distribution - "InternalError: Message length was negative"
我尝试运行下图:
不幸的是,我收到以下错误消息:
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 通信层中使用的协议缓冲区表示(更准确地说,由 protoc
编译器生成的自动生成的 C++ 包装器)强加。
我们正在研究解除此限制的方法。同时,您可以通过手动添加 tf.split()
或 tf.slice()
和 tf.concat()
操作来对张量进行分区以进行传输来解决此问题。如果您有非常大的 tf.Variable
个对象,您可以使用 variable partitioners 自动执行此转换。请注意,在您的程序中,内存中同时有多个 8GB 张量,因此内存利用率峰值至少为 16GB。
我尝试运行下图:
不幸的是,我收到以下错误消息:
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 通信层中使用的协议缓冲区表示(更准确地说,由 protoc
编译器生成的自动生成的 C++ 包装器)强加。
我们正在研究解除此限制的方法。同时,您可以通过手动添加 tf.split()
或 tf.slice()
和 tf.concat()
操作来对张量进行分区以进行传输来解决此问题。如果您有非常大的 tf.Variable
个对象,您可以使用 variable partitioners 自动执行此转换。请注意,在您的程序中,内存中同时有多个 8GB 张量,因此内存利用率峰值至少为 16GB。