谷歌经典bert模型从下载源码到运行成功
近期,对谷歌经典bert模型进行了简单的学习,以官方模型代码为主要学习目标,目前已经成功完成预训练任务,结果如图:
下载源码
官方代码和与训练模型链接:https://github.com/google-research/bert
论文链接:https://arxiv.org/abs/1810.04805
配置环境
1.版本问题
(1)python版本
这个代码支持的python版本<3.8 建议大家使用3.6或者3.7版本的python
(2)tensorflow版本
在官方代码中,有一个requirements.txt 提到了tensorflow版本问题
需要安装符合要求的tensorflow版本
附上安装tensorflow指定版本的指令:(8条消息) 使用清华镜像pip安装TensorFlow_FGY_u的博客-CSDN博客_pip 安装tensorflow 清华镜像
一定要注意版本对应问题:我的安装版本是python3.6和tensorflow 1.15.0
很多时候运行出问题都是因为版本不对应引起的:
python 与tensorflow版本对应清单链接:在 Windows 环境中从源代码构建 | TensorFlow (google.cn)
我在这直接放图了,大家也可以点击上方直接进原网站查看:
CPU:
GPU:
(3)其他版本问题:
在我运行该模型的时候,关于版本不匹配问题还有很多:
这个就是tensorflow python keras三者之间版本不匹配的问题
我查了一下 python tensorflow keras 三者之间的版本对应关系,将keras更新到 2.3.1即可解决问题
参考链接:tensorflow + python + keras 版本对应关系 - feiquan - 博客园 (cnblogs.com)
数据集下载
数据集下载链接,这个在github源码的README.md 有给出,该文件也给出了模型的运行方式,参数设置方式等等
(1)预训练模型的下载:
这里附上文件的网盘链接,有需要自取即可
链接:https://pan.baidu.com/s/1xcC6rdo6o7gn1VLB1-sq5w
提取码:o203
(2)GLUE数据集的下载
在这个地方我遇到了一些问题,可能是因为下载源是在国外,我在pycharm terminal 直接运行的官方给的下载脚本
download_glue_data.py(下载脚本):
运行指令大概是这样:(注意 task 是MRPC)
但是在输入运行脚本的指令之后,我一直卡在了processing MRPC 不动了
我就另外找了个glue数据集 ,这里提供原文链接:(8条消息) GLUE-MRPC数据集下载(国内)_Acecai01的博客模板-CSDN博客_mrpc数据集
参数设置
官方给的那些参数,不一定适合所有的人,首先他给的Linux系统下的指令 在设置环境变量那条 windows 与Linux 系统是有较大差别的
Linux的就不多说了,和官方格式一样,只需要修改一下路径就好了
Windows 在cmd中设置环境变量 可以参考:(8条消息) Windows–cmd命令行添加环境变量_TLCrow的博客-CSDN博客_命令行添加环境变量
这是官方给出的参数:
如果不太想设置环境变量,可以不使用export(Linux)/set(Windows) 指令
直接把参数中对应的BERT_BASE_DIR 和GLUE_DIR 换成你下载的数据集所在的绝对路径,这样可以基本保证路径方面不出错
在输入python 后面那一堆参数的时候,要注意把 每个参数后面的下划线去掉,对于train_batch_size 这个参数 如果32觉得太大了,可以设置成 16 8 大小
Project Structure:
我的运行指令如下:
python run_classifier.py --task_name=MRPC --do_train=true --do_eval=true --data_dir=..\GLUE\glue_data\MRPC --vocab_file=..\GLUE\uncased_L-12_H-768_A-12\vocab.txt --bert_config_file=..\GLUE\
uncased_L-12_H-768_A-12\bert_config.json --init_checkpoint=..\GLUE\uncased_L-12_H-768_A-12\bert_model.ckpt --max_seq_length=128 --train_batch_size=8 --learning_rate=2e-5 --num_train_epochs=3.0 --output_dir=/tmp/mrpc_output
具体路径大家以自己文件的放置位置为准,每个人设置的参数都不太一样
DeBug
由于这个是三年前的代码,有一些方法或者包的名称会有些变化
这里就提两个比较典型的问题:
(1)由于当时使用的tensorflow应该是v1版本的,所以在 import tensorflow as tf
时需要,换成 import tensorflow.compat.v1 as tf
或者直接在代码处 加上 compat.v1
然后,不知道是我之前有动过代码(在之前我应该是没有更改过代码),这个代码里面出现了cast 函数的错误:(location:run_classifier.py line:530)
根据代码上方的注释:
我把参数更改了一下:
(2)
这个我在网上找的所有的报错都是:module ‘tensorflow._api.v1.io’ has no attribute ‘gfile’
我试着把v1.io 去掉,发现竟然没有错误了,之前的代码有的需要加上v1,但是这个地方需要去掉v1,属实有点懵,应该就是版本不兼容的问题。
到这里差不多就没有其他的问题了,就可以用官方给的参数 对模型进行预训练了
运行过程
能够正常运行的标准,首先肯定是能跑起来,然后cpu/gpu占用率保持一个相对稳定的数值:
运行过程中输出的数据:
运行时CPU占用率:
可以看到我的内存和CPU一直保持在一个很稳定的范围内
关于想要用GPU运行的话,就需要稍微更改参数,而且要安装cuda cudnn 配置环境等等 还有很多版本适配问题,还是比较麻烦的,因为我是使用CPU进行预训练的,使用GPU如何运行这里就不过多赘述了。
运行结果
大概训练了三个多小时,跑出来了结果:
官方给的训练结果:
对比一下数据,效果还是差别不大的,基本达到了预训练的效果