如何优化服务的Tensorflow模型

时间:2017-09-27 09:59:35

标签: optimization tensorflow keras tensorflow-serving

我和Keras训练了一个模特。现在我想通过Tensorflow服务部署它。因此,我以这种方式将其转换为SavedModel格式:

select title, purchase_date
from books
where purchase_date between '2005-06-30 00:00:00' and '2005-06-30 11:59:59' 

我开始使用Tensorflow服务(通过apt-get install安装Tensorflow-model-server)。但我的模型大小为376 MB(saved_model.pb和variables文件夹),预测时间非常长(每个请求大约0.3秒),当rps增加时,延迟会减少。

所以,我想优化我的模型,有人知道一些技巧吗?

P.S。我在Keras的模型保存为K.set_learning_phase(0) K._LEARNING_PHASE = tf.constant(0) # sess = K.get_session() if not os.path.exists(path): os.mkdir(path) export_path = os.path.join( tf.compat.as_bytes(path), tf.compat.as_bytes(str(get_new_version(path=path, current_version=int(version))))) print('Learning phase', K.learning_phase()) print('Exporting trained model to', export_path) builder = tf.saved_model.builder.SavedModelBuilder(export_path) model_input = tf.saved_model.utils.build_tensor_info(model.input) model_output = tf.saved_model.utils.build_tensor_info(model.output) prediction_signature = ( tf.saved_model.signature_def_utils.build_signature_def( inputs={'inputs': model_input}, outputs={'output': model_output}, method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)) with K.get_session() as sess: builder.add_meta_graph_and_variables( sess=sess, tags=[tf.saved_model.tag_constants.SERVING], signature_def_map={ 'predict': prediction_signature, }) builder.save()

1 个答案:

答案 0 :(得分:2)

一些想法:

  1. 请确保您没有在服务模型中留下任何队列(例如FIFOQueue)。这些通常用于训练以隐藏I / O延迟,但可能会损害服务性能。

  2. 考虑将多个推理请求一起批处理为对TF模型/图形的单个调用。请参阅--enable_batching,通过--batching_parameters_file进行调整。

  3. 除了这些提示之外,您还必须查看模型本身的结构。也许其他人对此有见解。

  4. -Chris(TF-Serving team)