Docker Tensorflow服务预测太大

时间:2019-02-17 00:08:44

标签: docker grpc tensorflow-serving

我正在尝试使用Docker +张量流服务来服务我的模型。但是,由于使用迭代器为模型提供服务的限制(使用
make_initializable_iterator()),我不得不拆分模型。

我正在使用grpc与我在docker上的模型进行交互。问题是我预测的张量约为10MB,序列化的约为4.1MB。我收到的错误是:

"grpc_message":"Received message larger than max (9830491 vs. 4194304)"

是否有一种方法可以将我的预测写到磁盘上,而不是在grpc响应中传输它们?输出文件是32通道张量,因此在使用tf.io.write_file保存到磁盘之前,我无法将其解码为png。

谢谢!

2 个答案:

答案 0 :(得分:2)

在gRPC中,默认消息长度为4MB,但是我们可以在python中扩展gRPC客户端和服务器请求中的大小,如下所示。您将能够发送和接收大消息而无需流式传输

request = grpc.insecure_channel('localhost:6060', 
options=[('grpc.max_send_message_length', MAX_MESSAGE_LENGTH), 
('grpc.max_receive_message_length', MAX_MESSAGE_LENGTH)])

在GO lang中,我们提供了引用网址的功能

https://godoc.org/google.golang.org/grpc#MaxMsgSize https://godoc.org/google.golang.org/grpc#WithMaxMsgSize

答案 1 :(得分:2)

使用C ++在gRPC客户端请求中将消息大小设置为Unlimited的代码如下所示:

grpc::ChannelArguments ch_args;
ch_args.SetMaxReceiveMessageSize(-1);
std::shared_ptr<grpc::Channel> ch = grpc::CreateCustomChannel("localhost:6060", grpc::InsecureChannelCredentials(), ch_args);