文章

Multi-LoRA Serving:一套 Base Model 如何服务上千个定制模型

本文系统拆解 Multi-LoRA Serving 的生产工程价值,从 LoRA adapter、共享 base model、动态加载、GPU 缓存、异构 rank、请求路由、租户隔离到 SLO 监控,帮助团队用更低成本部署大规模定制化 LLM 服务。

为什么 Multi-LoRA Serving 值得单独设计

企业落地 LLM 时,经常会遇到同一个矛盾:通用 base model 能覆盖大部分语言能力,但不同客户、行业、任务又需要专门适配。比如客服话术、SQL 生成、保险条款解释、代码风格、法律摘要、医疗问答,每个场景都可能需要不同的微调版本。

最直接的做法是为每个场景部署一个完整模型。但这会快速拉高显存、实例数量、冷启动时间和运维成本。Multi-LoRA Serving 的思路是:只部署一份共享 base model,把每个定制能力做成轻量 LoRA adapter。请求进来时,服务根据租户、任务或模型名选择对应 adapter,再把 adapter delta 应用到 base model 推理中。

这样,一个推理集群就可以服务大量定制模型,而不必为每个定制模型复制完整权重。

一句话理解 Multi-LoRA Serving

LoRA 的核心是冻结原始权重,只训练低秩矩阵。推理时,模型输出相当于:

Base Weight + LoRA Delta

Multi-LoRA Serving 则把这个思想扩展到在线服务:

One Base Model + Many LoRA Adapters + Per-request Adapter Routing + Adapter Cache Management + Multi-tenant Isolation

它解决的不是训练问题,而是服务问题:当有几十、几百甚至上千个 adapter 时,如何低成本、低延迟、安全地把它们跑起来。

核心知识结构

可以把 Multi-LoRA Serving 拆成 6 个模块。

1. Base Model

Base model 是共享的大模型权重。它通常占据主要 GPU 显存,是所有 adapter 复用的基础。

如果没有共享 base model,每个定制模型都要加载完整权重,显存成本会随 adapter 数量线性增长。

2. LoRA Adapter

LoRA adapter 是每个任务或租户的低秩增量参数。它通常远小于完整模型权重,因此适合存放在 CPU 内存、磁盘、对象存储或专门的 adapter registry 中。

3. Adapter Routing

请求必须明确路由到哪个 adapter。路由依据可以是模型名、租户 ID、任务类型、用户权限、AB 实验或业务策略。

4. Adapter Cache

GPU 不可能无限容纳所有 adapter。生产系统需要 adapter cache,把高频 adapter 留在 GPU,把冷门 adapter 放在 CPU 或远程存储,并在需要时加载。

5. Heterogeneous Batching

不同请求可能使用不同 adapter。如何把它们放进同一个 batch,同时避免 kernel 开销和 rank 差异拖慢整体,是 Multi-LoRA Serving 的核心性能问题。

6. Tenant Isolation

多租户 LoRA 服务必须保证 adapter、数据、日志、权限和缓存隔离。一个租户不能误用另一个租户的 adapter,也不能通过错误路由访问别人的定制能力。

为什么“支持 LoRA”不等于“支持生产 Multi-LoRA”

很多推理框架都支持加载 LoRA adapter,但生产环境需要回答更细的问题。

问题影响
adapter 从哪里来?来源可信与供应链安全
adapter 是否可信?权重完整性校验
adapter 什么时候加载到 GPU?TTFT 延迟
adapter 满了怎么淘汰?缓存命中率
不同 rank 的 adapter 能否一起 batch?吞吐与尾延迟
某个租户流量突然升高怎么办?公平性与隔离
adapter 更新后如何灰度与回滚?发布安全
一次请求如何证明用的是正确 adapter?审计与合规

如果这些问题没有明确设计,系统可能在 Demo 中可用,但在真实多租户流量下出现 TTFT 抖动、GPU 利用率下降、显存碎片、adapter 错配或安全风险。

典型执行流程

