如何确保张量流正在使用所有cpu内核进行会话?

时间:2019-10-24 16:00:02

标签: python tensorflow keras tensorflow-serving

我想部署一个具有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),但是我无法控制每个会话使用的内核数量。

我认为其他内核可用于并发请求很好,但是我想拥有更多控制权。

1 个答案:

答案 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