huggingface 的trainer训练框架优势


背景

Huggingface Transformers 是基于一个开源基于 transformer 模型结构提供的预训练语言库,它支持 Pytorch,Tensorflow2.0,并且支持两个框架的相互转换。框架支持了最新的各种NLP预训练语言模型,使用者可以很快速的进行模型的调用,并且支持模型further pretraining 和 下游任务fine-tuning。

Transformers 库写了了一个transformers.Trainer API,它是一个简单但功能完整的 PyTorch 训练和评估循环,针对 Transformers 进行了优化,有很多的训练选项和内置功能,同时也支持多GPU/TPU分布式训练和混合精度。即Trainer API是一个封装好的训练器(Transformers库内置的小框架,如果是Tensorflow,则是TFTrainer)


一、 开源生态环境

  1. 基于huggingface transformers实现,可以快速稳定调用几乎全部开源模型使用。
  2. 开源生态良好,企业级维护,网上示例和各种不同需求代码demo多。
  3. 官方tutorial 全面。
  4. 支持huggingface 各种好用工具库:datasets, evaluate, peft,accelerate等

二、训练阶段

  1. 内置训练循环

  2. 支持模型不同训练阶段的加载和保存

    (模型参数,学习率,优化器,scheduler等)自动保存加载,保证训练中断后继续稳定训练。

  3. log打印,训练阶段log自动打印。

  4. 支持各种optmizer,schedular 参数化配置。

  5. 支持各种提高模型能力的trick 如warmup,grad_clip ,grad_accumulate 等。

  6. TrainingArguments ,DataArguments,ModelArgument

    训练过程,数据相关,模型相关的各种常用参数存在

  7. 支持使用datasets 类 map操作,进行数据集高效预处理

  8. 支持使用Accelerate库进行分布式训练

    1. Accelerate 还可以使 DataLoaders 更高效。这是通过自定义采样器实现的,它可以在训练期间自动将部分批次发送到不同的设备,从而允许每个设备只需要储存数据的一部分,而不是一次将数据复制四份存入内存,具体取决于配置。因此,内存总量中只有原始数据集的一个完整副本。该数据集会拆分后分配到各个训练节点上,从而允许在单个实例上训练更大的数据集,而不会使内存爆炸。
    2. 自动识别不同节点卡数量和类型,不需要model,数据to(rank), cuda(),to(device)等操作。
  9. 支持混合精度训练,包括torch.cuda.amp (torch>1.6) 和 apex (torch<=1.6)

  10. 支持使用deepspeed 使用

    trainer使用deepspeed 仅使用–deepspeed config 即可,同时config文件中设置为auto,即可使用trainer中默认的参数,简化了参数配置。

    支持使用zero1,zero2,zero3,zero-inifinity

  11. 支持peft 库使用

    1. lora 等(Prefix Tuning, P-Tuning, IA3) 仅训练部分参数的加速训练框架。
    2. prepare_model_for_int8_training,支持使用int8 量化进行训练,节省大量内存。
    3. qlora 将lora 参数量化为NF4 进行进一步节省内存。

三、验证阶段

  1. 内置验证循环

  2. 验证解耦合

    仅需自行实现compute_metrics ,并且支持huggingface的evaluate库 的各种基本任务的验证工具(p, r, f1,rouge等各种评估指标)

  3. 支持使用accelerate库进行分布式验证


四、推理阶段

  1. 支持使用 bitsandbytes 库 进行量化操作
    1. int8量化推理,几乎不会损失任何精度
    2. Int4 推理
  2. 支持decoder 的各种解码实现
    1. top-k
    2. top-p
    3. beam-search 等

参考

  1. PEFT
  2. Accelerate
  3. text-generation-inference
  4. transformers
  5. FasterTransformer
  6. peft
  7. qlora
  8. LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

你可能感兴趣的:(人工智能,深度学习,python)