Transformers

功能简介

我们开发了Optimum Ascend作为Transformers和昇腾NPU之间的接口。Optimum Ascend提供一组易用工具,用于加载模型并在单NPU和多NPU配置上进行模型训练和评估,进行不同的下游任务。

安装方法

当前昇腾适配的版本要求Transformers版本为4.25.1,PyTorch版本为1.8.1。

执行以下代码进行安装。

git clone https://gitee.com/ascend/transformers.git -b optimum && cd transformers
pip install -e .

使用方法

Optimum Ascend设计初衷是让所有transformers用户能够简单直接地进行训练和评估,同时充分利用昇腾NPU的计算能力。

代码中有两种类型的class:

NPUTrainer与Transformers Trainer非常相似。将Transformers Trainer脚本适配到NPU上时,只需要将Transformers Trainer class代码中的Trainer替换为NPUTrainer即可。以下为使用示例。

原始脚本:

from transformers import Trainer, TrainingArguments 
training_args = TrainingArguments(
  # training arguments...
) 

# A lot of code here 
# Initialize our Trainer

trainer = Trainer(
    model=model,
    args=training_args,  # Original training arguments.
    train_dataset=train_dataset if training_args.do_train else None,
    eval_dataset=eval_dataset if training_args.do_eval else None,
    compute_metrics=compute_metrics,
    tokenizer=tokenizer,
    data_collator=data_collator,
)

支持模型

适配昇腾的Transformers支持模型和下游任务列表见下表。

在执行translation下游任务时,在eval阶段需要进行算子二进制配置。用户需先参考CANN 软件安装指南常用操作 > 安装、升级和卸载二进制算子包章节安装二进制算子包,再在eval阶段开始前添加以下代码。

torch_npu.npu.set_compile_mode(jit_compile=False)

更多算子二进制配置内容可参考算子二进制调优

表1 昇腾Transformers支持模型列表

模型

单卡

多卡

下游任务

BERT

  • text classification
  • token classification

ALBERT

question answering

RoBERTa

language modeling

T5

translation

GPT-2

language modeling

使用样例

当前支持在昇腾NPU上对Transformers进行单机单卡、单机多卡训练和APEX模块下的混合精度训练。这里以question_answering下游任务为插件使用样例代码。获取样例代码run_qa.py,随后执行如下命令拉起训练。

python3.7 run_qa.py \
        --model_name_or_path albert-base-v2 \
        --dataset_name squad \
        --do_train \
        --do_eval \
        --num_train_epochs 3 \
        --learning_rate 3e-5 \
        --device_id 0 \
        --fp16 \
        --fp16_opt_level O2 \
        --use_combine_grad \
        --loss_scale 1024.0 \
        --dataloader_drop_last \
        --output_dir ./output

训练命令参数说明如下。

--model_name_or_path     // 与训练模型文件夹路径 
--dataset_name           // 数据集名称 
--do_train               // 执行训练 
--do_eval                // 执行评估 
--num_train_epochs       // 训练的epoch次数 
--learning_rate          // 初始学习率 
--device_id              // [插件新增参数]指定单卡训练时的卡号,多卡训练无需使用 
--fp16                   // 使用混合精度训练,当前只支持apex 
--fp16_opt_level         // apex混合精度级别 
--use_combine_grad       // [插件新增参数]apex混合精度训练使用combine_grad选项,用于性能调优
--loss_scale             // [插件新增参数]apex混合精度训练使用固定loss_scale,用于性能调优 
--dataloader_drop_last   // 丢弃最后一个不完整的batch 
--output_dir             // 训练结果和checkpoint保存路径