高效且具有成本效益的多租户 LoRA 服务与 Amazon SageMaker 机器学习博客
- 26
多租户 LoRA 服务的高效且经济的解决方案:Amazon SageMaker
关键要点
在快速发展的人工智能AI领域,生成式 AI 模型正引领个性化和智能体验的新纪元。为满足客户的特定需求,组织必须有效管理和提供多种微调模型。通过利用 Amazon SageMaker 的 LoRA低秩自适应技术,企业可以降低成本,提高性能,并为客户提供量身定制的服务。
在本篇文章中,我们将探讨如何利用 Amazon SageMaker 有效管理和提供不断增长的微调模型组合,同时优化成本并为客户提供流畅的性能。
在迅速发展的人工智能AI领域,生成式 AI 模型的崛起带来了个性化和智能体验的新纪元。组织越来越多地利用这些语言模型的强大能力来推动创新并提升服务质量,涵盖从自然语言处理到内容生成等多个领域。
然而,在企业环境中使用生成式 AI 模型需要有效驯服其内在能力,并提升其应对特定客户需求的技能。当现成模型无法获取特定领域或组织的术语知识时,定制的微调模型,即领域特定的大型语言模型LLM,可能是一个在该领域或微领域执行标准任务的选项。
一个例子是BloombergGPT,这是一个从头开始训练的大型语言模型,旨在更好地理解金融领域中特有的专业术语。以同样的方式,领域特异性问题可以通过小规模微调得到解决。客户针对多个领域的生成式 AI 模型进行微调,包括金融、销售、市场营销、旅行、IT、人力资源、采购、医疗保健、生命科学、客户服务等。此外,独立软件供应商ISVs正在构建安全的、管理良好的、多租户的端到端生成式 AI 平台,模型根据客户的数据集和领域进行定制和个性化。例如,Forethought 推出了SupportGPT,这是一个用于客户支持的生成式 AI 平台。
随着对个性化和专业化 AI 解决方案需求的增加,企业常常面临高效管理和服务大量微调模型的挑战,这些模型来自不同的用例和客户细分。他们需要服务于从简历解析和工作技能匹配到领域特定的电子邮件生成和自然语言理解等广泛的 AI 驱动用例,因此不得不管理数百个微调模型,每个模型针对特定客户需求或用例。这个挑战的复杂性由于涉及到部署和维护如此多样化模型生态系统的固有可扩展性和成本效益问题而加重。
传统的模型服务方法可能迅速变得麻烦且资源密集,导致基础设施成本、操作开销和潜在性能瓶颈增加。
微调大型语言模型所需的硬件和不同任务的独立实例的存储及切换成本是 prohibitively 高的。LoRA低秩适应是一种高效的适应策略,它在不引入推理延迟或降低输入序列长度的情况下保留高模型质量。重要的是,它允许在作为服务部署时快速任务切换,因为它共享绝大部分模型参数。
在本篇文章中,我们探讨了一种解决方案,直接应对这些挑战,运用 LoRA 在Amazon SageMaker进行服务。通过在SageMaker大型模型推理LMI容器及推理组件中使用LoRA技术的新性能优化,我们展示了组织如何高效管理和服务不断增长的微调模型组合,同时优化成本,提供无缝的性能。
最新的SageMaker LMI容器提供未合并的LoRA推理,并借助我们的LMIDist推理引擎和OpenAI风格的聊天架构加快速度。要了解更多关于LMI的内容,请参考LMI入门指南、LMI处理程序推理API架构和聊天完成功能API架构。
大规模在 SageMaker 上服务 LoRA 适配器的新 LMI 特性
可以在各种引擎上应用两种类型的 LoRA:
类型描述合并 LoRA在原基础模型中直接应用适配器,在运行时没有附加延迟,但应用或撤销合并会有一定成本。适合适配器数量不多的情况,不支持多适配器批处理。未合并 LoRA改变模型操作以考虑适配器,但不改变基础模型。由于额外的适配器操作,其推理延迟较高,但支持多适配器批处理。适合适配器数量较多的使用案例。新的 LMI 容器提供了与 SageMaker 的开箱即用的集成和抽象,支持高性能低延迟和高吞吐量托管多个未合并 LoRA 适配器,利用 vLLM 后端 LMIDist,该后端采用了vLLM,进而使用SLORA和Punica。LMI 容器提供两种后端来服务 LoRA 适配器:LMIDist 后端推荐和 vLLM 后端。两个后端均基于开放源代码 vLLM 库服务 LoRA 适配器,但 LMIDist 后端提供了额外优化的连续滚动批处理实现。您无需单独配置这些库;LMI 容器通过 vLLM 和 LMIDist 后端提供更高级别的抽象。我们建议您选择 LMIDist 后端,因为它在持续滚动批处理方面具有额外的性能优化。

