参考 https://tf.wiki/zh_hans/deployment/serving.html
要点:
- tf-serving需要的是saveModel的保存格式 .pd,如果是checkpoint,需要转换格式,参考:https://www.yuque.com/shareit/pgqkzm/dhkzt8
保存模型的目录最终结构:
model_name
└── 1
├── saved_model.pb
└── variables
├── best_19-71660.data-00000-of-00001
├── best_19-71660.index
├── best_19-71660.meta
└── c2s.py
报错处理:
- Did you forget to name your leaf directory as a number (eg. ‘/1/‘)?
这是因为保存模型的目录缺少了版本号。仔细看第2点的目录树中有一个以数字1命名的文件夹,这个就是版本号,不可以缺少。模型放在这个目录下就好
- To inspect available tag-sets in the SavedModel, please use the SavedModel CLI:
saved_model_cli
这个是因为保存模型的代码中,错误使用了add_meta_graph_and_variables,没有添加或添加错了tag。应该是:
model_name = 'model_name/1' # 注意使用了 model_name/1 这样的格式。这是 tf-seving 的约定。/之前的是模型名称,之后的 1 是模型的版本。
builder = tf.saved_model.builder.SavedModelBuilder(model_name)
builder.add_meta_graph_and_variables(sess, [tf.saved_model.tag_constants.SERVING])
builder.save()
注,当model_name/下出现了新的版本号,tf-serving就会热更新模型!!!
- “error”: “Serving signature name: \”serving_default\” not found in signature def”
这是因为模型没有这个标记(签名),在宿主机使用如下命令查看模型标记(签名):
saved_model_cli show --dir saved_model/1/ --all
- 占位
- 用docker来部署 ```python docker pull tensorflow/serving # 直接拉取最新版,这个对tf1.x和tf2.x都可以用
MODELDIR = ‘${pwd}’ docker run -t —rm -p 8501:8501 -v “${MODELDIR}/model_name:/models/model_name” -e MODEL_NAME=model_name tensorflow/serving & ```