一个生产级 Multi-LoRA 请求流程可以这样设计:

  1. 请求进入模型网关
  2. 解析 tenant_idtask_typemodel_nameadapter_alias
  3. Adapter registry 校验 adapter 是否存在、可用、已发布
  4. 权限系统确认该租户是否允许使用该 adapter
  5. GPU adapter cache 检查 adapter 是否已经加载
  6. 如果未加载,从 CPU 内存或可信存储加载到 GPU
  7. Scheduler 尝试把相同或兼容 adapter 的请求合批
  8. Base model 执行推理,并叠加对应 LoRA delta
  9. 输出结果并记录 adapter_idversionlatencycache_hit
  10. Eviction policy 按热度、租户、SLO 或显存压力淘汰冷 adapter

这里最重要的是第 3、4、5、7、10 步。它们决定系统是否安全、低延迟、可扩展。

Adapter Registry:不要把 adapter 当普通文件

生产环境中,LoRA adapter 不应只是某个目录里的权重文件。它应该被纳入 registry 管理。

建议记录这些字段:

adapter:
  adapter_id: sql_spider_v3
  base_model: llama-3.1-8b
  tenant_id: shared
  task_type: text_to_sql
  version: 3
  rank: 16
  status: production
  checksum: sha256:...
  storage_uri: approved-adapter-store/sql_spider_v3
  created_at: 2026-06-25T18:01:46-04:00
  allowed_scopes:
    - text_to_sql
  rollout:
    traffic_percent: 100

这样可以解决 4 个问题:

  • 确认 adapter 是否匹配当前 base model。
  • 确认 adapter 来源是否可信。
  • 支持灰度、回滚和版本追踪。
  • 在审计中证明某次请求用了哪个 adapter。

Adapter Cache:真正影响 TTFT 的地方

Multi-LoRA Serving 的一个关键指标是 adapter cache hit rate。

如果 adapter 已经在 GPU 上,请求可以直接推理。如果 adapter 不在 GPU 上,就需要从 CPU、磁盘或远程存储加载。这会增加首 token 延迟,并可能造成排队。

常见缓存策略包括:

策略说明
LRU淘汰最近最少使用的 adapter
LFU保留高频 adapter
Tenant quota每个租户限制 GPU adapter 占用
SLO-aware高优先级 adapter 更不容易被淘汰
Warmup预加载即将使用的 adapter
Pinning核心 adapter 常驻 GPU

生产系统不能只看整体吞吐,还要单独监控:

metrics:
  adapter_cache_hit_rate: 0.91
  adapter_load_latency_ms_p95: 120
  adapter_eviction_count_per_min: 37
  gpu_adapter_memory_gb: 12.4
  ttft_ms_with_cache_hit_p95: 280
  ttft_ms_with_cache_miss_p95: 870

如果 cache miss 的 TTFT 明显偏高,就需要优化预加载、缓存容量、adapter 热度预测或路由策略。

Heterogeneous Rank:被低估的性能风险

LoRA adapter 的 rank 决定低秩矩阵大小。rank 越高,表达能力可能越强,但计算和显存开销也更高。

生产环境中,不同团队可能训练出不同 rank 的 adapter:

customer_a: rank 8
customer_b: rank 16
customer_c: rank 64

如果调度器不区分这些差异,rank 很高的 adapter 可能拖慢整个 batch,导致尾延迟上升。LoRAServe 这类研究关注的正是这种异构 adapter 在分布式推理系统中的 placement 和 routing 问题。

工程上建议:

  • 为 adapter rank 设置上限和准入规则。
  • 在 registry 中记录 rank 与显存估算。
  • Scheduler 感知 rank,避免高 rank 请求拖慢低 rank 请求。
  • 对高 rank adapter 单独设置 SLO 或隔离资源池。
  • 将 rank、TTFT、TPOT、吞吐关联分析。

安全问题:动态加载 adapter 不能无校验

动态加载是 Multi-LoRA 的核心能力,但也是攻击面。

不安全的设计是:请求里带一个 adapter 名称,服务端就从远程位置下载并加载。这样可能引入未验证权重、供应链污染、租户越权和资源滥用。

更稳的做法是:

  • 只允许从可信 adapter registry 加载
  • adapter 文件必须有 checksum 或签名
  • adapter 必须声明匹配的 base model
  • adapter 上线前必须通过离线评测
  • 动态远程下载默认禁用或需要审批
  • 租户只能访问授权 adapter
  • adapter 更新必须记录版本和审计日志

尤其在多租户场景中,adapter 本身就是能力边界。错误加载不仅影响质量,也可能造成数据隔离和业务权限问题。

灰度与回滚:adapter 也是发布物

