我想部署一个具有tensorflow-serving的keras模型。 该模型从keras .h5模型转换为.pb文件。 (原始模型来自[here] [https://github.com/shaoanlu/face_toolbox_keras))
在此模型上使用keras进行推理时,如果仅使用我的CPU,则12个内核正在工作,推理平均需要0.7s。
转换模型并使用张量流服务时,它仅使用一个内核,平均需要2.7s。
我尝试将--tensorflow_session_parallelism,--tensorflow_intra_op_parallelism和--tensorflow_inter_op_parallelism等选项设置为12,但没有任何变化,从tfserving容器内部看顶部时,只有一个核心工作。
我也尝试为机器的体系结构编译tensorflow-serving,但是我得到了一些改进(从2.7s到2.5s),但是我无法控制每个会话使用的内核数量。
我认为其他内核可用于并发请求很好,但是我想拥有更多控制权。
答案 0 :(得分:2)
问题可能是由于constant folding pass
引起的。使用tf.placeholder
应该可以解决问题。
if args.const_fold:
A = tf.ones([size, size], name=("A%s" % i))
B = tf.ones([size, size], name=("B%s" % i))
else:
A_name = "A%s" % i
B_name = "B%s" % i
A = tf.placeholder(tf.float32, shape=[size, size], name=A_name)
B = tf.placeholder(tf.float32, shape=[size, size], name=B_name)
feed["%s:0" % A_name] = np.random.rand(size, size)
feed["%s:0" % B_name] = np.random.rand(size, size)
根据我的理解,您的代码可能如上所述,如if block
所示。将其更改为else block
应该可以解决问题。
有关更多信息,请参阅此Stack Overflow Link