Ascend-SACT/Flan-T5
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Flan-T5是encoder-decoder结构,通过指令在超大规模的任务上进行微调,让语言模型具备了极强的泛化性能,适用于多种NLP任务。

适配昇腾 AI 处理器的实现:

url=https://gitcode.com/ascend/ModelZoo-PyTorch.git
code_path=PyTorch/built-in/foundation

一、准备运行环境

表 1 三方库版本支持表

三方库支持版本(PT2.1)支持版本(PT2.4)
PyTorch2.12.4
transformers4.37.24.37.2
accelerate0.25.00.25.0
deepspeed0.12.60.15.3
datasets2.16.02.16.0
evaluate0.4.10.4.1

环境准备指导。

请参考《Pytorch框架训练环境准备》。

表 2 昇腾软件版本支持表

软件类型支持版本
FrameworkPTAdapter24.1.RC1
CANN24.1.RC1
昇腾NPU固件24.1.RC1
昇腾NPU驱动24.1.RC1

表 3 昇腾软件版本支持表

配套版本环境准备指导
机器型号Atlas 800T A2 训练节点-
AI加速芯片昇腾 Ascend 910C-

1.1 加载镜像

# 环境打包成 flant5-patchcore-v1.0.0.tar
docker load -i flant5-patchcore-v1.0.0.tar

1.2 容器创建

docker run -dit --privileged --ipc=host --name=BlendMask_test  --shm-size=1000g \
    --device=/dev/davinci_manager \
    --device=/dev/devmm_svm \
    --device=/dev/hisi_hdc \
    -v /usr/local/sbin:/usr/local/sbin \
    -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
    -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
    -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
    -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
    -v /etc/ascend_install.info:/etc/ascend_install.info \
    -v /home:/home \
    -v /data:/data \
    -v /tmp:/tmp \
    IMAGE_ID \
/bin/bash

docker exec -it flant5-patchcore bash

1.3 安装依赖

# 下载目录
https://gitcode.com/Ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in/foundation/Flan-t5-xxl

在模型源码包根目录下执行命令,安装模型对应PyTorch版本需要的依赖。

# PyTorch 2.1请使用requirements_2_1.txt
pip install -r requirements_2_1.txt

# PyTorch 2.4请使用requirements_2_4.txt
pip install -r requirements_2_4.txt

说明: 只需执行一条对应的PyTorch版本依赖安装命令。

二、下载模型权重与数据集

# 下载公开数据集squard-v2(train):
https://gitee.com/hf-datasets/squad_v2

#下载数据集squad_v2(evaluation):
https://github.com/huggingface/evaluate/tree/main/metrics/squad_v2

# 模型权重
https://ai.gitee.com/hf-models/google/flan-t5-xxl/tree/main

准备数据集

  1. 下载的数据集squad_v2(train), 数据集结构如下

    ├── squad_v2
         ├── train-00000-of-00001.parquet
         ├── validation-00000-of-00001.parquet
    
  2. 下载数据集squad_v2(evaluation),手动修改squad_v2(evaluation)的数据集名称

    #此处只修改squad_v2(evaluation)数据集,squad_v2(train)数据集保持不变
    mv squad_v2 suqad_v2_eval
    cd squad_v2_eval
    mv squad_v2.py squad_v2_eval.py

    修改后squad_v2_eval数据集结构如下

    ├── squad_v2_eval
         ├── app.py
         ├── compute_score.py
         ├── requirements.txt
         ├── squad_v2_eval.py
         ├── README.md

准备预训练权重

下载的权重google/flan-t5-xxl, 模型权重的结构如下:

├── flan-t5-xxl
  ├── config.json
  ├── generation_config.json
  ├── special_tokens_map.json
  ├── spiece.model
  ├── tokenizer.json
  ├── tokenizer_config.json
  ├── model.safetensors.index.json
  ├── model-00001-of-00005.safetensors
  ├── model-00002-of-00005.safetensors
  ...
  ├── model-00005-of-00005.safetensors

模型适配

进入脚本所在目录 shell cd PyTorch/built-in/foundation/Flan-t5-xxl/scripts

  • 模型训练脚本参数说明如下。
