tf-serving 官方文档中, 关于批处理请求,指南如下:
关键点在于:
1. 启用批处理请求 --enable_batching=True
2. 配置批处理文件 如上图所示内容
这里有个 坑在于,如果批处理的请求是序列数据(nlp场景,或ocr场景下),是可以自动做序列padding的,需要加上 额外的配置,这个要看它github 上的源码是做了这样的修改的。
3. 在启动了序列pad后,这里padding的方式 是默认在序列末尾添加padding (末尾),这个并不能主观设置。
4. padding 值选取,这里由于官方并没有给出可配置的选项,所以根据这个帖子:
https://github.com/tensorflow/serving/issues/1279
padding 值选取为收到seq 数据请求的第一个值,所以本人在处理这个问题时,为了统一控制padding值,
只能自己在发请求前人为将数据按时间维先padding 一次,我这里的padding值指定为999:
input_1_with_padding = np.ones((input_data_1.shape[0], input_data_1.shape[1]+1, input_data_1.shape[2]))
input_1_with_padding[:, 0, :] = 999
input_1_with_padding[:, 1:, :] = input_data_1[:, :, :]
然后并发发请求,每个请求返回数据的时间长度都不同,也就是tf-serving会自动批处理不同长度的请求来提高效率,
所以,返回结果的处理需要根据每条数据自己的长度来“截取”。