👆点击“博文视点Broadview”,获取更多书讯
--文末赠书--
在具体业务场景中落地大模型不仅需要算法和代码,还需要考虑预训练、微调、部署和服务质量。本文讲解如何在真实业务场景中高效地使用大模型。
大模型从开始构建到服务于某个产品通常需要经历预训练、微调、服务部署3个阶段,如图所示,与各种大模型推荐范式对应。
除了算法和软件,预训练模型还需要特定的硬件支持,目前主流的预训练大模型的硬件是英伟达的GPU系列。下面聚焦大模型推荐系统应用,从模型的训练(包括预训练和微调)、推理、服务部署和硬件选择4个维度展开说明。
从零开始预训练大模型,是非常具有挑战性的事情。由于预训练样本较多(很多模型需要上万亿个token),参数较多,通常需要非常多的计算资源和合适的框架来协助。一般来说,做基础大模型的公司才需要从零开始预训练大模型,而做中间层或者应用的公司可以对开源的大模型进行微调或者直接部署。
1. 高效训练的方法
针对高效训练大模型,目前有非常多的开源框架可供选择,这些框架都整合了一些加速训练的技术手段,本节主要介绍通过并行计算和优化内存来提升训练的吞吐率。
(1)并行计算。
并行计算是提升训练效率最有效的方法,通常采用多GPU并行的方式。具体的实现方式有数据并行、模型并行、状态并行等。我们在训练推荐模型时,可以根据模型大小、数据大小选择合适的并行方式,例如单个GPU、多个GPU或者多个服务器。另外,可以调整batch的大小, batch越大占用的资源越多。为了加快训练速度,还可以采取调整迭代次数(epochs)、提前终止等方法。
(2)优化内存。
大模型在训练过程中将数据加入内存,可以通过优化内存(或显存)使用的方法来提升训练的效率,下面介绍3种优化方法。
ZeRO
ZeRO的主要目的是优化大模型训练中的内存效率。通过跨GPU分配模型的优化器状态(Optimizer States)、跨GPU分配梯度和处理用于激活的模型并行性,减少用于存储这些数据的内存。
量化技术
量化技术使用低比特的数据格式来表示权重或激活函数值,通过这种方式缩减内存大小和计算时间,包含8bit、6bit、4bit、2bit等不同精度的量化方法。比特位数越少,模型占用空间越小,精度越低。我们可以根据计算机的配置和精度要求,选择下载不同精度的模型。
FlashAttention
FlashAttention 是为了解决Transformer在处理大量序列时所面临的内在挑战而设计的算法。这种算法是I/O敏感的,它优化了 GPU 内存层级之间的相互作用,利用平铺技术(Tiling)减少 GPU 的高带宽内存(HBM)与芯片上的静态随机存取内存(SRAM)之间的内存读/写操作,以提高注意力机制的效率。
2. 高效微调的方法
对大模型进行微调通常不是微调整个模型,而是微调模型部分参数,这种方法被称为参数有效的微调。一般有两个常用的方法,下面分别介绍。
LoRA与QLoRA
前面章节中的大部分模型采用LoRA进行微调。QLoRA是LoRA的量化版本,它将预训练的模型转换为特定的4位数据类型,从而大幅减少内存使用并提高计算效率,同时在量化过程中保持数据完整性。
提示词调优
提示词调优是一种新颖的技术,专门用于使冻结的语言模型适应特定的下游任务。具体而言,提示词调优强调通过反向传播学习“软提示”,允许使用标签示例对其进行微调。我们在推荐解释部分(见8.8.3节)的代码实现中采用了提示词调优技术。
高效训练的方法非常多,这里不做过多介绍。关于高效预训练、微调,以及在不同模型规模上的详细对比分析,你可以从参考文献[1]中获得更多信息。
3. 预训练与微调的框架
目前针对大模型进行预训练、微调的框架非常多,主流的框架包括ColossalAI、DeepSpeed、Megatron-LM、MLX等,这些在前面都有简单介绍,这里不再赘述。你可以参考它们的GitHub代码仓库和官网进行深入了解,并根据自己的资源情况和偏好选择使用。
模型推理是一个需求更大的使用场景,目前有很多创业公司聚焦于高效的大模型推理领域,例如Lepton AI、硅基流动等。
1. 高效推理的方法
目前主流的大模型采用与GPT类似的decode-only的架构,如图所示,提升解码的效率是高效推理的前提。
高效推理有非常多的技术方案,可以从算法层面、模型层面、系统层面等多种维度进行。以下是最常用的方法。
解码策略优化
GPT系列模型基于前面的token预测下一个token,这是一个自回归的过程,这个过程是顺序的,所以影响最终的解码速度。可行的解决方案有非自回归的方式或者推测解码(Speculative Decoding)策略。
非自回归是放宽预测下一个token的条件,假设预测下一个token与前面的token条件无关,这样就可以通过一定程度的并行化进行解码。推测解码是利用一个草稿(Draft)模型(更小的模型)来生成下一个token,再快速评估这个token是否正确。
架构优化
架构优化是对GPT的架构动手术,通过调整架构部分“组件”达到加速推理的效果。例如,MoE架构就是通过多个专家构建的统一的大模型,在预测时,只有部分专家被激活,从而提升推理的速度。
模型压缩
模型压缩最常用的手段是知识蒸馏,通过老师(Teacher)模型监督学生(Student)模型进行训练,将知识从较大的老师模型“传授”给学生模型。还有一个比较常用的方法是剪枝,例如剔除模型的部分层来减少参数,进而提升预测速度。
系统优化
前面提到的量化方法、并行化方法、内存优化方法都是这类方法。还有一些偏底层的方法超出了简单应用的范畴,这里不展开说明。
2. 高效推理的框架
前面提到的很多训练框架本身就具备推理能力,例如DeepSpeed、ColossalAI等,还有一些框架聚焦于推理方向,比较常见的有vllm、TG(Text-Generation-Inference)、LightLLM等。
针对MacBook,如果在开发环境中部署服务进行测试等,则可以选择MLX、llama.cpp等推理框架。
对于大模型推荐系统的应用,在预训练或微调好模型后,就需要进行高效的服务部署,以便为用户提供更好的服务。
上面提到的很多框架可以直接将大模型服务部署成Web服务,如果你想自己调整业务逻辑,则可以选择一些合适的Python Web框架,例如FastAPI、Tornado、Flask等。
如果利用大模型的上下文学习能力进行推荐,那么可以选择第三方的API服务或者将大模型部署成类似于ChatGPT的API服务,可以使用的框架有Ollama、FastChat、SGlang、Lepton AI等。
传统推荐系统的一些优化服务体验的技术方案也可以应用到大模型推荐系统中,例如预计算、缓存、部署多个等效的Web服务,再通过Nginx代理进行服务的水平扩容等。
对于大模型,训练和推理的硬件也是非常重要的。当预训练的大模型参数较多(例如超过30B)时,需要性能比较好的英伟达的GPU,例如A800、A100、H100等。对于参数更小的模型,可以采用英伟达的消费级显卡,例如RTX 4090、RTX4080等。国产的替代方案还不够成熟,华为昇腾910B是可行的选择。
对于大模型的微调和推理,相比于A800、A100、H100这些比较贵并且难买到的硬件,性价比更高的方式是使用英伟达的RTX 4090、RTX4080等消费级硬件。
MacBook用户可以选用M系列的芯片对大模型进行预训练和微调。如果处理比较大的模型(例如30B、70B等),M2 Ultra 192G、M3 Max 128G等是可行的选择。
由于推荐系统的数据量相对较小,即使是预训练和微调,目前也不需要特别大的模型,通常使用2B、7B、14B的模型就可以达到较好的效果,因此对硬件的要求没有常规的大模型高。
这是国内首本系统介绍大模型在推荐系统中应用的书籍,希望这本书能够为国内的技术普及和推广贡献一份力量,引发更多关于大模型技术在推荐系统领域的探索和应用。
限时优惠中,快快抢购吧!
互动有奖
按以下方式与博文菌互动,即有机会获赠图书!
活动方式:在评论区留言参与“关于大模型推荐系统,你还有哪些想要了解的”等话题互动,届时会在参与的小伙伴中抽取1名幸运鹅赠送图书盲盒一份!
说明:留言区收到回复“恭喜中奖”者将免费获赠本图书,中奖者请在收到通知的24小时内将您的“姓名+电话+快递地址”留言至原评论下方处即可,隐私信息不会被放出,未在规定时间内回复视作自动放弃兑奖资格。
活动时间:截至11月18日开奖。
快快拉上你的小伙伴参与进来吧~~
温馨提示:可以将“博文视点”设为星标,以免错过赠书活动哦!
发布:王功瑾
审核:陈歆懿
如果喜欢本文 欢迎 在看丨留言丨分享至朋友圈 三连 < PAST · 往期回顾 > 书单 | 10月新书速递!