相似度模型服务
对输入的两个句子进行推理预测,获得它们的语义相似度
环境依赖
工具 | 说明 | 版本 |
---|---|---|
python | 开发环境 | 3.8.10 |
paddlepaddle | 深度学习框架 | 2.0.2 cpu版 |
flask | python web框架,将调用转换为http请求 | |
gevent | python 并发框架 | |
protobuf | 高效的结构化数据存储格式 | 3.20.0 |
numpy | 数值计算 | 1.19.3 |
scipy | 基于 Numpy 的科学计算库 | 1.7.0 |
环境说明
centos:7.6 x64
python:python3.8.10 ; 编译安装 ;安装目录/usr/local/python3.8.10
NRNIE:stable-1.0.1 ;解压目录/home/project/devops/ERNIE_1.0.1
环境搭建
一.Python环境安装(3.8.10)
根据实际运行的情况,最好先安装好以下软件
libffi-devel
安装方式:yum install libffi-devel -y
缺少可能造成的问题:ModuleNotFoundError: No module named ‘_ctypes‘错误zlib*
安装方式:yum -y install zlib*
缺少可能造成的问题:这个不安装,编译可能会报错
- 下载python3.8.10版本到本地:
- 切换目录
cd /usr/local
- 下载版本
wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz
- 解压安装
tar -zxvf Python-3.8.10.tgz
- 进入解压目录进行安装
cd /usr/local/Python-3.8.10 #进入解压后的源码目录进行编译 ./configure --prefix=/usr/local/python3.8.10 #安装后的目录 make && make install #开始编译,等待时间较长
- 切换目录
- 设置软链接,验证版本
- 设置软连接
如过提示软链接文件已存在,可以先执行删除原来的软链接:#将安装好的python3.8执行文件软链接到 /usr/bin/python3 sudo ln -s /usr/local/python3.8.10/bin/python3.8 /usr/bin/python3 #将安装好的pip执行文件软链接到 /usr/bin/pip3 sudo ln -s /usr/local/python3.8.10/bin/pip3 /usr/bin/pip3
rm -rf /usr/bin/python3
- 验证
输出python3 --version
3.8.10
即为安装完成
- 设置软连接
- 安装其他python依赖库
-
flask & gevent
python3 -m pip install flask gevent
-
protobuf
python3 -m pip install protobuf==3.20.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
-
numpy
python3 -m pip install numpy==1.19.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
-
numpy
python3 -m pip install scipy==1.7.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
注:-i https://pypi.tuna.tsinghua.edu.cn/simple为补充参数,表示本次使用清华大学的源进行下载
-
二.深度学习环境paddlepadle
方式1. pip安装
# gpu版
python3 -m pip install paddlepaddle-gpu==2.0.2.post100 -f https://paddlepaddle.org.cn/whl/mkl/stable.html
# cpu版
python3 -m pip install paddlepaddle==2.0.2 -i https://mirror.baidu.com/pypi/simple
方式2. 官网安装
三.语言模型下载
该项目使用深度语言模型ERNIE,并基于预训练模型进行微调
-
所需的预训练模型是ERNIE1.0中文Base模型,点击下载
-
下载后解压到预定目录,为后面
conf配置
引用做准备tar -zxvf ERNIE_stable-1.0.1.tar.gz
服务启动
配置参数
conf/model_conf.json
配置了常见的模型参数,如果这些参数不够满足要求,可以根据实际需求更改,然后重写模型加载前的参数读取方法即可
下面是配置参数的示例:
{
"ernie": {
"use_cuda": false,
"batch_size": 32,
"init_checkpoint": "/home/project/devops/ERNIE_1.0.1/params",
"ernie_config_path": "/home/project/devops/ERNIE_1.0.1/ernie_config.json",
"vocab_path": "/home/project/devops/ERNIE_1.0.1/vocab.txt",
"save_inference_model_path": "/home/project/devops/ERNIE_1.0.1/params"
}
}
use_cuda
表示是否使用GPUinit_checkpoint
表示模型要加载的检查点(训练好的模型输出的变量、参数等数据)ernie_config_path
和vocab_path
是预训练模型的参数和词典save_inference_model_path
为模型推理时加载的模型文件。
如果没有训练,可以直接使用预训练模型进行推理预测,即init_checkpoint
的路径改为预训练模型的params
即可(如示例)。
启动服务
进入该项目的根目录,然后执行命令:
-
指定参数启动:
python server.py
-
指定参数启动:
python server.py --port 6100 --model ernie
其中参数说明如下:
参数名 默认值 说明 port 6100 开放端口 model ernie 指定模型 另附:各种启动问题解决方案
-
ImportError: /lib64/libc.so.6: version GLIBC_2.18‘ not found
原因:当前系统中动态库libc.so.6里面缺乏 GLIBC_2.18
解决方案:将/lib64中的libc.so.6升级到包含GLIBC_2.18的高版本
参考:ImportError: /lib64/libc.so.6: version `GLIBC_2.18‘ not found -
ImportError: /lib64/libstdc++.so.6: version CXXABI_1.3.8‘ not found (required by python...
原因:当前系统中动态库libstdc++.so.6里面缺乏 CXXABI_1.3.8
解决方案:将/lib64中的libstdc++.so.6软链接到包含GLIBC_2.18的高版本。
这里建议直接链接到libstdc++.so.6.0.26一步到位也解决libstdc++.so.6缺乏的其他依赖#将下载好的libstdc++.so.6.0.26复制到/lib64中 wget libstdc++.so.6.0.26的地址 #删除原来的软链接 rm -rf /lib64/libc.so.6 #绑定新的库 sudo ln -s /lib64/libstdc++.so.6.0.26 /lib64/libstdc++.so.6
参考:1.ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8‘ not found (required by /opt/tool/anaconda
2.pyhon3.7错误ImportError: /lib64/libstdc++.so.6: version CXXABI_1.3.8’ not found -
Too many levels of symbolic links
原因:软链接有误
解决方案:确认软链接
参考:解决Too many levels of symbolic links的问题 -
libstdc++.so.6: cannot open shared object file: No such file or directory的问题
原因:libstdc++.so.6链接的文件异常
解决方案:检查文件,尝试引用新的libstdc++.so.6.xxx试试;或者重新安装libstdc++
参考:libstdc++.so.6: cannot open shared object file: No such file or directory的问题
libstdc++.so.6: cannot open shared object file: No such file or directory
ImportError: libstdc++.so.6: cannot open shared object file: No such file or directory解决方法 -
libstdc++.so.6: version `GLIBCXX3.4.22' not found
与2类似 -
ModuleNotFoundError: No module named ‘_ctypes‘错误
原因:缺少libffi-devel
解决方案:安装后重新编译python3
参考:解决linux下安装插件报ModuleNotFoundError: No module named ‘_ctypes‘错误 -
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+ currently the ‘ssl’ module is compiled with OpenSSL 1.....
原因:当前python库依赖的urllib3序号的openssl版本过高
解决方案:方案一,升级本机的openssl到1.1.1+,这种方式比较麻烦,还需要重新编译python,又要重新下载依赖;方案二,降低本机的urllib版本,直到适配本机的openssl版本,这种方式最快捷而且不影响运行,降低版本:python3 -m pip install urllib3==1.26.15
参考:报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compiled wi
python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+ -
ln: failed to create symbolic link ‘/usr/bin/python’: File exists
ln: failed to create symbolic link ‘/usr/bin/python’: File exists
-