S-LoRA: Serving Thousands of Concurrent LoRA Adapters
作者: Ying Sheng, Shiyi Cao, Dacheng Li, Coleman Hooper, Nicholas Lee, Shuo Yang, Christopher Chou, Banghua Zhu, Lianmin Zheng, Kurt Keutzer, Joseph E. Gonzalez, Ion Stoica
分类: cs.LG, cs.AI, cs.DC
发布日期: 2023-11-06 (更新: 2024-06-05)
🔗 代码/项目: GITHUB
💡 一句话要点
提出S-LoRA以解决大规模LoRA适配器服务问题
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 低秩适配 大规模模型 GPU优化 内存管理 张量并行 批量推理 深度学习 微调服务
📋 核心要点
- 现有的LoRA适配器服务方法在处理大量适配器时存在性能瓶颈,难以实现高效的批量推理。
- S-LoRA通过将适配器存储在主内存并动态加载到GPU内存中,结合统一分页和张量并行策略,优化了LoRA适配器的服务效率。
- 实验结果表明,S-LoRA的吞吐量比现有方法提高了4倍,能够同时服务数千个LoRA适配器,显著提升了系统的可扩展性。
📝 摘要(中文)
在大语言模型的部署中,通常采用“预训练-微调”范式。低秩适配(LoRA)是一种参数高效的微调方法,能够将基础模型适配到多种任务中,导致大量LoRA适配器的产生。本文提出S-LoRA,一个旨在可扩展服务多个LoRA适配器的系统。S-LoRA将所有适配器存储在主内存中,并将当前运行查询所需的适配器提取到GPU内存中。为高效利用GPU内存并减少碎片,S-LoRA提出了统一分页(Unified Paging)策略。此外,S-LoRA还采用了一种新颖的张量并行策略和高度优化的自定义CUDA内核,以实现LoRA计算的异构批处理。通过这些特性,S-LoRA能够在单个或多个GPU上服务数千个LoRA适配器,且开销极小。与现有的HuggingFace PEFT和vLLM等库相比,S-LoRA的吞吐量提高了最多4倍,服务的适配器数量也增加了几个数量级。
🔬 方法详解
问题定义:本文旨在解决在大规模部署中,现有LoRA适配器服务方法在处理大量适配器时的性能瓶颈和内存管理问题。现有方法往往无法高效支持批量推理,导致资源浪费和响应时间延迟。
核心思路:S-LoRA的核心思路是将所有LoRA适配器存储在主内存中,并根据当前查询动态加载所需适配器到GPU内存中,结合统一分页策略以优化内存使用。这样设计能够有效减少GPU内存碎片,提高适配器的加载和服务效率。
技术框架:S-LoRA的整体架构包括适配器存储模块、统一分页管理模块和张量并行计算模块。适配器存储模块负责管理所有LoRA适配器,统一分页管理模块优化内存使用,而张量并行计算模块则实现高效的LoRA计算。
关键创新:S-LoRA的主要创新在于统一分页策略和张量并行计算的结合,使得在服务大量LoRA适配器时能够显著提高吞吐量和降低延迟。这一设计与现有方法的静态适配器加载方式形成鲜明对比。
关键设计:在实现中,S-LoRA采用了动态内存池管理不同秩的适配器权重和不同序列长度的KV缓存张量,确保了内存的高效利用。此外,使用高度优化的自定义CUDA内核来支持异构批处理,进一步提升了计算效率。
🖼️ 关键图片
📊 实验亮点
实验结果显示,S-LoRA在吞吐量上比现有的HuggingFace PEFT和vLLM库提高了最多4倍,同时能够服务的LoRA适配器数量增加了几个数量级。这表明S-LoRA在处理大规模适配器服务方面具有显著优势,能够有效提升系统性能。
🎯 应用场景
S-LoRA的研究成果在多个领域具有广泛的应用潜力,尤其是在需要大规模定制化微调服务的场景中,如自然语言处理、对话系统和推荐系统等。通过高效服务多个任务特定模型,S-LoRA能够为企业和研究机构提供灵活的模型部署解决方案,推动智能应用的发展。
📄 摘要(原文)
The "pretrain-then-finetune" paradigm is commonly adopted in the deployment of large language models. Low-Rank Adaptation (LoRA), a parameter-efficient fine-tuning method, is often employed to adapt a base model to a multitude of tasks, resulting in a substantial collection of LoRA adapters derived from one base model. We observe that this paradigm presents significant opportunities for batched inference during serving. To capitalize on these opportunities, we present S-LoRA, a system designed for the scalable serving of many LoRA adapters. S-LoRA stores all adapters in the main memory and fetches the adapters used by the currently running queries to the GPU memory. To efficiently use the GPU memory and reduce fragmentation, S-LoRA proposes Unified Paging. Unified Paging uses a unified memory pool to manage dynamic adapter weights with different ranks and KV cache tensors with varying sequence lengths. Additionally, S-LoRA employs a novel tensor parallelism strategy and highly optimized custom CUDA kernels for heterogeneous batching of LoRA computation. Collectively, these features enable S-LoRA to serve thousands of LoRA adapters on a single GPU or across multiple GPUs with a small overhead. Compared to state-of-the-art libraries such as HuggingFace PEFT and vLLM (with naive support of LoRA serving), S-LoRA can improve the throughput by up to 4 times and increase the number of served adapters by several orders of magnitude. As a result, S-LoRA enables scalable serving of many task-specific fine-tuned models and offers the potential for large-scale customized fine-tuning services. The code is available at https://github.com/S-LoRA/S-LoRA