TGI Multi-LoRA:一次部署,服务 30 个模型

Hugging Face 在文本生成推理(TGI)中引入了 Multi-LoRA 服务,使得可以部署单个基础模型并动态提供多个专门微调的适配器。此方法消除了为每个特定任务模型维护单独部署的需求,显著降低了显存开销和运营成本。

专用模型的案例

对较小的专用模型进行微调通常在特定任务上比使用更大的通用模型表现更好。根据 Hugging Face 引用的研究,使用 Mistral-7B-v0.1 之类的基础模型的任务特定 LoRA 在某些任务上可以超越 GPT-4。

除了性能之外,专用模型还提供了多项组织优势:

  • 适应性: 单个基础模型(例如 Mistral 或 Llama)可用于构建众多针对不同下游任务的专用模型。
  • 独立性: 不同团队可以独立管理各自的数据准备、评估和更新节奏。
  • 隐私性: 专用模型能够更好地对训练数据进行分离,并根据隐私需求设置访问限制。

技术基础:低秩适配(LoRA)

LoRA(低秩适配)是一种参数高效的微调技术,可在不重新训练全部参数的情况下对大型预训练模型进行适配。它通过冻结原始权重,仅训练两个小矩阵(A 和 B)。

这些适配器相较于完整模型通常只增加约 1% 的存储和内存开销。例如,predibase/magicoder 适配器大小为 13.6MB,仅为 mistralai/Mistral-7B-v0.1 基础模型(14.48GB)大小的千分之一左右。将 30 个此类适配器加载到 RAM 中,仅会导致显存大约增加 3%。

Multi-LoRA 服务的工作原理

Multi-LoRA 服务使单个 TGI 部署能够根据传入请求动态选择相应的 LoRA 适配器。每个用户请求包含输入文本和特定的 adapter_id。TGI 使用该 ID 为该请求挑选正确的适配器,从而实现由同一基础模型服务的异构请求批次。

部署要求

  • TGI 版本: v2.1.1 或更高版本。
  • 基础模型: 兼容的基础模型(例如 mistralai/Mistral-7B-v0.1)。
  • 配置: 必须设置 LORA_ADAPTERS 环境变量,使用逗号分隔的适配器 ID 列表(例如 LORA_ADAPTERS=predibase/customer_support,predibase/magicoder)。

通过 API 使用

查询端点时,必须在请求参数中指定 adapter_id

示例 cURL 请求:

curl 127.0.0.1:3000/generate \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "inputs": "Hello who are you?",
  "parameters": {
    "max_new_tokens": 40,
    "adapter_id": "predibase/customer_support"
  }
}'

运营和成本影响

成本效率

Multi-LoRA 服务保持每个 token 的成本恒定,无论服务多少适配器,因为它避免了多个完整模型部署的需求。相比之下,为每个微调模型单独部署会导致成本随模型数量线性增长。

可扩展性和使用模式

将多个模型整合到单一部署中可稳定 GPU 利用率。虽然单个专用模型的使用模式可能波动或突发,但多个适配器的整体需求趋于平稳,从而实现更易管理的扩展和更高的 GPU 效率。

更新基础模型

由于 LoRA 训练成本相对低廉——Predibase 报告每个适配器的成本低至约 $8.00——组织可以在发布更新、更高效的版本(如 Mistral v0.3 或 Llama 3)时更新其基础模型。此过程需要维护版本化的数据集和训练配置,以便在新基础模型上快速重新训练适配器。

致谢

TGI 的 Multi-LoRA 实现利用了 Punica、LoRAX 和 S-LoRA 团队开发的优化内核和框架,以确保高效推理.

Sources