SLoRA 将所有适配器存储在主内存中,并将当前运行查询使用的适配器提取到 GPU 内存中。为了高效使用 GPU 内存并减少碎片化,SLoRA 提出了统一分页思路。统一分页使用统一内存池管理不同秩和不同序列长度的动态适配器权重与 KV 缓存张量。此外,SLoRA 采用了一种新颖的张量并行策略和高性能定制 CUDA 内核,用于 LoRA 计算的异构批处理。结合这些特性,SLoRA 可以在单个 GPU 或多个 GPU 上提供数千个 LoRA 适配器。
Punica 旨在在共享 GPU 集群上高效服务多个 LoRA 模型。它通过以下三个设计原则实现这一目标:
合并多租户 LoRA 服务工作负载到少数 GPU,以提高整体 GPU 利用率。为不同 LoRA 模型启用批处理,以提高性能和 GPU 利用率。专注于解码阶段性能,这是模型服务成本的主要因素。Punica 使用一个名为分段收集矩阵向量乘法SGMV的新CUDA内核设计,为多个LoRA模型的并发运行批量GPU操作,显著提高GPU内存和计算的效率。Punica 还实现了一个调度程序,将请求路由到活跃的 GPU,并针对合并优化请求,从而优化 GPU 资源的分配。总体而言,Punica 在共享 GPU 集群上实现了高吞吐量和低延迟的多租户 LoRA 模型服务。有关详细信息,请阅读 Punica 的白皮书。
下面的图展示了 SageMaker 上 LMI 容器的多 LoRA 适配器服务堆栈。
如上图所示,LMI 容器通过 vLLM 和 LMIDist 后端提供高层次的抽象,以规模化服务 LoRA 适配器。因此,您无需单独配置基础库SLORA、Punica 或 vLLM。但是,可能存在您想要根据用例和应用性能需求控制某些性能驱动参数的情况。以下是 LMI 容器提供的调优 LoRA 服务的常见配置选项。有关每个后端特定的配置选项的更多详细信息,请参阅vLLM引擎用户手册和LMIDist引擎用户手册。
plaintextoptionenablelora 此配置启用对 LoRA 适配器的支持。optionmaxloras 此配置确定可以同时运行的最大 LoRA 适配器数量。为这些适配器分配 GPU 内存。optionmaxlorarank 此配置确定 LoRA 适配器允许的最大秩。根据适配器的最大秩设置该值。设置更大值会启用更多适配器,但会增加内存使用。optionloraextravocabsize 此配置确定通过 LoRA 适配器可以添加的最大额外词汇量。optionmaxcpuloras 此配置确定要缓存到内存中的最大 LoRA 适配器数量。其他适配器将被驱逐到磁盘。
大规模微调 LLM 的服务设计模式
面对管理生成式 AI 模型的复杂性,企业常常会遇到需要健壮且灵活设计模式的场景。其中一个常见用例涉及单个基础模型与多个 LoRA 适配器,每个适配器针对特定客户需求或用例。这种方法允许组织利用基础语言模型,同时保持微调和部署定制版本的灵活性,以服务他们多样化的客户群体。
单基础模型与多个微调 LoRA 适配器
提供简历解析和工作技能匹配服务的企业,可能使用单个高性能基础模型,如 Mistral 7B。Mistral 7B基础模型特别适合生成有关工作相关内容的任务,例如创建个性化的职位描述和定制的电子邮件通信。Mistral 在自然语言生成方面的强大表现以及捕捉行业特定术语和写作风格的能力,使其成为人力资源和招聘领域客户的宝贵资产。通过使用 LoRA 适配器对 Mistral 7B 进行微调,企业可以确保生成的内容符合每位客户独特的品牌、语气及要求,提供高度个性化的体验。
多基础模型与多个微调 LoRA 适配器
另一方面,同一企业可能会使用 Llama 3 基础模型进行更通用的自然语言处理任务,例如简历解析、技能提取和候选人匹配。Llama 3 的广泛知识基础和强健的语言理解能力使其能够处理多种文档和格式,确保其服务能够有效处理和分析候选人信息,无论信息来源如何。通过用 LoRA 适配器微调 Llama 3,企业可以根据特定客户需求定制模型性能,例如地区方言、行业特定术语或独特数据格式。采用多基础模型及多适配器设计模式,企业可以利用每个语言模型的独特优势,为候选人简历匹配服务提供全面和高度个性化的工作描述。这种方法使企业能够满足客户的多样化需求,确保每位客户获得量身定制的 AI 驱动解决方案,提升其招聘和人才管理过程。
有效实施和管理这些设计模式,尤其是在多个基础模型与众多 LoRA 适配器组合的情况下,是企业必须解决的关键挑战,以充分挖掘生成式 AI 投资的潜力。设计精良且可扩展的模型服务方案对于为客户提供具有成本效益的高性能个性化体验至关重要。
解决方案概述
以下部分概述了在 SageMaker 上部署基础 LLM TheBloke/Llama27BChatfp16 和 LoRA 适配器的编码步骤。这个过程包括准备压缩档案,包含基础模型文件和 LoRA 适配器文件,上传到Amazon S3,选择和配置 SageMaker LMI 容器以启用 LoRA 支持,创建 SageMaker 端点配置和端点,为模型定义推理组件,并发送推理请求,通过请求有效负载指定不同的 LoRA 适配器,如西班牙语“es”和法语“fr”,以使用这些微调的语言能力。有关使用 SageMaker 推理组件部署模型的详细信息,请参阅Amazon SageMaker 新增推理功能以帮助减少基础模型部署成本和延迟。
为了展示多基础模型及其 LoRA 适配器,我们将在同一 SageMaker 端点上添加另一个基础模型mistralai/Mistral7Bv01及其 LoRA 适配器,如下图所示。
前提条件
在运行笔记本之前,您需要完成以下前提条件:
拥有一个 Hugging Face 用户访问令牌,并获得访问mistralai/Mistral7Bv01模型的授权。拥有一个 SageMaker 配额,用于一个 mlg512xlarge 实例的端点使用。将您的 LoRA 适配器上传至 Amazon S3
要准备 LoRA 适配器,请创建一个包含 LoRA 适配器目录的 adapterstargz 压缩档案。适配器目录应包含每个 LoRA 适配器的子目录,每个适配器子目录包含 adaptermodelbin 文件适配器权重和 adapterconfigjson 文件适配器配置。通常,通过使用 Peft 库中的 PeftModelsavepretrained() 方法获得这些适配器文件。在为适配器准备好目录并包含适配器文件后,将其压缩为 adapterstargz 归档,并上传到 S3 存储桶以供部署或共享。我们按如下方式包含 LoRA 适配器:
pixiv加速器免费安卓plaintext modeldir adapters/ ltadapter1gt/ ltadapter2gt/ ltadapterngt/
下载 LoRA 适配器,压缩它们,并将压缩文件上传到 Amazon S3:
pythonsnapshotdownload(UnderstandLing/llama27bchates localdir=llamaloramultiadapter/adapters/es localdirusesymlinks=False)snapshotdownload(UnderstandLing/llama27bchatfr localdir=llamaloramultiadapter/adapters/fr localdirusesymlinks=False)snapshotdownload(UnderstandLing/llama27bchatru localdir=llamaloramultiadapter/adapters/ru localdirusesymlinks=False)!tar czvf adapterstargz C llamaloramultiadapter s3codeartifactaccelerate = sessuploaddata(adapterstargz modelbucket s3codeprefix)
选择 LMI 容器并配置 LMI 以启用 LoRA
SageMaker 提供用于 LMI 的优化容器,这些容器支持不同框架的模型并行性,允许跨多个 GPU 部署 LLM。对于本篇文章,我们使用 DeepSpeed 容器,其中