PaddleNLP - 文心 ERNIE 3.0 Tiny 预训练小模型
文心 ERNIE 3.0 Tiny 预训练小模型介绍请参考 PaddleNLP ERNIE3.0。
一、准备运行环境
请参考启智AI协作平台小白训练营课程中的第9课-云脑(基于Ascend NPU调试和训练任务)准备『调试任务』环境,其中启动镜像请选择 PaddlePaddle 深度学习框架镜像。启动成功之后,请打开调试环境启动页面的『Terminal』,按照以下步骤运行即可。
二、下载并安装 PaddleNLP 套件
也可以访问 PaddleNLP 的 项目地址 直接下载源码。
# 下载套件代码
git clone https://openi.pcl.ac.cn/PaddlePaddle/PaddleNLP.git
# 进入套件目录
cd PaddleNLP
# PaddleNLP 的 Python 依赖库在 requirements.txt 中给出,可通过如下命令安装:
pip install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple
# 源码安装
python setup.py install
三、使用昇腾NPU进行模型训练
注意:昇腾上训练从启动到结束大约30分钟左右(昇腾需在本地创建 kernel_meta
开头的缓存文件)。
在 PaddleNLP/model_zoo/ernie-3.0
目录下运行如下命令进行模型的边训练边评估,此示例中使用的训练数据集较小,因此最终的精度结果存在浮动,如需获取最高准确率,建议运行多次训练取最优值。
# 参数说明:
# --model_name_or_path 模型名或路径
# --dataset 数据集
# --output_dir checkpoint输出目录
# --export_model_dir 模型导出目录
# --do_train 执行训练
# --do_eval 执行评估
# --do_export 执行导出
# --config 配置文件
# --device 运行设备
# --dynamic_max_length 固定句子长度
# --flatten_param_grads 梯度合并更新
# --lazy_data_processing 数据预处理使用 lazy_mode
# 分类任务(约 20 分钟)
python run_seq_cls.py --model_name_or_path ernie-3.0-medium-zh --dataset tnews --output_dir ./best_models --export_model_dir best_models/ --do_train --config=configs/default.yml --device npu --dynamic_max_length 32 64 128 --flatten_param_grads --lazy_data_processing=False
# 序列标注任务(约 20 分钟)
python run_token_cls.py --model_name_or_path ernie-3.0-medium-zh --dataset msra_ner --output_dir ./best_models --export_model_dir best_models/ --do_train --config=configs/default.yml --device npu --dynamic_max_length 32 64 128 --flatten_param_grads --lazy_data_processing=False
# 阅读理解任务(约 30 分钟)
python run_qa.py --model_name_or_path ernie-3.0-medium-zh --dataset cmrc2018 --output_dir ./best_models --export_model_dir best_models/ --do_train --config=configs/default.yml --device npu --dynamic_max_length 32 64 128 256 512 --flatten_param_grads --lazy_data_processing=False
# 训练完成后会在当前目录下生成模型 checkpoint 文件,文件结构如下
best_models/
└── tnews
├── checkpoint-1000
├── checkpoint-1500
├── checkpoint-2000
├── checkpoint-2500
├── checkpoint-3000
├── checkpoint-3500
├── checkpoint-4000
├── checkpoint-4500
├── checkpoint-500
├── checkpoint-5000
└── checkpoint-5004
...
注意:阅读理解任务需要修改下默认 batchsize,PaddleNLP/model_zoo/ernie-3.0/configs/default.yml
...
QuestionAnswering:
cmrc2018:
learning_rate: 0.00005
max_seq_length: 512
num_train_epochs: 1
per_device_train_batch_size: 4
per_device_eval_batch_size: 12
四、使用昇腾NPU进行模型评估
在 PaddleNLP/model_zoo/ernie-3.0
目录下使用 best_model
训练结果进行模型评估。
# 分类任务
python run_seq_cls.py --model_name_or_path ernie-3.0-medium-zh --dataset tnews --output_dir ./best_models --export_model_dir best_models/ --do_train --do_eval --config=configs/default.yml --device npu --dynamic_max_length 32 64 128 --lazy_data_processing=False
# 序列标注任务
python run_token_cls.py --model_name_or_path ernie-3.0-medium-zh --dataset msra_ner --output_dir ./best_models --export_model_dir best_models/ --do_train --do_eval --config=configs/default.yml --device npu --dynamic_max_length 32 64 128 --lazy_data_processing=False
# 阅读理解任务
python run_qa.py --model_name_or_path ernie-3.0-medium-zh --dataset cmrc2018 --output_dir ./best_models --export_model_dir best_models/ --do_train --do_eval --config=configs/default.yml --device npu --dynamic_max_length 32 64 128 256 512 --lazy_data_processing=False
五、使用昇腾NPU进行模型预测
在 PaddleNLP/model_zoo/ernie-3.0
目录下使用 best_model
训练结果进行模型预测。
导出模型
# 分类任务
python run_seq_cls.py --model_name_or_path ernie-3.0-medium-zh --dataset tnews --output_dir ./best_models --export_model_dir best_models/ --do_train --do_export --config=configs/default.yml --device npu --dynamic_max_length 32 64 128
# 序列标注任务
python run_token_cls.py --model_name_or_path ernie-3.0-medium-zh --dataset msra_ner --output_dir ./best_models --export_model_dir best_models/ --do_train --do_export --config=configs/default.yml --device npu --dynamic_max_length 32 64 128
# 阅读理解任务
python run_qa.py --model_name_or_path ernie-3.0-medium-zh --dataset cmrc2018 --output_dir ./best_models --export_model_dir best_models/ --do_train --do_export --config=configs/default.yml --device npu --dynamic_max_length 32 64 128 256 512
执行预测
# 分类任务
python run_seq_cls.py --model_name_or_path best_models/afqmc/ --dataset afqmc --output_dir ./best_models --do_predict --config=configs/default.yml --device npu --dataloader_num_workers 16 --dynamic_max_length 32 64 128 --lazy_data_processing=False
# 序列标注任务
python run_token_cls.py --model_name_or_path best_models/msra_ner/ --dataset msra_ner --output_dir ./best_models --do_predict --config=configs/default.yml --device npu --dataloader_num_workers 16 --dynamic_max_length 32 64 128 --lazy_data_processing=False
# 阅读理解任务
python run_qa.py --model_name_or_path best_models/cmrc2018/ --dataset cmrc2018 --output_dir ./best_models --do_predict --config=configs/default.yml --device npu --dataloader_num_workers 16 --dynamic_max_length 32 64 128 256 512 --lazy_data_processing=False
# 预测完成后会在 best_models/afqmc/ 目录生成 test_result.json 文件。