本文通过Llamafactory,通过QLoRA量化微调方法,微调Mistral和BlackMamba模型。通过本分可以分析模型整体和算子的计算瓶颈,时间分布,和利用率,对当前微调场景系统优化有全面的动机了解,了解模型当前架构,数据分布等。
前排提示,文末有大模型AGI-CSDN独家资料包哦!
(1)整体数据流拆解
以下为整体模型的算子和计算流程,以及放大一个解码层的算子数据流。
仅解码器Transformer设计用于处理输出生成仅依赖于前面标记的任务,这使得它特别适用于自回归任务,如语言建模和文本生成[9]。在经典的仅解码器Transformer设计中,多个解码器层按顺序连接。每个解码器层由一个自注意力模块和一个前馈网络(FFN)组成。图1展示了一个带有混合专家(MoE)设计的仅解码器Transformer模型概述。在这个模型中,FFN层被划分为几个较小的FFN,称为专家,这些专家通过门控机制稀疏激活。自注意力模块也可以被Mamba层替代,以提高序列建模的性能(这种模型被称为状态空间模型)。像GPT [10, 11]、LLaMA [3]、Claude [12]、Mistral [13]等大型语言模型(LLM)已经展示了它们在许多自然语言处理(NLP)任务中的卓越能力。从零开始训练一个LLM模型需要大量的硬件资源和预算。
以下图是拆解MoE部分的单个Expert的算子
为了具体了解提升MoE层性能的机会,作者还在MoE层内进行了一次内核级分析。图7展示了Mixtral和BlackMamba模型中MoE层的架构。在BlackMamba中,每个专家由一个标准的前馈神经网络(FFN)层组成,该层包含两个串联连接的权重矩阵(W1和W2),并且在它们之间有一个Gelu激活层。相比之下,Mixtral中的专家是具有Swish门控线性单元的FFN层,并且在W1并行的基础上,还包含一个额外的权重矩阵(W3)。
以下为针对每个Linear层拆解其数据流和量化部分,也就引出后续需要 Dequant的部分。
简单来说,QLoRA 是在基础模型中对线性层进行量化的 LoRA。适配器与 LoRA 相同,在 QLoRA 训练过程中保持更高的精度(BF16)。以上实例图为(不是本文使用的方案,只为说明使用),基础模型使用 NVIDIA 的 TensorRT-Model-Optimizer 提供的 NF4 数据类型进行量化。该数据格式使用 4.127 位来存储每个浮点值,而不是 16 或 32 位。
QLoRA 是带有量化预训练权重的 LoRA。
与 LoRA 相比,QLoRA:
-
提高了多达 60% 的内存效率,使得能够在较小或较少的 GPU 上进行大模型的微调,或者使用更高的批量大小。
-
能够实现相同的准确性,尽管需要不同的收敛策略。
-
比 LoRA 慢 50% 到 200%(后文中会分析breakdown中会看到,dequant有一定开销)。
(2)执行流程时间拆解分析
从高层次来看,微调工作负载可以分为三个阶段:(1)前向传播,(2)反向传播,以及(3)优化器阶段。我们使用批量大小为1和模型-数据集组合支持的最大批量大小来展示工作负载特征。图4展示了以下几点洞察:(1)在BlackMamba微调中,优化器阶段占据了相当大的一部分运行时间(当进行稀疏微调且批量大小为1时,最多达到53%),而在Mixtral微调中,优化器阶段的执行时间几乎可以忽略不计。优化器阶段的运行时间仅依赖于微调过程中需要更新的参数数量。这一差异主要是由于两种模型应用了不同的微调策略:Mixtral微调时仅更新LoRA模块中的参数,而BlackMamba则进行了全量微调。(2)由于计算量的增加,前向和反向阶段的运行时间随着稀疏度和批量大小的增加而增加。(3)反向传播阶段通常比前向传播阶段耗时更多。在BlackMamba中,反向传播阶段的计算量大于前向传播阶段,因为需要计算和传播梯度,这导致了两个矩阵乘法操作。而在Mixtral微调中,梯度计算增加的计算量较少,因为仅有一小部分参数需要计算梯度。然而,Mixtral中的梯度检查点节省了内存,但由于需要重新计算中间值,导致反向传播阶段的运行时间增加。
(3)运算符执行时间拆解分析
我们进一步基于两个LLM模型中的各个层对执行时间进行细分分析。对于Mixtral,这些层包括输入归一化、注意力、注意力后的归一化和MoE层。相比之下,BlackMamba包括Mamba层、均方根(RMS)层归一化和MoE层。如图5所示,MoE层是最耗时的,占总体执行时间的85%。MoE层的执行时间包括在微调过程中前向传播和反向传播的时间。因此,MoE层是最昂贵的层,也是优化LLM微调性能的关键目标。
图6展示了MoE层的内核级时间细分。图中清楚地显示,矩阵乘法(W1、W2 和 W3)是BlackMamba和Mixtral中MoE层的最大组成部分。随着批量大小和稀疏度的增加,计算需求也随之增加,从而延长了矩阵乘法的延迟。在Mixtral微调中,去量化操作也变得非常重要,尤其是在低稀疏度和小批量大小的情况下。虽然量化减少了模型大小和内存占用,但去量化可能会增加计算时间。这突显了在内存节省和计算时间之间评估权衡的必要性,特别是在小批量大小和序列长度的场景中。
(4)运算符利用率和带宽利用率分析:
计算资源利用率研究。图9展示了MoE层的GPU流处理器(SM)利用率的内核级细分。该利用率是按每个内核的执行时间加权计算的。我们使用了128的序列长度(§III)。序列长度会影响批量大小的选择,我们将在§IV-B6中讨论序列长度对运行时间、吞吐量、SM利用率和内存利用率的影响。对于密集微调,我们展示了批量大小为1以及适合内存的最大批量大小的SM利用率;对于稀疏微调,作者使用了密集微调的两种批量大小,以及适合内存的最大批量大小。
图9展示了MoE层中不同内核的SM利用率,提供了以下洞察:(1)对于稀疏和密集微调,随着批量大小的增加,SM利用率也会增加,因为并行性和GPU活动性更高。(2)在相同的批量大小下,稀疏微调的SM利用率低于密集微调,因为它仅激活了8个专家中的2个,减少了并行性。因此,稀疏微调支持更高的最大批量大小。在各自的峰值批量大小下,两者都实现了类似的最大SM利用率。(3)去量化内核在任何批量大小下都保持较高的SM利用率。(4)矩阵乘法内核随着批量大小的增大,能够利用GPU的并行处理能力,从而实现更高的SM利用率。
内存资源利用率研究。图10展示了GPU内存带宽利用率的内核级细分。作者使用与SM利用率评估相同的实验设置,并得出了以下洞察:(1)对于稀疏和密集微调,时间加权的内存利用率随着批量大小的增加而降低。这是因为模型参数只需加载一次,并由批次中的所有查询共享。然而,较大的批量会增加执行时间(如§IV-B6所讨论),导致平均内存带宽利用率降低。(2)在相同的批量大小下,稀疏微调的内存带宽利用率高于密集微调,因为稀疏微调的执行时间较短。(3)去量化层的内存利用率与批量大小无关,而矩阵乘法层的利用率随着批量大小的增大而减少。为了最大化GPU内存使用,应使用足够大的批量大小。随着批量大小的增大,微调变为计算绑定,表明未来硬件需要改进计算资源,以更好地利用内存带宽。
(5)补充负载分析
输入数据的序列长度分析
图2中展示了CS和MATH数据集的序列长度分布。CS数据集的中位数序列长度为79,MATH数据集的中位数序列长度为174。因此,在硬件评估部分,作者选择了128的序列长度,以实现一个近似的分析效果。作者还通过变化序列长度进行灵敏度研究,展示了序列长度对性能的影响。
(6)实验待分析部分:
本文虽然分析了一些Max Batch Size,但是缺乏对,Seqlen(Context Size),Batch Size和Model Parameter Size增长后,潜在的计算时间瓶颈和阶段的变化趋势,以及内存占用增长和占比分布的趋势变化,也就是时间上和空间上占比逐渐朝着哪部分增多,需要朝着那些部分进行进一步优化。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