从零开始在CentOS7服务器上搭建GPU深度学习环境,并部署bert向量化服务
0 前言
最近公司的研究项目有对文本进行BERT向量化的需求,在github上找到了bert-as-service这个开源项目,它提供pip安装,可以将bert向量化作为服务部署在服务器上,在客户端python脚本中通过简单的调用请求就可以得到词向量。相比自己调用bert源码,这种方法方便非常多。可以参考这篇知乎文章:两行代码玩转Google BERT句向量词向量
这篇文档将以公司的centos7服务器为例,介绍搭建GPU深度学习环境,并部署bert向量化服务的步骤,以及搭建过程中遇到的一些问题和解决方法,给后续在其他机器上的部署提供参考。
搭建完成后,生产力有了质的飞跃:在本地的cpu机器上,处理一段中文短文本大约需要1s,而单卡gpu服务器上只需要30多秒就可以处理1000段短文本。
- 一定要先切换到一个临时目录,因为bert-service会产生很多临时文件在当前文件夹下
- 需要开放5555、5556端口(默认)
1 GPU环境搭建
1.1 准备工作
查看系统位数
$ uname -a
Linux node14 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
可以看到,服务器是x86_64架构,接下来的包都可以安装。
查看linux发行版本(以centOS为例)
$ cat /etc/centos-release
CentOS Linux release 7.8.2003 (Core)
实际上,服务器深度学习环境更多使用的是Ubuntu。本文从实际情况出发,介绍在CentOS 7.x上的部署。
查看显卡信息
$ lspci | grep -i vga
01:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A] (rev a1)
注意,以下的环境搭建基于NVIDIA显卡。其他品牌的显卡虽然有其他框架可以使用,但还不成熟。
可以看到,214服务器的显卡为2080Ti,是不错的显卡不拿来做深度学习可惜了,但是服务器通常只是在跑一些内存任务,显卡没有得到充分利用。
1.2 安装Anaconda/miniconda
安装Anaconda/miniconda用于管理环境。这一步通常不会有什么问题。考虑到服务器上不需要装那么多乱七八糟的包,安装了miniconda3。
安装conda的一个好处是,在activate/deactivate某个虚拟环境的时候,可以执行特定的脚本,这将有助于我们在不同环境中使用不同CUDA版本,而不需要每次都手动修改环境变量,这将在下文详细介绍。参考:Multiple Version of CUDA Libraries On The Same Machine
1.3 安装CUDA和cuDNN
务必不要直接安装最新版CUDA工具包,这是个巨坑。tensorflow和pytorch的不同版本都对应不同的CUDA版本,假如CUDA版本不匹配,可能会出现无法正常使用GPU进行计算的情况。(这就是我最初部署bert-service时,显示worker是GPU,但实际仍然在CPU上进行计算的原因。服务可以正常跑起来,处理请求的时候CPU直接拉满。)
- 各版本CUDA下载
- cuDNN下载,注意和CUDA版本的对应(cuDNN安装较新的版本可以覆盖旧的版本,没有报错),下载需要注册NVIDIA developer。
- CUDA 11.0安装文档
- CUDA 10.0安装文档