Huggingface Transformers 是基于一个开源基于 transformer 模型结构提供的预训练语言库,它支持 Pytorch,Tensorflow2.0,并且支持两个框架的相互转换。框架支持了最新的各种NLP预训练语言模型,使用者可以很快速的进行模型的调用,并且支持模型further pretraining 和 下游任务fine-tuning。
Transformers 库写了了一个transformers.Trainer API,它是一个简单但功能完整的 PyTorch 训练和评估循环,针对 Transformers 进行了优化,有很多的训练选项和内置功能,同时也支持多GPU/TPU分布式训练和混合精度。即Trainer API是一个封装好的训练器(Transformers库内置的小框架,如果是Tensorflow,则是TFTrainer)
内置训练循环
支持模型不同训练阶段的加载和保存
(模型参数,学习率,优化器,scheduler等)自动保存加载,保证训练中断后继续稳定训练。
log打印,训练阶段log自动打印。
支持各种optmizer,schedular 参数化配置。
支持各种提高模型能力的trick 如warmup,grad_clip ,grad_accumulate 等。
TrainingArguments ,DataArguments,ModelArgument
训练过程,数据相关,模型相关的各种常用参数存在
支持使用datasets 类 map操作,进行数据集高效预处理
支持使用Accelerate库进行分布式训练
DataLoaders
更高效。这是通过自定义采样器实现的,它可以在训练期间自动将部分批次发送到不同的设备,从而允许每个设备只需要储存数据的一部分,而不是一次将数据复制四份存入内存,具体取决于配置。因此,内存总量中只有原始数据集的一个完整副本。该数据集会拆分后分配到各个训练节点上,从而允许在单个实例上训练更大的数据集,而不会使内存爆炸。支持混合精度训练,包括torch.cuda.amp (torch>1.6) 和 apex (torch<=1.6)
支持使用deepspeed 使用
trainer使用deepspeed 仅使用–deepspeed config 即可,同时config文件中设置为auto,即可使用trainer中默认的参数,简化了参数配置。
支持使用zero1,zero2,zero3,zero-inifinity
支持peft 库使用
内置验证循环
验证解耦合
仅需自行实现compute_metrics ,并且支持huggingface的evaluate库 的各种基本任务的验证工具(p, r, f1,rouge等各种评估指标)
支持使用accelerate库进行分布式验证