bert向量服务部署
● 一、bert-as-service
● step1: 编译docker镜像需要的文件
● step2: 编译镜像
● step3: 启动容器服务命令
● step4: 导出bert-as-service镜像分发部署
● 参考
● 二、torchServe部署bert-as-service
● 环境准备
● 打包模型服务
● 启动服务
● 请求
● 并发测试
一、bert-as-service
step1: 编译docker镜像需要的文件
这里以data为例,进入/data/docker_build/bert-as-service文件夹
a. 创建一个docker文件夹,拉取tensorflow镜像
mkdir docker
docker pull tensorflow/tensorflow:1.12.0-gpu-py3
b. 进入刚创建的docker文件夹,创建如下Dockerfile文件
Dockerfile
FROM tensorflow/tensorflow:1.12.0-gpu-py3
RUN pip install bert-serving-server[http]
RUN mkdir -p /app
WORKDIR /app
ENTRYPOINT ["bert-serving-start","-http_port","8125","-model_dir","/model"]
CMD ["-num_worker","2","-pooling_layer","-1"]
HEALTHCHECK --timeout=5s CMD curl -f http://localhost:8125/status/server || exit 1
step2: 编译镜像
在Dockerfile所在目录执行如下命令
docker build -t bert-as-service .
step3: 启动容器服务命令
注: 模型文件放在/data/MODELS,启动镜像,按需设置num-worker数目,每个worker需占用一份显存
#macbert服务
PATH_MODEL=/data/MODELS/macbert
docker run --runtime nvidia -dit -p 6555:5555 -p 6556:5556 --name mac_bert -v $PATH_MODEL:/model -t bert-as-service -num_worker=8 -pooling_layer=-1
googlebert服务
PATH_MODEL=/data/MODELS/googlebert
docker run --runtime nvidia -dit -p 8555:5555 -p 8556:5556 --name google_bert -v $PATH_MODEL:/model -t bert-as-service -num_worker=4 -pooling_layer=-1
step4: 从机器导出bert-as-service镜像分发部署
A. 进入镜像文件夹
cd /data/images
B. 导出bert-as-service镜像
docker save -o ./bert-as-service.tar bert-as-service:latest
C. 分发到其他机器
docker load -i bert-as-service.tar
dockerr run --runtime nvidia -dit -p 6555:5555 -p 6556:5556 --name mac_bert -v $PATH_MODEL:/model -t bert-as-service -num_worker=4 -pooling_layer=-1
参考
https://zhuanlan.zhihu.com/p/30555962
二、torchServe部署bert-as-service
环境准备
1、安装torch-model-archiver,改包用于打包模型文件,也可以在自己本地打包后上传。
pip install torch-model-archiver
2、安装torchserve:可以在机器上安装torchserve,推荐用docker方式:
docker pull pytorch/torchserve:latest-gpu
打包模型服务
以Huggingface模型为例,首先保存模型必要文件:
python
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext-large")
model = BertModel.from_pretrained("hfl/chinese-roberta-wwm-ext-large")
model.save_pretrained("./roberta") # 模型保存,包括权重和config.json
tokenizer.save_pretrained("./roberta") # tokenizer保存,包括各种词典文件
然后定制服务配置文件:
json
{
"model_name":"hfl/chinese-roberta-wwm-ext",
"do_lower_case":true,
"max_length":"25",
"pooling_layer":"-1",
"pooling_strategy":"REDUCE_MEAN"
}
接着完成handler文件,这是torchserve后端执行推理的逻辑,可以直接Transformer_handler_generalized.py下载使用。注意这个handler里的模型初始化方式如下,如果你使用的类比较特殊,请自行修改代码中的对应片段:
python
载入模型和tokenizer,其中tokenizer初始化必须文件如果不曾传入,就根据配置自行定义
self.model = BertModel.from_pretrained(model_dir)
self.model.to(self.device)
if any(fname for fname in os.listdir(model_dir) if fname.startswith("vocab.") and os.path.isfile(fname)):
self.tokenizer = BertTokenizer.from_pretrained(
model_dir, do_lower_case=self.setup_config["do_lower_case"]
)
else:
self.tokenizer = BertTokenizer.from_pretrained(
self.setup_config["model_name"],
do_lower_case=self.setup_config["do_lower_case"],
)
最后用torch-model-archiver将模型打包成mar文件,这个压缩文件是部署的基础。例子:
shell
torch-model-archiver --model-name roberta --version 1.0 --serialized-file ./roberta/pytorch_model.bin --handler ./Transformer_handler_generalized.py --extra-files "./roberta/config.json,./roberta/setup_config.json,./roberta/vocab.txt,./roberta/tokenizer_config.json,./roberta/special_tokens_map.json"
torch-model-archiver命令中参数的含义:
● --model-name:导出模型的名称,导出文件的文件名将是model-name.mar
● --version:指定模型的版本
● --handler:handler是模型的入口程序,可以是TorchServe默认的handler名或者定义了handler的python文件
● --model-file:定义了模型结构的py文件,文件中的类必须继承⾃nn.modules。torchscript保存的模型不需要此参数;如果自定义handler且handler中定义了模型载入方式,也不需要此参数和
● --serialized-file:权重pt或pth文件路径
● --extra-files:入口函数的其他依赖文件,比如传递⼀个json,它将自动加载到handler,并通过self.mapping访问
● --export-path:导出mar文件的存放路径,默认在当前文件夹。若加上参数-f,则表示覆盖之前的文件
● --runtime:指定python,可选(python,python2,python3)
启动服务
如果torchserve docker未启动,可用如下命令启动,注意挂载的路径要写成当前真实路径,确保model-store文件夹下放有mar压缩包:
shell
docker run -it -d -p 8080:8080 -p 8081:8081 --shm-size=8g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all -v $(pwd)/model-store:/home/model-server/model-store pytorch/torchserve torchserve --start --model-store model-store --models all

浙公网安备 33010602011771号