添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
强悍的牙膏  ·  makecell左对齐 - CSDN文库·  2 月前    · 
老实的打火机  ·  RuntimeInformation ...·  1 年前    · 
一身肌肉的镜子  ·  Xamarin.Android - ...·  1 年前    · 
侠义非凡的沙滩裤  ·  kotlin ...·  1 年前    · 
TencentPretrain 使用 DeepSpeed ZeRO-3 并行训练

TencentPretrain 使用 DeepSpeed ZeRO-3 并行训练

多模态预训练框架 TencentPretrain 现已支持 LoRA 和 DeepSpeed ZeRO-3 并行,单机 8 * A100 可训练千亿参数量大模型。

DeepSpeed 是一个GPU分布式训练加速框架,它的核心在于通过显存优化来训练更大的模型,DeepSpeed的详细原理介绍可以参考 这篇文章 。在之前版本的 TencentPretrain 中已经支持 ZeRO stage1和2,最近我们的更新添加了对 ZeRO stage 3 的支持。经过测试,单机 8 * A100 40G 训练 LLaMA 30B 在 512 seq length 时能达到 256 batch size,大幅度提高了我们训练大模型的上限。

基于 ZeRO-3,我们训练了中文 LLaMA 基础模型和 ChatLLaMA 对话模型,数据、代码和模型权重均公开,仓库正在持续更新中:


本文主要介绍如何在 TencentPretrain 中使用 DeepSpeed ZeRO-3 训练和推理大模型,以及如何使用 LoRA 进一步降低计算开销快速微调模型。

DeepSpeed ZeRO-3

在预训练阶段,使用 --enable_zero3 参数以及对应的配置文件(例如 deepspeed_zero3_config.json)启动 ZeRO-3 训练 LLaMA 模型。数据集的制作方法参考 这里

deepspeed pretrain.py --deepspeed --deepspeed_config models/deepspeed_config.json \
                      --pretrained_model_path models/llama-7b.bin \
                      --dataset_path $OUTPUT_DATASET_PATH --spm_model_path $LLaMA_PATH/tokenizer.model \
                      --config_path models/llama/7b_config.json \
                      --output_model_path models/llama_zh_7b \
                      --world_size 8 --data_processor lm --enable_zero3

使用DeepSpeed进行语言模型推理:

deepspeed scripts/generate_lm_deepspeed.py --load_model_path models/llama-7b.bin --spm_model_path $LLaMA_PATH/tokenizer.model \
                               --deepspeed_config models/deepspeed_zero3_config.json \
                               --test_path beginning.txt --prediction_path generated_sentence.txt \
                               --config_path models/llama/7b_config.json  --enable_zero3

LoRA

本次更新还加入了对 Low-Rank Adaptation (LoRA) 的支持。使用 --use_lora 参数启用 LoRA 训练。LoRA的具体参数可以通过 --lora_r、 --lora_alpha、--lora_dropout 来配置。 当启用 use_lora 时,模型仅保存 LoRA 部分的参数。

python3 pretrain.py --pretrained_model_path models/llama-7b.bin \
                    --dataset_path $OUTPUT_DATASET_PATH --spm_model_path $LLaMA_PATH/tokenizer.model \
                    --config_path models/llama/7b_config.json \
                    --output_model_path models/llama-7b_loar.bin \
                    --world_size 8  --learning_rate 1e-4 \
                    --data_processor lm --use_lora --lora_dropout 0.05


加载预训练模型权重和 LoRA 权重进行增量训练:

python3 pretrain.py -pretrained_model_path models/llama-7b.bin \