1.背景
近期,GPT大模型的发布给自然语言处理(NLP)领域带来了令人震撼的体验。随着这一事件的发生,一系列开源大模型也迅速崛起。依据一些评估机构的评估,这些开源模型大模型的表现也相当不错。一些大模型的评测情况可以去这里查询:Huggingface的Open LLM排行榜,UC伯克利发布大语言模型排行榜等。
随着大模型的发展,大模型的训练与部署技术变的非常重要了。我们调研了LORA与QLORA等微调训练技术,以及GPTQ量化部署技术。在跑通最小Demo并验证效果后,把这些技术集成到KubeAI平台(得物AI平台),提供给大家去快速上手。
本篇主要分为技术理论与技术实战两个部分去讲解。
技术理论主要讲解微调训练与量化推理的理论部分,微调训练包括LoRA,QLoRA, 部署包括GPTQ量化推理等,并针对关键代码进行走读,针对部署进行性能测试。
技术实战部分我们把这些技术集成到KubeAI平台上,供大家可以快速上手实战。依据前面同学的反馈情况,大约一天内可以完成大模型训练并部署推理上线。
2.LoRA与QLoRA训练技术
2.1 LoRA技术介绍
LoRA,英文全称 Low-Rank Adaptation of Large Language Models(中文为大语言模型的低阶适应)。
这是微软的研究人员为了解决大语言模型微调而开发的一项技术,
其 github 地址为 https://github.com/microsoft/LoRA ,
当前已经得到HuggingFace 的 PEFT库 https://github.com/huggingface/peft 的支持。
对于大语音模型来说,其参数量非常多。GPT3有1750亿参数,而且LLAMA系列模型包括 7B,13B,33B,65B,而其中最小的7B都有70亿参数。要让这些模型去适应特定的业务场景,需要对他们进行微调。如果直接对这些模型进行微调,由于参数量巨大,需要的GPU成本就会非常高。LoRA就是用来解决对这些大语言模型进行低成本微调的技术。
LoRA的做法是对这些预训练好的大模型参数进行冻结,也就是在微调训练的时候,这些模型的参数设置为不可训练。然后往模型中加入额外的网络层,并只训练这些新增的网络层参数。这样可训练的参数就会变的非常少,可以以低成本的GPU微调大语言模型。
参照 https://arxiv.org/abs/2106.09685
LoRA在Transformer架构的每一层注入可训练的秩分解矩阵,与使用Adam微调的GPT-3 175B相比,LoRA可以将可训练参数数量减少10000倍,GPU内存需求减少3倍,并且在效果上相比于传统微调技术表现的相当或更好。
下面以Transformer的线性层为例,讲解下LoRA具体是如何操作的。
在Transformer模型中的线性层,通常进行矩阵乘法操作,如Y = XW,其中X是输入矩阵,W是权重矩阵,也是模型训练求解的参数。
对于LoRA方法在Transformer的线性层中的操作步骤:
在每个线性层旁边增加一个"旁路",由降维矩阵A和升维矩阵B构成。低秩分解在这里发挥作用,例如我们有一个100x100的矩阵C,我们可以通过低秩分解将其分解为A和B(假设秩设置为1)