在2024年,许多大型语言模型(LLM)已经达到了数千亿个参数。为了运行这些模型,您需要使用大型的 GPU。以 BLOOM-176 或 OPT-175 为例,您可能需要大约 3 个 Nvidia A100,每个的成本约为 15,000 美元。2023 年 3 月,一篇论文介绍了 Petals,一种协作推理框架(即:处理实际用户请求的框架)。研究结果表明,采用该框架后,整体费用可以显著降低。接下来,我们将首先探讨分布式训练的基本原理,然后介绍大型模型的推理,最后解释 Petals 如何优化这一过程,并总结系统的限制。
分布式训练
分布式机器学习是训练超大规模模型(如 TB 级别数据集)时不可或缺的技术。简而言之,分布式训练指的是将模型训练任务分配到多个实例上,而不是单纯依赖单个实例进行训练。这些实例可以承载一个或多个 GPU,数据也被拆分到不同的实例中,每个实例根据自己的数据部分进行训练。然后,所有生成的部分模型会合并起来,形成最终的模型。这种方法可以显著缩短训练时间,使得训练大型模型成为可能。
一些主流的分布式训练框架,如 Hivemind、Horovod 和 BigDL,专为此目的设计。这些工具能够突破传统单实例硬件的限制,提升训练效率。同时,分布式训练模式也能在一定程度上保护数据隐私,比如使用“教师集合的私有聚合”(PATE)等隐私保护技术。
推理阶段
模型的训练和微调完成后,接下来就是模型的推理阶段。然而,这个过程并不简单。
通常,推理的工作流程如下:
- 可选:迁移学习:您可以通过迁移学习将模型“稀释”成一个新的模型,从而显著减少参数量,但这可能会影响模型的准确性。
- 可选:量化模型:通过将 4 字节浮点数替换为 1 字节整数(int8)或 2 字节整数(int16),可以减小模型的存储需求。虽然这种量化可以有效减少内存占用,但是否采用量化依赖于模型的性质(例如,三角函数不适合量化)。
- 模型部署:部署一个 API 或 Triton 服务器,用于接收模型的输入数据和查询请求。
- 实例部署:将模型加载到具体实例中,并确保其适合该实例的 RAM 或 VRAM。举例来说,BLOOM 模型需要 352GB 的内存来运行。
- 内存不足时的应对:如果内存不足,您需要将模型拆分成更小的部分,可能是按层次拆分,并将它们动态加载到 RAM 或 SSD 上,这会带来一定的性能损失。
- 扩展资源池:由于您的模型需求极大,因此需要通过增加配备 GPU 的实例池来进行水平扩展,以应对高流量。这就涉及到容器化、编排和负载平衡等技术。
即便是已经过优化的数十亿参数的模型(这也是大语言模型的趋势),每个实例仍然需要处理整个模型的推理,导致成本非常高。某些消息来源称,像 ChatGPT 这样的系统每天的运行成本可能达到 70 万美元。
分布式推理的崛起
2023 年 3 月,BigScience 团队在 arXiv 上发布了一篇论文,介绍了一种新的概念:Petals。
简而言之,Petals 是一种协议,旨在通过将大量异构实例(带有 GPU 的实例)连接起来,共享大型语言模型的推理任务。这种方法能够有效减少每个实例的负载,从而降低硬件成本并提高推理效率。
Petals 的工作原理
Petals 的设计目标是通过分布式推理,实现在多个机器和 GPU 上协作处理推理任务,而不是依赖单一的昂贵实例。通过这种方式,多个实例可以共同完成一个大型模型的推理任务,而每个实例只需要承担一小部分计算,从而使得整体成本和资源需求大大降低。
在 Petals 系统中,推理任务被动态地分配到不同的实例上,根据每个实例的资源状况调整负载。系统的核心优势在于其灵活性和扩展性,可以根据需求灵活增加或减少参与推理的实例数量。
结论
分布式机器学习和分布式推理的结合为我们提供了有效处理大型模型的解决方案。尤其是像 Petals 这样的框架,可以通过共享推理负载来显著降低成本并提高效率。然而,这种方法也带来了一些技术挑战,尤其是在确保数据隐私和系统稳定性方面。
总之,随着技术的不断进步,分布式推理将成为运行大型语言模型的重要手段,帮助研究人员和企业降低成本、提高效率。