模型转化图
transformers to onnx
新创建一个空文件夹onnx,然后进入转换,否则会报错
(base) D:\fine_tune\onnx>python ../convert_graph_to_onnx.py --framework pt --model ../bert-base-cased bert-base-cased.onnx
参考:
onnx to tensorflow pb
安装onnx-tensorflow:
git clone https://github.com/onnx/onnx-tensorflow.git
cd onnx-tensorflow
pip install -e .
import onnx
from onnx_tf.backend import prepare
def onnx2pb(onnx_input_path, pb_output_path):
onnx_model = onnx.load(onnx_input_path) # load onnx model
tf_exp = prepare(onnx_model) # prepare tf representation
tf_exp.export_graph(pb_output_path) # export the model
onnx_input_path = 'bert-base-cased.onnx'
pb_output_path = 'bert-base-cased.pb'
onnx2pb(onnx_input_path, pb_output_path)
新pb使用
训练好的模型转换到pb以后,可用,效果还原。
使用 transformers的tokenizer + pb model + tf实现的mean_pooling来实现SBERT功能。
transformers tokenizer
tokenizer_config.json
tokenizer.json
—— 有了以上两个文件就可以使用transformers的tokenizer
参考:
Tokenizer
tensorflow serving
serving从资料看,都是以model为单位的,貌似没有自定义RestAPI后端。所以,只能把功能整合到一个model里。
https://github.com/huggingface/transformers/issues/8495
—— 目前tokenizer包在model里还不支持
Use pre-trained Huggingface models in TensorFlow Serving
—— tokenizer在客户端做的,只有model是请求部分。
https://github.com/tensorflow/serving/issues/663
https://www.tensorflow.org/tfx/guide/serving
https://github.com/tensorflow/serving/issues/770
目前看,有以下方案:
- custom ModelServer in C++
- preprocessing in Flask and wrap tensorflow server with a Flask server
- preprocess and pooling in client
方案2、3本质上就是在tensorflow serving外再包一层。
方案2、3可以在tensorflow serving 上面client部分包装一层,而不是直接拿来用。
使用 TensorFlow Serving 和 Flask 部署 Keras 模型
想把py torch 转化的model再组装成自定义tensorflow的model,输入是不匹配的,会报错如下,所以不可行。
TypeError: Cannot convert value torch.int64 to a TensorFlow DType.