链载Ai

标题: DeepSpeed-Chat微调模型:deepspeed训练系列-1 [打印本页]

作者: 链载Ai    时间: 3 小时前
标题: DeepSpeed-Chat微调模型:deepspeed训练系列-1

此前在训练中,由于使用的是NVIDIA GPU,因此主要接触到的是使用Megaron进行训练,后来NV推出NeMo,其分布式训练依然是Megatron core。

今天看了一下微软的分布式训练框架,生态完善速度很快。首先看一下github的star,DeepSpeed的的数量已经远超NeMo和Megaron的总和,接近NV两种框架之和的两倍。


DeepSpeed是一个由微软开发的深度学习优化软件套件,旨在为大规模训练和推理提供前所未有的速度和规模。它通过一系列创新技术,使得训练和推理大型模型变得更加高效和可行。以下是关于DeepSpeed的一些关键特性和优势

DeepSpeed的四大创新支柱

 

  1. DeepSpeed训练:DeepSpeed通过系统创新,如ZeRO、3D并行、DeepSpeed-MoE、ZeRO-Infinity等,大大提高了大规模深度学习训练的效率和易用性,重新定义了可能达到的规模。

  2. DeepSpeed推理:DeepSpeed将张量、流水线、专家和ZeRO并行技术等创新技术结合起来,并与高性能定制推理内核、通信优化和异构内存技术相结合,实现了前所未有的推理规模,同时实现了无与伦比的延迟、吞吐量和成本降低。

  3. DeepSpeed压缩:为了进一步提高推理效率,DeepSpeed提供了易于使用且灵活组合的压缩技术,使研究人员和实践者能够在提供更快速度、更小模型大小的同时,显著降低压缩成本。此外,还包括了如ZeroQuant和XTC等最先进的压缩创新。

  4. DeepSpeed4Science:DeepSpeed团队启动了一个名为DeepSpeed4Science的新倡议,旨在通过AI系统技术创新构建独特能力,帮助领域专家解锁当今最大的科学谜题。


DeepSpeed的关键优势

 

DeepSpeed可以被视为一个松散的框架,提供了一系列的技术和工具,使开发者能够针对其特定的深度学习项目进行优化,其具体的实例(包括但不限于):

  1. DeepSpeed-Chat:专注于提高Llama/Llama-2系统的支持、效率和训练稳定性 。

  2. DeepSpeed-FastGen:专注于通过MII和DeepSpeed-Inference实现高吞吐量的文本生成,适用于大型语言模型(LLMs) 。

  3. DeepSpeed-VisualChat:改善聊天体验,支持多轮多图像输入的聊天模型。

  4. DeepSpeed4Science:一个新倡议,旨在通过AI系统技术创新构建独特能力,帮助领域专家解锁当今最大的科学谜题 。

  5. DeepSpeed ZeRO-Inference:通过权重量化和KV缓存卸载实现20倍更快的推理速度 。

  6. DeepSpeed Ulysses:系统优化,使得训练极长序列的Transformer模型成为可能 。

    这些实例展示了DeepSpeed框架的广泛应用,从提高训练和推理效率,到支持特定类型的模型,再到解决科学研究中的问题。每个项目或实例都利用DeepSpeed的核心技术和创新,针对特定的应用场景进行优化。


接下来,我们先看DeepSpeed-Chat。

DeepSpeed Chat旨在简化并加速类似ChatGPT的大型语言模型的强化学习训练流程(RLHF)。由微软的DeepSpeed团队开发,此工具提供了一个易于使用、高效和低成本的方案,让在不同规模的平台上训练复杂的聊天机器人模型成为可能。

当前开源社区缺少一个端到端的RLHF训练管道,这限制了AI社区轻松训练强大ChatGPT风格模型的能力。例如,使用现有系统训练一个中等规模,如6.7B参数的ChatGPT模型,往往需要高昂的GPU硬件。即便能够获得相应的计算资源,训练的效率也不尽如人意。现有解决方案难以支持快速且低成本训练数百亿参数的先进ChatGPT模型。

为了克服这些困难,DeepSpeed团队推出了DeepSpeed Chat,它具有三个主要特点:

  1. 易用的训练和推理体验:DeepSpeed Chat利用一个简单脚本,接收预训练的Huggingface模型,并通过DeepSpeed-RLHF系统完整执行InstructGPT训练的三个步骤,从而产出定制的ChatGPT风格模型。此外,它还提供了推理API,用于在模型训练完成后进行对话式的交互测试。

  2. DeepSpeed-RLHF管道:该管道主要复制了InstructGPT论文中的训练流程,包括监督式微调、奖励模型微调和结合人类反馈的强化学习。它还支持数据抽象和混合,以便结合多个数据源进行训练。

  3. DeepSpeed-RLHF系统:这是一个集成了DeepSpeed的训练和推理优势的强大且精细化的系统。它的混合引擎(DeepSpeed-HE)可在RLHF的推理和训练模式之间无缝切换,并结合了如张量并行和高效变换器内核等推理优化。同时,它也利用了ZeRO和LoRA等内存优化策略。

