前沿
本次算法部署是基于restapi服务,以http请求的方式提供服务。主要基于Flask + celery + uwsgi + nginx实现,对外提供相关的功能。整个部署下来最大的感受就是在redis的安装和配置上CentOS与Ubuntu有区别。
服务部署
1.Anaconda
下载
wget -P [文件保存路径] https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.07-Linux-x86_64.sh
安装(cd到文件保存路径下)
sh Anaconda3-2019.07-Linux-x86_64.sh
修改~/.bashrc
__conda_setup="$('[文件保存路径]/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "[文件保存路径]/anaconda3/etc/profile.d/conda.sh" ]; then
. "[文件保存路径]/anaconda3/etc/profile.d/conda.sh"
else
export PATH="[文件保存路径]/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
设置自动激活虚拟环境
conda config --set auto_activate_base true
2.安装依赖包
- 逐个安装
pip install celery -i https://pypi.douban.com/simple/
pip install redis -i https://pypi.douban.com/simple/
pip install flask -i https://pypi.douban.com/simple/
pip install uwsgi -i https://pypi.douban.com/simple/
- 批量安装
pip install -r requirements.txt -i https://pypi.douban.com/simple/
3.安装redis
下载
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
解压
tar -zxvf redis-4.0.6.tar.gz
安装gcc依赖
yum install gcc
跳转到redis目录下,编译安装
make MALLOC=libc
cd src && make install
启动redis
redis启动,网上会有所谓的三种启动方式,但都不实用,因为redis的配置文件一般都会在工程文件打包放在一起的。
下载好的redis的启动文件在utils/redis_init_script,可以看到是通过$EXEC $CONF完成启动,因此在自己的工程文件里只需要将CONF换成自己的redis.conf即可
## 修改startup.sh(自己写的启动redis、celery、uwsgi等的脚本)
添加:EXEC=/usr/local/bin/redis-server
启动redis改为:$EXEC $CURR_DIR/redis_6973.conf
4.一些问题
如果一切顺利的话,基本到这里就结束了,其他的就是把工程文件和模型放上去。
问题1:
问题:uwsgi: error while loading shared libraries: libssl.so.1.1.1:cannot open shared object file: no such file or directory
解决方法:建立软链接:ln -s [文件保存路径]/anaconda3/lib/libssl.so.1.1.1 /lib64/libssl.so.1.1.1
问题2:
问题:非法指令(吐核)
解决方法:安装TensorFlow等安装包版本问题,卸载或者重新安装
问题3:
问题:2020/09/10 18:29:26 [error] 42488#0: *11 readv() failed (104: Connection reset by peer) while reading upstream, client: 192.168.1.81, server: , request: “POST /algorithm/zhiwen-doc-extract/ HTTP/1.1”, upstream: “uwsgi://172.16.118.4:9051”, host: “172.16.118.4:9050”
解决方法:可能由于requests请求地址错误,检查一下