急于加载整个模型以估计Tensorflow服务的内存消耗

时间:2019-05-06 21:23:51

标签: c++ tensorflow machine-learning memory tensorflow-serving

Tensorflow Serving Lazy在执行预测时初始化模型DAG中的节点。这使得很难估计保存整个模型所需的内存(RAM)。 是否有强制Tensorflow Serving将模型完全初始化/加载到内存的标准方法?

2 个答案:

答案 0 :(得分:1)

您可以使用模型预热来强制将所有组件加载到内存中。 [1]

[1] https://www.tensorflow.org/tfx/serving/saved_model_warmup

答案 1 :(得分:0)

在下面添加链接的内容,该内容由@PedApps提供。

简介:

TensorFlow运行时具有延迟初始化的组件,这可能导致加载后发送给模型的第一个请求的等待时间较长。

此延迟可能比单个推理请求的延迟高几个数量级。

减少延迟初始化对请求等待时间的影响,可以在模型加载时间通过提供一组推理请求样本来触发子系统和组件的初始化 SavedModel

此过程称为“热身” 模型。

用法:

SavedModel Warmup支持

Regress, Classify, MultiInference and Predict

要在加载时触发模型预热,请在assets.extra目录的SavedModel子文件夹下附加一个预热数据文件。

模型预热正常工作的要求:

  • 预热文件名:“ tf_serving_warmup_requests”

  • 文件位置:assets.extra /

  • 文件格式:TFRecord,每个记录均作为PredictionLog。

  • 预热记录数<= 1000。

  • 预热数据必须代表所使用的推理请求 在服务中。

产生预热数据的示例代码段:

import tensorflow as tf
from tensorflow_serving.apis import classification_pb2
from tensorflow_serving.apis import inference_pb2
from tensorflow_serving.apis import model_pb2
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_log_pb2
from tensorflow_serving.apis import regression_pb2

def main():
    with tf.python_io.TFRecordWriter("tf_serving_warmup_requests") as writer:
        # replace <request> with one of:
        # predict_pb2.PredictRequest(..)
        # classification_pb2.ClassificationRequest(..)
        # regression_pb2.RegressionRequest(..)
        # inference_pb2.MultiInferenceRequest(..)
        log = prediction_log_pb2.PredictionLog(
            predict_log=prediction_log_pb2.PredictLog(request=<request>))
        writer.write(log.SerializeToString())

if __name__ == "__main__":
    main()