--model_name_or_path          //模型权重路径
--deepspeed                   //deepspeed配置文件路径
--dataset_name                //squad_v2路径 
--eval_dataset_name           //评估数据集路径
--version_2_with_negative     //squad_v2数据集处理参数,用于处理question-answer数据结构无answer情况
--context_column              //数据集context_column 
--question_column             //数据集question_column 
--answer_column               //数据集answer_column
--do_train                    //训练标识
--do_eval                     //评估标识
--per_device_train_batch_size //训练时单卡批次大小
--learning_rate 5e-6          //初始学习率
--gradient_accumulation_steps //梯度累计步数 
--num_train_epochs            //重复训练次数
--max_steps 2000              //训练最大步数
--save_steps 2000             //保存checkpoint步数间隔
--max_seq_length              //seq_length 
--logging_steps 1             //日志打印步数
--doc_stride 128              //滑动步长
--seed 1234                   //随机种子
--bf16                        //混精bf16
--overwrite_output_dir        //覆盖输出目录

修改model_name_or_path,deepspeed,dataset_name, eval_dataset_name为绝对路径位置,原始名称和相对名称可能使用默认数据位置导致报错。

三、模型运行

3.1 模型训练

运行训练脚本,该模型支持单机8卡训练。

bash train_full_8p.sh # 8卡精度及性能

训练完成后,权重文件保存在PyTorch/built-in/foundation/Flan-t5-xxl/output路径下,模型训练精度和性能信息保存在PyTorch/built-in/foundation/Flan-t5-xxl/scripts/output文件夹下。

竞品训练运行修改参数

  • 修改utils/run_seq2seq_qa.py文件, 注释代码

    #from rms_norm import forward
    #T5LayerNorm.forward = forward
  • 修改scripts/train_full_8p.sh文件,注释代码

    #source ${scripts_path_dir}/env_npu.sh

推理评测

使用 deepspeed命令进行eval评测: 运行评测命令如下,需要将…/PyTorch/built-in/foundation/Flan-t5-xxl 改为模型项目实际代码位置,修改model_name_or_path,deepspeed,dataset_name, eval_dataset_name为绝对路径位置:

export OUTPUT_DIR= ../PyTorch/built-in/foundation/Flan-t5-xxl/eval_ckpt
deepspeed --num_gpus 8 --master_port 9911 utils/run_seq2seq_qa.py   --model_name_or_path …/PyTorch/built-in/foundation/Flan-t5-xxl/output/tmp-checkpoint-500   --deepspeed  ds_config.json   --dataset_name squad_v2   --eval_dataset_name squad_v2_eval   --version_2_with_negative   --context_column context   --question_column question   --answer_column answers   --do_eval   --per_device_eval_batch_size 1   --max_seq_length 256   --doc_stride 128   --bf16   --predict_with_generate   --output_dir "${OUTPUT_DIR}"

四、性能数据

表 4 性能结果展示表(2000 steps)

NameTrain Samples Per SecondIterationsDataTypeTorch_Version
8p-NPU17.5972000BF162.1.0
8p-竞品A22.0122000BF162.1.0

表 5 eval 结果展示表(2000 steps)

Nameeval loss
8p-NPU0.3771
8p-竞品A0.3792

五、问题解决

显存大小不足64GB的硬件,如昇腾910B4(32GB)可能报显存不足异常

显存不足的情况下跑训练,需要开启deepseed ZeRO-3 分片,该方式会使用CPU辅助,会影响性能,开启方式:

cd ds_config.json

# 更改zero_optimization字段
"zero_optimization": {
    "stage": 3,
    "overlap_comm": true,
    "contiguous_gradients": true,
    "sub_group_size": 1000000000,
    "reduce_bucket_size": 50000000,
    "stage3_prefetch_bucket_size": 50000000,
    "stage3_param_persistence_threshold": "auto",
    "stage3_max_live_parameters": 500000000,
    "stage3_max_reuse_distance": 500000000,
    "stage3_gather_16bit_weights_on_model_save": true
  }
  

根据情况还可以调整batchsize和 seqlen,节约显存占用

cd scripts\train_full_8p.sh
# 修改per_device_train_batch_size和 max_seq_length