我正在使用Tensorflow Serve来运行存储在s3存储桶中的模型。我还将模型配置文件保存在单独的 s3 存储桶中。我的用例是,为了动态添加模型而无需重新启动服务器,我将定期轮询此配置文件以进行更改。
为此,我使用了以下设置:
- tensorflow/serving:1.15.0 图像使用 helm 部署到 Kubernetes 集群中。
- 在部署的 helm 图表中,以下行定义了用于轮询配置的 s3 的运行命令和参数
command:
- "/usr/bin/tensorflow_model_server"
args:
- --model_config_file={path to config file}
- --model_config_file_poll_wait_seconds=60
- 舵图还为AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION、S3_ENPOINT和AWS_LOG_LEVEL=3设置环境变量
模型配置文件包含以下内容:
model_config_list: {
config: {
name: "mlp",
base_path: "s3://bucketname/mlp",
model_platform: "tensorflow",
model_version_policy: {
specific: {
versions: 20200130
}
}
}
}
一切似乎都按预期工作,Tensorflow 加载了正确的模型并正确运行它们。我看到的问题是,每次服务器轮询 S3 中的配置文件时,即使模型相同,它也会重新添加模型。 这将产生如下常规日志。
2020-02-06 07:07:01.930476: I tensorflow_serving/model_servers/server_core.cc:462] Adding/updating models.
2020-02-06 07:07:01.930495: I tensorflow_serving/model_servers/server_core.cc:573] (Re-)adding model: mlp
2020-02-06 08:07:01.965518: I tensorflow_serving/model_servers/server_core.cc:462] Adding/updating models.
2020-02-06 08:07:01.965548: I tensorflow_serving/model_servers/server_core.cc:573] (Re-)adding model: mlp
2020-02-06 09:07:01.967228: I tensorflow_serving/model_servers/server_core.cc:462] Adding/updating models.
2020-02-06 09:07:01.967259: I tensorflow_serving/model_servers/server_core.cc:573] (Re-)adding model: mlp
我担心的是,如果轮询频率太高,这将影响模型的性能。我想知道是否真的有任何变化,或者这只是额外的日志记录。
这一切看起来都很正常。
查看代码 (server_core.cc(,似乎这些消息是在读取 model.config 文件时显示的,而不是在加载模型时显示的......这必须在读取 model.config 文件后发生。虽然我不太理解代码,但我认为我们可以得出结论,加载模型本身时不会显示这些消息;但在工作流的较早点显示。
它只会在显示这些消息后尝试找出哪些模型是新的。 您可以在此处看到比较。
你的问题有一件奇怪的事情。从消息的时间戳来看,似乎每 60分钟而不是每 60秒读取一次 models.config 文件。