Appearance
Low-Rank Adaptation,通过在冻结的预训练权重旁插入低秩矩阵来实现高效微调的参数高效方法。
为什么需要 LoRA
全量微调大模型需要更新所有参数,成本高昂且为每个任务保存完整模型副本不现实。LoRA 冻结原始权重 W,仅训练两个低秩矩阵 A(降维)和 B(升维),使可训练参数从 O(d^2) 降至 O(rd)(r << d)。在推理时,可将 BA 合并回 W 实现 zero inference overhead,也可保持分离以动态切换多个 LoRA adapter。
核心原理
- 低秩分解:原始投影 h = Wx 变为 h = Wx + BAx,其中 B 属于 R^{d x r},A 属于 R^{r x d},r 通常为 8-64。
- 多头支持:对 QKV 投影和 output 投影可分别插入 LoRA,灵活选择应用层。
- Multi-LoRA:vLLM 支持同一 batch 内不同请求使用不同 LoRA adapter,通过动态权重切换实现。
- 合并与非合并:静态部署时将 LoRA 权重合并到基础权重;动态服务时保持分离,按请求加载。
在源码中的实现
vllm/lora/layers.py—LinearWithLoRA、ColumnParallelLinearWithLoRA等 LoRA 包装层。vllm/lora/models.py—LoRAModel管理 adapter 的加载、合并与切换。vllm/lora/worker_manager.py— Worker 级别的 LoRA 生命周期管理。vllm/lora/request.py—LoRARequest封装请求级别的 adapter 选择。vllm/config.py—LoRAConfig定义 max_lora_rank、max_loras 等限制参数。
相关概念
- tensor-parallelism — LoRA 层需与 TP 的并行线性层兼容
- cuda-graph — Multi-LoRA 场景下 CUDA Graph capture 需处理动态权重
- paged-attention — LoRA 与 PagedAttention 可独立使用
- flash-attention — LoRA 修改 QKV 投影,下游的 FlashAttention 无需改动