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。