LoRA adapter 更新不应直接覆盖旧版本。一个新的 adapter 可能提高某些样本表现,也可能破坏原有任务格式、风格或事实准确率。

推荐发布流程:

  1. 新 adapter 进入 staging
  2. 离线评测:准确率、格式、工具调用、拒答、安全样本
  3. 小流量灰度:1% → 10% → 50% → 100%
  4. 对比旧 adapter:质量、TTFT、TPOT、成本、投诉率
  5. 发现异常立即回滚到旧版本

请求日志必须记录:

{
  "request_id": "req_001",
  "base_model": "llama-3.1-8b",
  "adapter_id": "sql_spider",
  "adapter_version": 3,
  "adapter_rank": 16,
  "cache_hit": true,
  "tenant_id": "customer_a",
  "ttft_ms": 310,
  "tpot_ms": 42
}

没有这些 trace,adapter 问题很难排查。

评估指标:从“能跑”到“可运营”

Multi-LoRA Serving 至少要看 8 类指标。

1. Adapter Cache Hit Rate

衡量 adapter 是否经常命中 GPU 缓存。命中率低会直接拉高 TTFT。

2. Adapter Load Latency

衡量从 CPU、磁盘或对象存储加载 adapter 的耗时。

3. TTFT / TPOT

分别观察首 token 延迟和生成阶段 token 延迟。Multi-LoRA 的 cache miss 主要影响 TTFT,高 rank 可能影响 TPOT。

4. Throughput per Adapter

不能只看全局吞吐。高频 adapter、低频 adapter、高 rank adapter 的表现应拆开看。

5. Eviction Rate

频繁淘汰说明 GPU adapter cache 压力过大,或者调度和预加载策略不合理。

6. Rank Skew Impact

分析不同 rank 对 batch latency 和 GPU 利用率的影响。

7. Tenant Isolation Error

记录是否存在 adapter 越权、租户错配、日志串租户等问题。

8. Quality Regression

每个 adapter 都要有独立评测集,不能只测试 base model。

生产落地 Checklist

上线前建议检查:

  • 是否只有一份共享 base model,避免重复加载完整模型。
  • 是否建立 adapter registry,而不是直接读文件目录。
  • 是否记录 adapter_idversionrankbase_modelchecksum 和状态。
  • 是否验证 adapter 与 base model 兼容。
  • 是否有 GPU adapter cache 和明确 eviction policy。
  • 是否监控 adapter cache hit rate 与 cache miss TTFT。
  • Scheduler 是否感知 adapter rank 和租户优先级。
  • 是否对高频 adapter 做预热或 pinning。
  • 是否禁止未验证远程 adapter 动态加载。
  • 是否有租户级权限控制和访问审计。
  • 是否为每个 adapter 建立独立质量评测集。
  • 是否支持 adapter 灰度、回滚和快速下线。

结论

Multi-LoRA Serving 的本质,是把“模型定制”从完整模型复制,变成共享 base model 上的轻量能力切换。

  • Base model 负责通用能力
  • LoRA adapter 负责任务定制
  • Adapter registry 负责版本和权限
  • GPU cache 负责低延迟加载
  • Scheduler 负责合批和异构 rank
  • Metrics 证明系统是否满足 SLO

对工程团队来说,最重要的原则是:不要把 Multi-LoRA 当成简单的 adapter 加载功能,而要把它当成多租户模型服务平台来设计。

只有当 adapter 来源可信、路由明确、缓存可观测、rank 可控、租户隔离和灰度回滚完整时,Multi-LoRA 才能真正从“便宜微调”走向“可运营的大规模定制模型服务”。

常见问题

Multi-LoRA Serving 和部署多个完整模型有什么区别?
Multi-LoRA Serving 只保留一份共享 base model,再按请求加载不同 LoRA adapter;部署多个完整模型则需要为每个定制模型分别加载完整权重,显存和运维成本更高。
Multi-LoRA Serving 的主要瓶颈是什么?
主要瓶颈包括 adapter 加载延迟、GPU 显存缓存命中率、不同 adapter rank 带来的性能倾斜、请求合批效率、租户隔离和 SLO 尾延迟。
生产环境是否可以动态从远程下载 LoRA adapter?
可以设计动态加载机制,但生产环境必须做来源校验、签名验证、权限控制和缓存隔离,不能让未验证的远程 adapter 直接进入推理服务。