DeepSpeed-RLHF系统以其不可比拟的规模效率,使复杂的RLHF训练变得快捷、低成本且易于使用:

总之,DeepSpeed Chat结合了推理和训练的先进技术于一个混合引擎,旨在为DeepSpeed-RLHF管道带来卓越的规模化和效率,让RLHF训练更快、更经济且更易于获取。与现有的RLHF系统相比,DeepSpeed-RLHF在单GPU上的处理能力提升了超过10倍,在多GPU配置中速度提升了6至19倍,DeepSpeed-HE的出现提高了在相同的延迟预算下训练更大actor模型的能力,或者是以超过十倍更低的成本训练类似规模的模型。


我们先看Deepspeed-Chat微调OPPT模型的代码。

如果用一个GPU训练:

!git clone https://github.com/microsoft/DeepSpeedExamples.git
%cd DeepSpeedExamples/applications/DeepSpeed-Chat/
# python e2e_rlhf.py --actor-model facebook/opt-1.3b --reward-model facebook/opt-350m --deployment-type single_gpu

e2e_rlhf.py程序的主要作用:

这个脚本(e2e_rlhf.py)旨在通过三个步骤训练和微调一个基于深度学习的聊天机器人模型,使用的是微软的DeepSpeed框架来优化大型模型的训练。以下是程序的步骤和目的:

  1. 参数解析: 首先,脚本通过argparse模块定义和解析输入参数。这些参数允许用户指定要执行的步骤、模型大小、以及其他一些配置项,例如ZeRO优化阶段和输出目录等。

  2. 工具函数: 接着,脚本中定义了一些辅助函数,用于获取与特定训练步骤相关的信息,例如各步骤要使用的模型大小、存储位置、训练脚本以及执行命令。

  3. 模型训练和微调: 脚本具体包括以下三个训练步骤:

这个脚本的使用也很灵活,允许用户选择只运行特定步骤或者连续运行所有步骤,并且可以自定义使用不同大小的模型。

  1. 执行: 当所有的步骤定义和辅助函数准备完成后,脚本调用main函数,在其中依次执行指定的训练步骤。每一步执行时,它生成相应的Shell命令,然后调用该命令执行实际的训练过程。

  2. 日志: 训练过程的日志会被保存在指定的输出目录中,以便于后续审核和调试。程序运行完毕后,脚本会打印出每一步以及所有步骤总共用时。

整体上,这个脚本的目的是提供一个端到端(end-to-end)的解决方案来训练一个通过强化学习方式微调后的、性能优化的聊天机器人模型。 

这个脚本调用的三个子程序如下:


微调的时候,查看前台信息:

---=== Running Step 1 ===---Running:bash /root/DeepSpeedExamples/applications/DeepSpeed-Chat/training/step1_supervised_finetuning/training_scripts/opt/single_gpu/run_1.3b.sh /root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/actor-models/1.3b---=== Finished Step 1 in 0:12:21 ===------=== Running Step 2 ===---Running:bash /root/DeepSpeedExamples/applications/DeepSpeed-Chat/training/step2_reward_model_finetuning/training_scripts/opt/single_gpu/run_350m.sh /root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/reward-models/350m---=== Finished Step 2 in 0:16:07 ===------=== Running Step 3 ===---Running:bash /root/DeepSpeedExamples/applications/DeepSpeed-Chat/training/step3_rlhf_finetuning/training_scripts/opt/single_gpu/run_1.3b.sh /root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/actor-models/1.3b /root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/reward-models/350m '' '' /root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/step3-models/1.3b

分析前台信息如下:

这三个步骤分别是DeepSpeed-Chat(一个使用DeepSpeed加速的聊天机器人应用)的三个不同的训练阶段,具体区别如下:

Step 1: 监督式微调(Supervised Finetuning)


Step 2: 奖励模型微调(Reward Model Finetuning)

Step 3: 基于强化学习的微调(RLHF Finetuning)


查看Step 1: 监督式微调的最终日志:

