最近要做一个中文文本匹配的任务,看到百度刚刚发布了sota的模型(中文任务全面超越BERT:百度正式发布NLP预训练模型ERNIE) ,所以想拿来用一下,但是相对于大火的google发布的Bert,实践ERNIE模型的博客非常少,于是自己跑通模型后写了这篇博客记录一下遇到的坑,如果对小伙伴们有帮助那便是极好的。
因为论文是基于百度的开源框架paddlepaddle,可以说相比较深度学习大火的tensorflow和pytorch,这方面的资料非常少,可以参考的有官方文档和Github,这里也是给出我在自己环境中遇到的一些问题和解决方案。
文章会同步到我的微信公众号编程与算法之美,公众号底部菜单栏有我的交流群,欢迎大家关注。
写作不易,转载请注明出处。
目录
系统环境
anaconda下创建环境
安装paddlepaddle
下载ERNIE源码
配置实验任务
训练模型
实验结果
后记
# linux 版本
#这种方法只适合Redhat系的Linux,我目前尝试只有这个可以查看Centos系统版本
cat /etc/redhat-release
-> CentOS Linux release 7.4.1708 (Core)
# cuda 版本
cat /usr/local/cuda/version.txt
-> CUDA Version 9.2.148
cudnn 版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
-> #define CUDNN_MAJOR 7
-> #define CUDNN_MINOR 3
-> #define CUDNN_PATCHLEVEL 0
conda create -n ERNIE python=3.6
这里使用python3.6是因为我用的tensorflow,pytorch等其他库在创建3.7的环境下使用conda安装会改回3.6,导致环境名为py37,实际里面是3.6,所以直接装3.6 。然后激活环境 。
conda activate ERNIE
安装paddlepaddle
这里先贴出来paddlepaddle的官网链接paddlepaddle官网,在此之前请查看自己系统的版本和cuda,cudnn版本。
安装:
#1.3.0 for cuda9.x
pip install -U paddlepaddle-gpu==1.3.0.post97 -i "https://pypi.doubanio.com/simple/"
#1.3.0 for cuda8.x cudnn7.x
pip install -U paddlepaddle-gpu==1.3.0.post87 -i "https://pypi.doubanio.com/simple/"
#1.3.0 for cuda8.x cudnn5.x
pip install -U paddlepaddle-gpu==1.3.0.post85 -i "https://pypi.doubanio.com/simple/"
这里需要强调的是ERNIE的源码是基于1.3.0构造的,因为我第一次缺省了版本参数,默认为最新版1.4.0,导致一些接口调用错误,所以换回了1.3.0
检查:
import paddle.fluid
paddle.fluid.install_check.run_check()
#如果出现 Your Paddle Fluid is installed succesfully!,说明安装成功。
由于我的服务器里动态链接库路径没有cuda-9.2,所以需要配置环境变量。
这里只是提醒没有配置的小伙伴,一定要先配置,然后才能通过检查,配置的问题在下面的脚本运行中会再次说明。
export PATH="$PATH:/usr/local/cuda-9.2/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-9.2/lib64"
首先是Github链接,需要强调的是,ERNIE是存储库中的的文件夹,所以不能git clone,这里推荐使用DownGit下载所有源码。
除了源码之外,还需要下载模型(含配置文件及词典)和任务数据。
下面分别给出说明:
1.白框
需要执行的任务的脚本,执行哪个个任务,修改对应的脚本即可,这里是run_lcqmc.sh
2.红框
预训练模型,这里我放在了同一目录下,在右侧修改相应路径。
3.黄框
任务数据,需要解压到同一目录下,同样在右侧修改相应路径。
4.蓝框
环境变量设置,第5行是设置要使用GPU的编号,第1行是要使用的最大的GPU显存的量(不设置会报显存不足的错误),第
2,3行是我设置的环境变量,第4行是默认。
修改好之后,移到上层目录,即和run_classifier.py处于同级目录下。
tmux开启新建一个回话,防止网络等原因导致链接中断,需要重新开始训练
#会话名为 ERNIE
tmux new -s ERNIE
切换anaconda环境
#环境名为 ERNIE
conda activate ERNIE
开始训练
bush run_lcqmc.sh
默认参数下每1000轮会保存checkpoint到同级目录cheskpoints下,每次保存的目录为step_xxxx,目录下文件与预训练模型一致。这里做了一个实验,直接使用预训练模型对测试集测试,发现acc只有0.5左右,所以还是得 Fine-tuning。
模型还在训练当中,后续我会修改源码接入我们的项目当中,欢迎大家持续关注,安装过程中有问题也欢迎大家留言。