大模型推荐系统如何高效预训练和推理
在具体业务场景中落地大模型不仅需要算法和代码,还需要考虑预训练、微调、部署和服务质量。本文讲解如何在真实业务场景中高效地使用大模型。
大模型从开始构建到服务于某个产品通常需要经历预训练、微调、服务部署 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 的模型就可以达到较好的效果,因此对硬件的要求没有常规的大模型高。
这是国内首本系统介绍大模型在推荐系统中应用的书籍,希望这本书能够为国内的技术普及和推广贡献一份力量,引发更多关于大模型技术在推荐系统领域的探索和应用。
↑限时优惠中↑
评论