AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


DeepSpeed-Chat微调模型:deepspeed训练系列-1
发布日期:2024-05-02 17:43:49 浏览次数: 1923


此前在训练中,由于使用的是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使得训练和推理具有数十亿甚至数万亿参数的密集或稀疏模型成为可能,实现了优秀的系统吞吐量,并能高效扩展到数千个GPU。

  • 资源约束下的高效性:即使在资源受限的GPU系统上,也能实现训练和推理,达到前所未有的低延迟和高吞吐量。

  • 模型压缩:通过极端压缩技术,实现了无与伦比的推理延迟和模型大小减少,同时降低成本 1 。

  • 广泛的应用:DeepSpeed已被广泛应用于训练多种大规模模型,如Megatron-Turing NLG (530B)、Jurassic-1 (178B)、BLOOM (176B)等,并与多个流行的开源深度学习框架集成 。

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-HE,它的训练速度是现有系统的15倍以上,不仅加速了RLHF训练,也降低了成本。比如,它可以在Azure云上仅需9小时和不到300美元的成本训练出一个OPT-13B模型,而一个OPT-30B模型则只需18小时和不到600美元。

  • 显著的可扩展性:DeepSpeed-HE支持训练达数百亿参数的模型,并在多节点多GPU设置中表现出色。例如,一个13B参数模型可以在1.25小时内完成训练,而一个巨型175B参数模型也能在不到一天的时间内被训练完毕。

  • 民主化的RLHF训练:即使是只拥有单个GPU的用户,DeepSpeed-HE也能训练超过130亿参数的模型,这让数据科学家有能力创建实用级别的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: 监督式微调(Supervised Finetuning)- 调整一个现成的语言模型(如OPT),以特定的任务和数据集进行更细致的训练。

  • 步骤2: 奖励模型微调(Reward Model Finetuning)- 训练一个评估机器人输出质量的奖励模型。

  • 步骤3: 基于强化学习的微调(RLHF Finetuning)- 结合前两个步骤的模型输出,通过强化学习方法进一步优化语言模型的行为。

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

  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)

  • Scriptrun_1.3b.sh

  • Model Size: 1.3 billion parameters

  • Purpose: 这个步骤使用一个大型的语言模型(1.3b参数规模)进行监督式学习。监督式学习通常意味着使用标注好的数据集来训练模型,使其学会从输入到输出的映射关系。在这一步,你可能在训练模型回答问题或进行对话等与语言处理相关的任务。

  • Output/root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/actor-models/1.3b


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

  • Scriptrun_350m.sh

  • Model Size: 350 million parameters

  • Purpose: 第二步专注于奖励模型的微调。奖励模型通常用于强化学习或其他对模型预测质量进行评分的场景,在聊天机器人的上下文中,可能用于评价回答的质量或相关性。这里使用的模型规模相对较小(350m参数),这可能是为了提高训练速度或因为这类模型不需要太大的复杂度就能有效工作。

  • Output/root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/reward-models/350m



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

  • Scriptrun_1.3b.sh

  • Model Size: 1.3 billion parameters

  • Purpose: 第三步是结合前两步的成果进行基于强化学习的微调(Reinforcement Learning from Human Feedback, RLHF)。这种方法旨在结合监督学习和强化学习的优点,使用奖励模型来指导大型语言模型(如1.3b参数模型)的进一步微调。通过这种方式,模型不仅学会语言的基础结构,还学会在特定情境下如何更好地回应,从而生成更符合人类期望的输出。

  • Inputs: 使用前两步生成的模型和数据作为输入。

  • Output/root/DeepSpeedExamples/applications/DeepSpeed-Chat/output/step3-models/1.3b


查看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. 训练进度:

  • epoch=0: 表示当前处于第0个训练周期。

  • micro_step=560: micro-batches的步数,表示到目前为止已经处理了560个小批量。

  • global_step=70: 全局步数,表示到目前为止已经完成了70次参数更新。

  • 性能指标:

    • RunningAvgSamplesPerSec=26.61111929020448: 表示当前每秒处理的样本数的运行平均值,大约为26.6个样本/秒。

    • CurrSamplesPerSec=26.734001691369528: 表示当前每秒处理的样本数,大约为26.7个样本/秒,与平均值相近,表明性能较为稳定。

    • MemAllocated=5.92GB: 表示当前已分配的内存量为5.92GB。

    • MaxMemAllocated=42.72GB: 表明到目前为止最大分配的内存量为42.72GB,这可能表明在训练过程中有内存分配峰值。


      第一个epoch结束后:

    • Model Parameters: 1.429 B, Latency: 0.16s, TFLOPs: 282.91, Samples/sec: 97.35, Time/seq 0.01s, Batch Size: 16, Sequence Length: 512

    • ***** Evaluating perplexity, Epoch 1/1 *****

    • ppl: 2.1494030952453613, loss: 0.7651901245117188

    • saving the final model ...

    • [2024-03-19 03:45:22,589] [INFO] [launch.py:348:main] Process 26295 exits successfully

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


    查看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 Loss: 0.0095367431640625 | Critic Loss: 0.0018329620361328125:Actor的损失函数值是0.0095,Critic的损失函数值是0.0018。

    • Average reward score: 3.0078125 | EMA reward score: 2.972019692554085:平均奖励分数是3.0078,指数移动平均奖励分数是2.9720



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

    • Actor:Actor模型的任务是选择行动。给定一个状态,Actor会输出一个行动或一组行动的概率分布。然后,根据这个输出,我们可以选择一个行动来执行。Actor的目标是找到一种策略,使得获得的总奖励最大。

    • Critic:Critic模型的任务是评估Actor选择的行动的好坏。给定一个状态和Actor选择的行动,Critic会输出一个值,表示这个行动的预期奖励。Critic的目标是尽可能准确地预测每个行动的价值。


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

    • Average reward score:这个数字表示模型在训练过程中平均得到的奖励。数字越大,表示模型的表现越好。

    • EMA reward score:这个数字也表示模型得到的奖励,但它更关注最近的结果。数字越大,表示模型最近的表现越好。


    接下来,针对刚才训练的模型进行推理,推理脚本使用: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|>


    53AI,企业落地应用大模型首选服务商

    产品:大模型应用平台+智能体定制开发+落地咨询服务

    承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

    联系我们

    售前咨询
    186 6662 7370
    预约演示
    185 8882 0121

    微信扫码

    与创始人交个朋友

    回到顶部

     
    扫码咨询