前言
学术界、科研一般到模型训练完成就结束了,但工业界应用还需要将模型部署到服务器上,TensorFlow Serving提供了一种优雅的部署方案。注:本人是用的TensorFlow2 (主要是Keras)进行的模型训练,有关Pytorch的部署这里不适用。
准备模型
一般在训练时往往仅保存权重参数,保存的模型形式大多为checkpoint文件形式(如下图所示),模型部署时则需要完整的模型(包含模型结构),所以可以在确定最优参数后,直接load模型参数,然后再将完整的模型进行保存,示例代码见下示代码段。
# 模型定义,这里为使用Keras自定义模型
model = seq2seq_model2(vocab_size=VOCAB_SIZE,
max_seq_len=padding_len,
embedding_dim=embedding_dim,
embedding_matrix=emb_matrix,
lstm1_hidden_dim=128,
lstm2_hidden_dim=64,
classes_num=class_num)
# 保存模型时可以将complie方式一并保存
model.compile(optimizer=Adam(learning_rate), loss='binary_crossentropy', metrics=accuracy_metric])
if mode == 'load_then_save_total_model': # 加载最优模型参数并保存完整模型
model_path = './checkpoints/seq2seq/best-199' # 保存模型参数的路径
save_path = os.path.join(model_path, 'best-whole') # 完整模型的保存位置
print('Loading weights from saved model.................')
model.load_weights(model_path)
print('Loading finish\n Saving Whole-model...')
# 保存完整模型,注意tf1.x版本默认保存格式为h5文件,tf2.x版本默认保存格式为tf格式文件,此处要保存为tf格式文件,tf1.x版本要指定save_format='tf'
model.save(save_path) # 保存完整模型
print('Whole-model has been saved to {}'.format(save_path)
完整的模型保存好了就可以开始部署啦。
TensorFlow Serving部署模型
本文使用docker来使用TensorFlow Serving,这是最简单、省心的使用方式,也是官方最推荐的方式(具体可参考官方Guide: