有多种方法可以做到这一点,更复杂的模型可能需要其他方法。
我目前正在使用here 描述的方法,该方法适用于 tf.keras.models.Model 和 tf.keras.Sequential 模型(不确定 tensorflow 子类化?)。
下面是一个最小的工作示例,包括使用 python 创建一个模型(看起来你已经通过你的文件夹结构完成了这个,可以忽略第一步)
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
import tensorflow.keras.backend as K
inputs = Input(shape=(2,))
x = Dense(128, activation='relu')(inputs)
x = Dense(32, activation='relu')(x)
outputs = Dense(1)(x)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='adam', loss='mse')
# loading existing weights, model architectural must be the same as the existing model
#model.load_weights(".//MODEL_WEIGHT_PATH//WEIGHT.h5")
export_path = 'SAVE_PATH//tensorflow_model//1'
with K.get_session() as sess:
tf.saved_model.simple_save(
sess,
export_path,
inputs={'inputs': model.input}, # for single input
#inputs={t.name[:-5]: t for t in model.input}, # for multiple inputs
outputs={'outputs': model.output})
我建议您使用文件夹名称“tensorflow_model”而不是“tensorflow model”,以避免可能出现的空格问题。
然后我们可以在终端中构建docker镜像(对于windows,使用^代替\作为线刹车,并在路径中使用//C/代替C:\):
docker run -p 8501:8501 --name tfserving_test \
--mount type=bind,source="SAVE_PATH/tensorflow_model",target=/models/tensorflow_model \
-e MODEL_NAME=tensorflow_model -t tensorflow/serving
现在容器应该已经启动并运行了,我们可以用 python 测试服务
import requests
import json
#import numpy as np
payload = {
"instances": [{'inputs': [1.,1.]}]
}
r = requests.post('http://localhost:8501/v1/models/tensorflow_model:predict', json=payload)
print(json.loads(r.content))
# {'predictions': [[0.121025]]}
容器正在使用我们的模型,对输入 [1., 1.] 给出预测 0.121025