这可能是第一篇比较全的ERNIE踩坑笔记——Centos下玩转ERNIE

最近要做一个中文文本匹配的任务,看到百度刚刚发布了sota的模型(中文任务全面超越BERT:百度正式发布NLP预训练模型ERNIE) ,所以想拿来用一下,但是相对于大火的google发布的Bert,实践ERNIE模型的博客非常少,于是自己跑通模型后写了这篇博客记录一下遇到的坑,如果对小伙伴们有帮助那便是极好的。

因为论文是基于百度的开源框架paddlepaddle,可以说相比较深度学习大火的tensorflow和pytorch,这方面的资料非常少,可以参考的有官方文档和Github,这里也是给出我在自己环境中遇到的一些问题和解决方案。

文章会同步到我的微信公众号编程与算法之美,公众号底部菜单栏有我的交流群,欢迎大家关注。

写作不易,转载请注明出处。

这可能是第一篇比较全的ERNIE踩坑笔记——Centos下玩转ERNIE_第1张图片

目录

系统环境

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

anaconda下创建环境

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版本。

这可能是第一篇比较全的ERNIE踩坑笔记——Centos下玩转ERNIE_第2张图片

安装:

#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"

下载ERNIE源码

首先是Github链接,需要强调的是,ERNIE是存储库中的的文件夹,所以不能git clone,这里推荐使用DownGit下载所有源码。

除了源码之外,还需要下载模型(含配置文件及词典)和任务数据。

这可能是第一篇比较全的ERNIE踩坑笔记——Centos下玩转ERNIE_第3张图片

配置实验任务

这可能是第一篇比较全的ERNIE踩坑笔记——Centos下玩转ERNIE_第4张图片

下面分别给出说明:

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。

后记

模型还在训练当中,后续我会修改源码接入我们的项目当中,欢迎大家持续关注,安装过程中有问题也欢迎大家留言。

你可能感兴趣的:(自然语言处理)