keras模型转onnx模型进行flask服务器部署

引言

keras模型在部署的时候会有点不方便,因为他无法进行多进程调用,一旦用多进程调用,就会出现_thread._local' object has no attribute 'value'的问题,而flask框架进行部署的时候,如果不使用多进程,可能会出现只能打开一个窗口的情况,即一个人打开窗口,另外的访问无法打开,这个问题之前困扰了我好久,才发现原来我在部署flask的时候,采用了threaded=False的操作,即app.run(host='0.0.0.0', port=8003, threaded=False)

转换

from cosent import encoder
import tf2onnx
import tensorflow as tf


spec = (tf.TensorSpec((None, None), tf.int64, name="input_ids"), tf.TensorSpec((None, None), tf.int64, name="segment_ids"))
model_proto, _ = tf2onnx.convert.from_keras(encoder, input_signature=spec, opset=13, output_path='model.onnx')

我的转换程序如上,很简单,采用tf2onnx的框架,将keras模型encoder导入后,采用tf2onnx.convert.from_keras的方式进行导出就可以

部署

转换成onnx之后,就可以进行预测了

providers = ['CPUExecutionProvider']
m = rt.InferenceSession('/home/deploy/ps/http_model_deploy/news_recommend/model.onnx', providers=providers)
inputs = {'input_ids': batch_token_ids, 'segment_ids': batch_segment_ids}
m.run(None, inputs)[0] # 输出

注意的是inputs的名字需要喝你在spec中定义好的名字相同,值都为numpy array,有了预测程序后,在使用flask框架进行简单的部署就可以了

你可能感兴趣的:(flask,keras,python)