add ernie argument
English | 简体中文
PaddlePALM (PArallel Learning from Multi-tasks) 是一个灵活,通用且易于使用的NLP大规模预训练和多任务学习框架。 PALM是一个旨在快速开发高性能NLP模型的上层框架。
使用PaddlePALM,可以非常轻松灵活的探索具有多种任务辅助训练的“高鲁棒性”阅读理解模型,基于PALM训练的模型D-Net在EMNLP2019国际阅读理解评测中夺得冠军。
MRQA2019 排行榜
除了降低NLP研究成本以外,PaddlePALM已被应用于“百度搜索引擎”,有效地提高了用户查询的理解准确度和挖掘出的答案质量,具备高可靠性和高训练/推理性能。
你可以很容易地用较少的代码复现出很好的性能,涵盖了大多数NLP任务,如分类、匹配、序列标记、阅读理解、对话理解等等。更多细节可以在examples中找到。
examples
评价标准
PALM架构图
PaddlePALM是一个设计良好的高级NLP框架。基于PaddlePALM的轻量级代码可以高效实现监督学习、非监督/自监督学习、多任务学习和迁移学习。在PaddlePALM架构中有三层,从下到上依次是component层、trainer层、high-level trainer层。
在组件层,PaddlePALM提供了6个 解耦的组件来实现NLP任务。每个组件包含丰富的预定义类和一个基类。预定义类是针对典型的NLP任务的,而基类是帮助用户开发一个新类(基于预定义类或基类)。
训练器层是用选定的构件建立计算图,进行训练和预测。该层描述了训练策略、模型保存和加载、评估和预测过程。一个训练器只能处理一个任务。
高级训练器层用于复杂的学习和推理策略,如多任务学习。您可以添加辅助任务来训练健壮的NLP模型(提高模型的测试集和领域外的性能),或者联合训练多个相关任务来获得每个任务的更高性能。
PaddlePALM 支持 python2 和 python3, linux 和 windows, CPU 和 GPU。安装PaddlePALM的首选方法是通过pip。只需运行以下命令:
pip
pip install paddlepalm
git clone https://github.com/PaddlePaddle/PALM.git cd PALM && python setup.py install
我们提供了许多预训练的模型来初始化模型主干网络参数。用预先训练好的模型训练大的NLP模型,如12层Transformer,实际上比用随机初始化的参数更有效。要查看所有可用的预训练模型并下载,请在python解释器中运行以下代码(在shell中输入命令python):
python
>>> from paddlepalm import downloader >>> downloader.ls('pretrain') Available pretrain items: => RoBERTa-zh-base => RoBERTa-zh-large => ERNIE-v2-en-base => ERNIE-v2-en-large => XLNet-cased-base => XLNet-cased-large => ERNIE-v1-zh-base => ERNIE-v1-zh-base-max-len-512 => BERT-en-uncased-large-whole-word-masking => BERT-en-cased-large-whole-word-masking => BERT-en-uncased-base => BERT-en-uncased-large => BERT-en-cased-base => BERT-en-cased-large => BERT-multilingual-uncased-base => BERT-multilingual-cased-base => BERT-zh-base >>> downloader.download('pretrain', 'BERT-en-uncased-base', './pretrain_models') ...
8个步骤开始一个典型的NLP训练任务。
paddlepalm.reader
reader
reader.load_data
paddlepalm.load_data
reader.register_with
paddlepalm.head
paddlepalm.Trainer
Trainer
Trainer.build_forward
paddlepalm.optimizer
paddlepalm.lr_sched
train.build_back
trainer.fit_reader
trainer.load_pretrain
trainer.train
更多实现细节请见示例:
多任务学习模式下运行:
MultiHeadTrainer
multi_head_trainer.build_forward
multi_head_trainer.build_backward
multi_head_trainer.fit_readers
multi_head_trainer
multi_head_trainer.load_pretrain
multi_head_trainer.train
multi_head_trainer的保存/加载和预测操作与trainer相同。
更多实现multi_head_trainer的细节,请见
在训练时保存 models/checkpoints 和 logs,调用 trainer.set_saver 方法。更多实现细节见这里。
trainer.set_saver
训练结束后进行预测和评价, 只需创建额外的reader, backbone和head(重复上面1~4步骤),注意创建时需设phase='predict'。 然后使用trainer的predict方法进行预测(不需创建额外的trainer)。更多实现细节请见这里。
phase='predict'
predict
如果您的环境中存在多个GPU,您可以通过环境变量控制这些GPU的数量和索引CUDA_VISIBLE_DEVICES。例如,如果您的环境中有4个gpu,索引为0、1、2、3,那么您可以运行以下命令来只使用GPU2:
CUDA_VISIBLE_DEVICES=2 python run.py
多GPU的使用需要 ,作为分隔。例如,使用GPU2和GPU3,运行以下命令:
,
CUDA_VISIBLE_DEVICES=2,3 python run.py
在多GPU模式下,PaddlePALM会自动将每个batch数据分配到可用的GPU上。例如,如果batch_size设置为64,并且有4个GPU可以用于PaddlePALM,那么每个GPU中的batch_size实际上是64/4=16。因此,当使用多个GPU时,您需要确保batch_size可以被暴露给PALM的GPU数量整除。
batch_size
此向导由PaddlePaddle贡献,受Apache-2.0 license许可认证。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
PaddlePALM
English | 简体中文
PaddlePALM (PArallel Learning from Multi-tasks) 是一个灵活,通用且易于使用的NLP大规模预训练和多任务学习框架。 PALM是一个旨在快速开发高性能NLP模型的上层框架。
使用PaddlePALM,可以非常轻松灵活的探索具有多种任务辅助训练的“高鲁棒性”阅读理解模型,基于PALM训练的模型D-Net在EMNLP2019国际阅读理解评测中夺得冠军。
MRQA2019 排行榜
除了降低NLP研究成本以外,PaddlePALM已被应用于“百度搜索引擎”,有效地提高了用户查询的理解准确度和挖掘出的答案质量,具备高可靠性和高训练/推理性能。
特点:
你可以很容易地用较少的代码复现出很好的性能,涵盖了大多数NLP任务,如分类、匹配、序列标记、阅读理解、对话理解等等。更多细节可以在
examples中找到。(SIGHAN2006)
评价标准
Package概览
PALM架构图
PaddlePALM是一个设计良好的高级NLP框架。基于PaddlePALM的轻量级代码可以高效实现监督学习、非监督/自监督学习、多任务学习和迁移学习。在PaddlePALM架构中有三层,从下到上依次是component层、trainer层、high-level trainer层。
在组件层,PaddlePALM提供了6个 解耦的组件来实现NLP任务。每个组件包含丰富的预定义类和一个基类。预定义类是针对典型的NLP任务的,而基类是帮助用户开发一个新类(基于预定义类或基类)。
训练器层是用选定的构件建立计算图,进行训练和预测。该层描述了训练策略、模型保存和加载、评估和预测过程。一个训练器只能处理一个任务。
高级训练器层用于复杂的学习和推理策略,如多任务学习。您可以添加辅助任务来训练健壮的NLP模型(提高模型的测试集和领域外的性能),或者联合训练多个相关任务来获得每个任务的更高性能。
安装
PaddlePALM 支持 python2 和 python3, linux 和 windows, CPU 和 GPU。安装PaddlePALM的首选方法是通过
pip。只需运行以下命令:通过源码安装
库依赖
下载预训练模型
我们提供了许多预训练的模型来初始化模型主干网络参数。用预先训练好的模型训练大的NLP模型,如12层Transformer,实际上比用随机初始化的参数更有效。要查看所有可用的预训练模型并下载,请在python解释器中运行以下代码(在shell中输入命令
python):使用
快速开始
8个步骤开始一个典型的NLP训练任务。
paddlepalm.reader为数据集加载和输入特征生成创建一个reader,然后调用reader.load_data方法加载训练数据。paddlepalm.load_data创建一个模型主干网络来提取文本特征(例如,上下文单词嵌入,句子嵌入)。reader.register_with将reader注册到主干网络上。在这一步之后,reader能够使用主干网络产生的输入特征。paddlepalm.head。创建一个任务head,可以为训练提供任务损失,为模型推理提供预测结果。paddlepalm.Trainer创建一个任务Trainer,然后通过Trainer.build_forward构建包含主干网络和任务头的前向图(在步骤2和步骤4中创建)。paddlepalm.optimizer(如果需要,创建paddlepalm.lr_sched)来创建一个优化器,然后通过train.build_back向后构建。trainer.fit_reader将准备好的reader和数据(在步骤1中实现)给到trainer。trainer.load_pretrain加载预训练模型或使用trainer.load_pretrain加载checkpoint,或不加载任何已训练好的参数,然后使用trainer.train进行训练。更多实现细节请见示例:
多任务学习
多任务学习模式下运行:
Trainer(每个Trainer对应一个任务),并通过它们创建一个MultiHeadTrainer。multi_head_trainer.build_forward构建多任务前向图。paddlepalm.optimizer(如果需要,创建paddlepalm.lr_sched)来创建一个optimizer,然后通过multi_head_trainer.build_backward创建反向。multi_head_trainer.fit_readers将所有准备好的读取器和数据放入multi_head_trainer中。multi_head_trainer.load_pretrain加载预训练模型或使用multi_head_trainer.load_pretrain加载checkpoint,或不加载任何已经训练好的参数,然后使用multi_head_trainer.train进行训练。multi_head_trainer的保存/加载和预测操作与trainer相同。
更多实现
multi_head_trainer的细节,请见设置saver
在训练时保存 models/checkpoints 和 logs,调用
trainer.set_saver方法。更多实现细节见这里。评估/预测
训练结束后进行预测和评价, 只需创建额外的reader, backbone和head(重复上面1~4步骤),注意创建时需设
phase='predict'。 然后使用trainer的predict方法进行预测(不需创建额外的trainer)。更多实现细节请见这里。使用多GPU
如果您的环境中存在多个GPU,您可以通过环境变量控制这些GPU的数量和索引CUDA_VISIBLE_DEVICES。例如,如果您的环境中有4个gpu,索引为0、1、2、3,那么您可以运行以下命令来只使用GPU2:
多GPU的使用需要
,作为分隔。例如,使用GPU2和GPU3,运行以下命令:在多GPU模式下,PaddlePALM会自动将每个batch数据分配到可用的GPU上。例如,如果
batch_size设置为64,并且有4个GPU可以用于PaddlePALM,那么每个GPU中的batch_size实际上是64/4=16。因此,当使用多个GPU时,您需要确保batch_size可以被暴露给PALM的GPU数量整除。许可证书
此向导由PaddlePaddle贡献,受Apache-2.0 license许可认证。