root@davidwei:~/DeepSpeedExamples/applications/DeepSpeed-Chat/output/actor-models/1.3b# tail -f training.log[2024-03-19 03:40:54,012] [INFO] [timer.py:260] epoch=0/micro_step=560/global_step=70, RunningAvgSamplesPerSec=26.61111929020448, CurrSamplesPerSec=26.734001691369528, MemAllocated=5.92GB, MaxMemAllocated=42.72GB Model Parameters: 1.429 B, Latency: 0.63s, TFLOPs: 73.37,Model Parameters: 1.429 B, Latency: 0.60s, TFLOPs: 77.31, Samples/sec: 26.60, Time/seq 0.04s, Batch Size: 16, Sequence Length: 512Model Parameters: 1.429 B, Latency: 0.60s, TFLOPs: 77.56, Samples/sec: 26.69, Time/seq 0.04s, Batch Size: 16, Sequence Length: 512Model Parameters: 1.429 B, Latency: 0.60s, TFLOPs: 77.24, Samples/sec: 26.58, Time/seq 0.04s, Batch Size: 16, Sequence Length: 512Model Parameters: 1.429 B, Latency: 0.64s, TFLOPs: 73.08, Samples/sec: 25.15, Time/seq 0.04s, Batch Size: 16, Sequence Length: 512Model Parameters: 1.429 B, Latency: 0.59s, TFLOPs: 78.15, Samples/sec: 26.89, Time/seq 0.04s, Batch Size: 16, Sequence Length: 512Model Parameters: 1.429 B, Latency: 0.21s, TFLOPs: 216.31, Samples/sec: 74.43, Time/seq 0.01s, Batch Size: 16, Sequence Length: 512***** Evaluating perplexity, Epoch 1/1 *****ppl: 2.1494030952453613, loss: 0.7651901245117188saving the final model ...[2024-03-19 04:58:41,508] [INFO] [launch.py:348:main] Process 6210 exits successfully.

针对上面日志,分析如下:

  1. 训练进度:

  • 性能指标:

  • 可以看到困惑度不算高但损失函数有点高。


    查看Step 2: 奖励模型微调(Reward Model Finetuning)的最终日志

    root@davidwei:~/DeepSpeedExamples/applications/DeepSpeed-Chat/output/reward-models/350m# tail -f training.log

    ***** Evaluating reward, Epoch 1/1 *****chosen_last_scores (higher is better) : 1.4312011003494263, rejected_last_scores (lower is better) : 1.1621630191802979, acc (higher is better) : 0.6231249570846558saving model ...[2024-03-19 05:14:49,197] [INFO] [launch.py:348:main] Process 7939 exits successfully.

    我们看到准确率还可以。

    查看Step 3: 基于强化学习的微调(RLHF Finetuning)的日志

    root@davidwei:~/DeepSpeedExamples/applications/DeepSpeed-Chat/output/step3-models/1.3b# tail -f training.log|E2E latency=3.03s |Gather latency=0.00s (0.00%) |Generate time=1.37s (45.04%) |Training time=1.44s (47.33%) |Others=0.23 (7.63%)|CurSamplesPerSec=5.27 |AvgSamplesPerSec=5.19Epoch: 0 | Step: 1547 | PPO Epoch: 1 | Actor Loss: 0.0095367431640625 | Critic Loss: 0.0018329620361328125 | Unsupervised Loss: 0.0End-to-End => Latency: 3.81s, TFLOPs: 28.43, Samples/sec: 4.20, Time/seq 0.24s, Batch Size: 16, Total Seq. Length: 512Generation => Latency: 3.06s, Per-token Latency 11.94 ms, TFLOPs: 7.16, BW: 239.38 GB/sec, Answer Seq. Length: 256Training   => Latency: 0.75s, TFLOPs: 115.09Actor Model Parameters => 1.429 B, Critic Model Parameters => 0.331 BAverage reward score: 3.0078125 | EMA reward score: 2.972019692554085-------------------------------------------------------------------------------------saving model ...[2024-03-19 06:35:15,108] [INFO] [launch.py:348:main] Process 9894 exits successfully.



    在强化学习中,"Actor"和"Critic"是两种不同的模型,它们一起工作以优化决策过程。这种方法被称为"Actor-Critic"方法。


    简单来说,Actor决定要做什么,Critic评估这个决定的好坏。通过这种方式,Actor和Critic一起帮助模型学习如何做出更好的决策。


    接下来,针对刚才训练的模型进行推理,推理脚本使用:https://github.com/microsoft/DeepSpeedExamples/blob/master/applications/DeepSpeed-Chat/inference/chatbot.py

    (deepspeed) root@davidwei:~/DeepSpeedExamples/applications/DeepSpeed-Chat/inference# python chatbot.py --path /root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/actor-models/1.3b --max_new_tokens 128


    Enter input (type 'quit' to exit, 'clear' to clean memory): Where is China

    ------------------------------ Round 1 ------------------------------

     Human: Where is China

     Assistant:  China is a country in Asia.  It is the largest country in the Asia Pacific region.  It is the second-largest country in the world, after the United States.  It is the largest country in Asia by area, and the second-largest country in the world by population.<|endoftext|>






    欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5