如何把多个大模型合并部署以节省成本呢?本文将深入探讨这一技术与应用场景,利用多Lora合并部署大模型。
一.背景
近期,我们在大模型集群的部署过程中遇到了一些挑战。公司有多个业务场景,每个场景都基于自身的数据进行微调,训练出相应的大模型并上线。然而,这些场景的调用量并不高,同时大模型的部署成本较为昂贵,这造成了资源的浪费。
本文将介绍我们如何利用多Lora技术,将多个场景合并部署,从而有效解决这一问题。同时,我们也将探讨大模型训练与推理过程中Lora技术的应用。
二.Lora是什么
Lora的概念
如果你去网上搜索"Lora"这个关键字,你一定会搜到下面这篇论文。
这就是Lora这个词出处。这一概念是由著名人工智能研究员Edward J. Hu于2021年提出的。Lora完整名称是低秩自适应(Low-Rank Adaptation)。虽然这个名称比较复杂,但其核心概念却相对容易理解。
以GPT3为例,该模型拥有1750亿个参数。为了使大模型适应特定的业务场景,我们通常需要对其进行微调。如果对大模型进行全参数微调,因其参数数量庞大,成本将非常高。Lora技术的解决方案是,仅对不到2%的参数进行微调,其他参数则保持不变。相较于全参微调GPT-3(175B),Lora最多能够将训练参数的数量减少约10,000倍,GPU内存需求也减少三倍。
那么,Lora是如何冻结参数的呢?接下来,我们将展示Lora的经典原理图。
上图中,W 表示大模型的一个原始参数矩阵。Lora的思路是将矩阵 W 拆分为两个低秩矩阵 A 和 B。在训练过程中,仅对 A 和 B 的参数进行训练,这与训练整个 W 的参数相比,能显著减少所需的训练参数数量,从而降低训练成本。
如何开启大模型的Lora微调
虽然论文中Lora的原理较为复杂,但实际上开启大模型的Lora微调过程相对简单。许多算法框架都支持快速上手微调。以LLaMA-Factory这个微调大模型的框架为例,启用Lora微调只需配置以下参数:
接下来,执行训练命令即可启动Lora微调:
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
通过这个命令,LLaMA-Factory框架将读取配置文件,并开始进行Lora微调。整个过程相对简便,使得用户能够快速适应并利用Lora技术进行大模型微调。
Lora微调完成后,将生成一个只包含部分参数(即Lora参数)的文件,称为Lora Adapter。与整个大模型的所有参数相比,这个参数文件非常小。
三.如何基于Lora部署大模型
Lora参数合并
经过微调后,会生成一个Lora文件,里面仅包含部分参数。如何利用这个Lora文件来部署大模型呢?
我们之前提到,Lora参数实际上是将大模型的其余参数冻结后剩下的部分。Lora参数本身也是大模型参数的一部分,通常占比小于整体的2%。将微调后的Lora参数与大模型的原始参数合并后,就可以生成一个新的微调大模型,之后只需直接部署这个新模型即可。
合并的操作步骤也比较简单,以LLaMA-Factory这个大模型微调训练框架为例。
首先,完成如下配置:
接下来,执行命令
llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml
即可将参数合并成一个新的大模型。
如何部署合并后的大模型
合并后的大模型只有一些参数文件,若要进行部署,还需选择合适的推理引擎。目前推荐使用 VLLM 这个开源推理引擎,它得到了众多大厂模型的广泛支持。无论从性能还是易用性来看,VLLM 都非常出色。
VLLM最初由加州大学伯克利分校的一支三人博士团队发起,创始人开创性地提出了PageAttention这一概念。这一创新显著提高了大模型的吞吐量,提升幅度达到几十倍。PageAttention目前已成为各大推理引擎的必备技能。
如果想用VLLM来部署一个大模型,其步骤非常简单。首先,执行下面的命令安装VLLM:
pip install vllm
然后执行下面命令,即可启动服务。
vllm serve {模型文件地址}
这样的部署流程有什么问题?
首先,让我们回顾一下之前的训练和部署流程。
对于每个业务场景,我们首先通过微调训练生成一个Lora参数文件,然后将Lora参数文件与基础大模型合并,最后进行大模型的部署。这是一个经典的流程。
然而,如果业务场景众多且每个场景的流量较小,就需要部署多套大模型。以常见的7B大模型为例,至少需要一块22G显存的显卡才能运行,而14B模型需要两块22G显存的显卡,70B的大模型则需要更高的成本。这种情况可能导致GPU资源的浪费。
四.多Lora部署大模型又是什么
多Lora的技术原理是什么
在上述部署流程中,微调大模型后会生成一个Lora文件,该文件需要与基础大模型合并成一个新的大模型。然而,实际上,我们可以选择不合并Lora文件,而是直接在显存中加载原有的大模型参数和Lora参数,然后进行推理。这种方法同样是可行的。
参考上面的Lora原理图,W表示大模型的一个原始参数矩阵。Lora的思路是将矩阵W拆分为两个低秩矩阵A和B,并对这两个矩阵进行训练。训练结束后,我们可以选择将A和B矩阵与W矩阵合并,也可以不合并,而是分别使用W和A/B进行计算,然后再将计算结果进行合并,最终效果是一样的。
因此,我们的部署流程可以进行如下调整:业务方在进行Lora微调后生成一个Lora文件。接下来,我们在显存中加载基础大模型,同时也加载业务方的Lora文件,直接进行推理。如果有多个业务方参与,每个业务方都会产生一个Lora文件,于是这一部署流程可以推广至如下图所示。
每个业务场景都基于自己的业务数据训练一个Lora文件。在部署时,我们只需选择一个基础大模型,并在显存中同时加载多个Lora文件。这样,便可以使用一块显卡同时满足多个业务场景的需求。当用户发出请求时,要在请求中指定需要调用的Lora模型是哪个。
多Lora适应于什么场景
多Lora适用于以下场景:
-
业务场景多样化:当你的业务场景较多,并且每个场景都需要根据其特定数据进行微调生成一份自己的大模型。
-
调用量较小:如果每个业务场景的调用量相对较少,那么单独为每个场景部署一份大模型的成本将显得很高。
采用多Lora的方式来部署大模型可以有效解决这些问题。通过只加载一份基础大模型,同时在显存中加载多个较小的Lora文件,我们能够显著减少因重复部署带来的成本。这样,便可以为多个业务场景提供支持,同时保持资源的高效利用。
哪些推理框架支持多Lora
目前,支持多Lora的推理框架中,VLLM是一个推荐的选择。我们对VLLM的多Lora性能进行了压测,结果显示它在性能和易用性方面表现都非常不错。
如果你想使用VLLM来部署多Lora,只需执行以下命令即可:
vllm serve {你的模型地址} --enable-lora --lora-modules {lora1的地址} {lora2的地址}
这样,你就可以轻松地在VLLM中启用多Lora的功能。
多Lora的性能怎么样,有哪些限制
为了验证多Lora的性能,我们特意用Llama3-8b模型,L20GPU显卡进行了压测对比,数据如下:
可见,多Lora对推理的吞吐与速度的影响几乎可以忽略。
那么,多Lora在使用时有哪些限制呢?
-
共享基础大模型:所有希望一起部署的多个业务场景必须使用相同的基础大模型。这是因为在多Lora部署时,基础大模型只需加载一份,以支持多个Lora的推理。
-
Lora秩的限制:如果使用VLLM进行多Lora部署,微调训练时,Lora的秩R的值不要超过64。大多数情况下,这个条件都是可以满足的,但在特定场景中需要注意这一点。
因此,在进行多Lora部署之前,需确保满足上述要求,以保证系统的正常运行。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。