<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LoRA | 林子杨的个人网站</title><link>https://ziyanglin.netlify.app/zh/tags/lora/</link><atom:link href="https://ziyanglin.netlify.app/zh/tags/lora/index.xml" rel="self" type="application/rss+xml"/><description>LoRA</description><generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh-Hans</language><lastBuildDate>Thu, 26 Jun 2025 00:00:00 +0000</lastBuildDate><image><url>https://ziyanglin.netlify.app/img/icon-192.png</url><title>LoRA</title><link>https://ziyanglin.netlify.app/zh/tags/lora/</link></image><item><title>LoRA 技术详解：深入浅出理解与实战</title><link>https://ziyanglin.netlify.app/zh/post/lora-documentation/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>https://ziyanglin.netlify.app/zh/post/lora-documentation/</guid><description>&lt;h2 id="1--lora">1. 引言：为什么需要 LoRA？&lt;/h2>
&lt;p>在大型语言模型（LLM）和生成式 AI 飞速发展的今天，我们见证了模型规模的爆炸式增长，从数亿到数万亿参数不等。这些庞大的模型在各种任务上都展现出了惊人的能力。然而，一个巨大的挑战随之而来：如何针对特定的下游任务对这些模型进行微调？&lt;/p>
&lt;p>传统的**全量微调（Full Fine-Tuning）**方法，即更新模型的所有参数，面临着严峻的问题：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>计算成本高昂&lt;/strong>：微调一个数十亿参数的模型需要巨大的计算资源和数百 GB 的显存，这对于大多数开发者和中小型企业来说是难以承受的。&lt;/li>
&lt;li>&lt;strong>存储成本巨大&lt;/strong>：每针对一个任务微调一次，就需要保存一份完整的模型副本，导致存储成本急剧上升。&lt;/li>
&lt;li>&lt;strong>部署困难&lt;/strong>：在生产环境中，为不同任务维护和切换多个庞大的模型副本是一场噩梦。&lt;/li>
&lt;/ul>
&lt;p>为了解决这些痛点，**参数高效微调（Parameter-Efficient Fine-Tuning, PEFT）**技术应运而生。其核心思想是在微调过程中冻结大部分预训练模型的参数，只调整一小部分（通常远小于总参数的 1%）新增的或特定的参数。&lt;/p>
&lt;p>在众多 PEFT 技术中，**LoRA（Low-Rank Adaptation of Large Language Models）**以其出色的效果、高效的性能和实现的简洁性脱颖而出，成为目前最主流、应用最广泛的方案之一。本篇文档将深入浅出地介绍 LoRA 的核心原理，并提供详细的实战指南。&lt;/p>
&lt;h2 id="2-lora-">2. 核心原理：LoRA 的魔法&lt;/h2>
&lt;p>LoRA 的核心假设是：&lt;strong>大型语言模型在适应新任务时，其权重的变化是低秩的（low-rank）&lt;/strong>。换句话说，尽管预训练模型的权重矩阵 &lt;code>W&lt;/code> 非常庞大（例如 &lt;code>d x d&lt;/code> 维），但在微调过程中，权重的改变量 &lt;code>ΔW&lt;/code> 具有一个很低的&amp;quot;内在秩&amp;rdquo;。&lt;/p>
&lt;p>基于这个假设，LoRA 不直接更新 &lt;code>W&lt;/code>，而是通过训练两个更小的、低秩的矩阵 &lt;code>B&lt;/code> 和 &lt;code>A&lt;/code> 来近似 &lt;code>ΔW&lt;/code>，即 &lt;code>ΔW ≈ BA&lt;/code>。&lt;/p>
&lt;ul>
&lt;li>&lt;code>W&lt;/code> 是预训练好的、被冻结的权重矩阵。&lt;/li>
&lt;li>&lt;code>A&lt;/code> 是一个 &lt;code>r x d&lt;/code> 维的矩阵，其中 &lt;code>r&lt;/code> 是一个远小于 &lt;code>d&lt;/code> 的秩（rank）。&lt;/li>
&lt;li>&lt;code>B&lt;/code> 是一个 &lt;code>d x r&lt;/code> 维的矩阵。&lt;/li>
&lt;/ul>
&lt;p>在微调过程中，只有矩阵 &lt;code>A&lt;/code> 和 &lt;code>B&lt;/code> 的参数是可训练的。前向传播的计算过程也相应地变为：&lt;/p>
&lt;p>&lt;code>h = Wx + BAx&lt;/code>&lt;/p>
&lt;p>下面是一个图示，更直观地展示了这个过程：&lt;/p>
&lt;pre>&lt;code class="language-mermaid">graph TD
A[输入 x] --&amp;gt; B(预训练权重 W);
A --&amp;gt; C(低秩矩阵 A);
C --&amp;gt; D(低秩矩阵 B);
B --&amp;gt; E[Wx];
D --&amp;gt; F[BAx];
E --&amp;gt; G((求和));
F --&amp;gt; G;
G --&amp;gt; H[最终输出 h];
style B fill:#eee,stroke:#333,stroke-width:2px,stroke-dasharray: 5, 5
style C fill:#9cf,stroke:#333,stroke-width:2px
style D fill:#9cf,stroke:#333,stroke-width:2px
&lt;/code>&lt;/pre>
&lt;p>其中 &lt;code>x&lt;/code> 是输入，&lt;code>h&lt;/code> 是输出。这种方式极大地减少了需要训练的参数数量。例如，如果 &lt;code>d = 4096&lt;/code>，&lt;code>r = 8&lt;/code>，那么原始矩阵 &lt;code>W&lt;/code> 有 &lt;code>4096 * 4096 ≈ 16.7M&lt;/code> 个参数，而 &lt;code>A&lt;/code> 和 &lt;code>B&lt;/code> 加起来只有 &lt;code>4096 * 8 + 8 * 4096 ≈ 65K&lt;/code> 个参数，参数量减少了约 256 倍！&lt;/p>
&lt;p>&lt;strong>关键参数 &lt;code>r&lt;/code>&lt;/strong>：秩 &lt;code>r&lt;/code> 是 LoRA 中最重要的超参数。它控制了低秩矩阵的大小，直接决定了新增参数的数量。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>较小的 &lt;code>r&lt;/code>&lt;/strong>：可训练参数少，训练速度快，显存占用低，但可能无法充分学习到任务的复杂特征。&lt;/li>
&lt;li>&lt;strong>较大的 &lt;code>r&lt;/code>&lt;/strong>：可训练参数多，模型拟合能力更强，但会增加计算成本和过拟合的风险。
在实践中，&lt;code>r&lt;/code> 通常被设置为 8, 16, 32 或 64，就能在性能和效率之间取得很好的平衡。&lt;/li>
&lt;/ul>
&lt;h2 id="3-lora-">3. LoRA 的显著优势&lt;/h2>
&lt;p>相比于全量微调，LoRA 展现出多方面的压倒性优势：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>极高的参数效率&lt;/strong>：如上所述，LoRA 只需训练极少量的参数。我们可以通过 &lt;code>print_trainable_parameters()&lt;/code> 函数直观地看到这一点，训练的参数占比通常低于 1%。&lt;/li>
&lt;li>&lt;strong>更快的训练速度&lt;/strong>：由于需要计算梯度和更新的参数数量大幅减少，训练时间也随之缩短，从而加速了迭代周期。&lt;/li>
&lt;li>&lt;strong>更低的硬件门槛&lt;/strong>：LoRA 显著减少了训练过程中的显存（VRAM）占用，使得在消费级 GPU（如 RTX 3090/4090）上微调拥有数百亿参数的大模型成为可能。&lt;/li>
&lt;li>&lt;strong>部署和管理的灵活性&lt;/strong>：这是 LoRA 最具吸引力的优点之一。预训练模型始终保持不变，可以被所有任务共享。对于每个下游任务，我们只需要保存一个轻量级（通常只有几 MB 到几十 MB）的 LoRA 适配器（即矩阵 A 和 B 的权重）。在部署时，可以根据需求动态加载对应的适配器，极大地简化了多任务场景下的模型管理和切换。&lt;/li>
&lt;/ol>
&lt;h2 id="4-lora-">4. 动手实践：LoRA 训练方法&lt;/h2>
&lt;p>下面，我们将通过一个完整的例子，展示如何使用 Hugging Face 生态中的 &lt;code>transformers&lt;/code>、&lt;code>peft&lt;/code> 和 &lt;code>trl&lt;/code> 库来对一个大模型进行 LoRA 微调。&lt;/p>
&lt;h3 id="-1-">步骤 1: 环境准备&lt;/h3>
&lt;p>首先，确保你已经安装了必要的 Python 库：&lt;/p>
&lt;pre>&lt;code class="language-bash">pip install transformers peft trl datasets torch
&lt;/code>&lt;/pre>
&lt;h3 id="-2-">步骤 2: 加载模型、分词器和数据集&lt;/h3>
&lt;p>我们选择一个预训练模型作为基础，并加载相应的分词器。同时，我们从 Hugging Face Hub 加载一个用于微调的数据集。&lt;/p>
&lt;pre>&lt;code class="language-python">from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from datasets import load_dataset
# 模型 ID，可以是任何支持的 Causal LM
model_id = &amp;quot;facebook/opt-350m&amp;quot;
# 加载预训练模型
model = AutoModelForCausalLM.from_pretrained(model_id)
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 加载数据集（以英文名言数据集为例）
dataset = load_dataset(&amp;quot;Abirate/english_quotes&amp;quot;, split=&amp;quot;train&amp;quot;)
&lt;/code>&lt;/pre>
&lt;h3 id="-3--lora-loraconfig">步骤 3: 配置 LoRA (&lt;code>LoraConfig&lt;/code>)&lt;/h3>
&lt;p>这是 LoRA 微调的核心步骤。我们需要创建一个 &lt;code>LoraConfig&lt;/code> 对象，来定义 LoRA 适配器的行为。&lt;/p>
&lt;pre>&lt;code class="language-python">from peft import LoraConfig
lora_config = LoraConfig(
r=16, # 低秩矩阵的秩，推荐值为 8, 16, 32
lora_alpha=32, # 缩放因子，通常设置为 r 的两倍
target_modules=[&amp;quot;q_proj&amp;quot;, &amp;quot;v_proj&amp;quot;], # 指定要应用 LoRA 的模型层。对于 Transformer 模型，通常是 q_proj 和 v_proj
lora_dropout=0.05, # LoRA 层的 dropout 概率
bias=&amp;quot;none&amp;quot;, # 是否训练偏置项，&amp;quot;none&amp;quot; 表示不训练
task_type=&amp;quot;CAUSAL_LM&amp;quot; # 任务类型，这里是因果语言模型
)
&lt;/code>&lt;/pre>
&lt;ul>
&lt;li>&lt;code>target_modules&lt;/code>: 这个参数非常关键。它告诉 PEFT 库应该在模型的哪些模块（通常是 &lt;code>nn.Linear&lt;/code> 层）上应用 LoRA。对于大多数 Transformer 模型，将其应用于 Attention 机制中的查询（query）和值（value）投影层（即 &lt;code>q_proj&lt;/code> 和 &lt;code>v_proj&lt;/code>）是常见的做法。你可以通过打印 &lt;code>model&lt;/code> 对象来查看其所有模块的名称，以确定可以作为目标的选择。&lt;/li>
&lt;/ul>
&lt;h3 id="-4--lora--sfttrainer-">步骤 4: 应用 LoRA 并使用 &lt;code>SFTTrainer&lt;/code> 进行训练&lt;/h3>
&lt;p>&lt;code>trl&lt;/code> 库提供的 &lt;code>SFTTrainer&lt;/code> (Supervised Fine-tuning Trainer) 极大地简化了微调流程。它内置了对 &lt;code>peft&lt;/code> 的支持，我们只需将模型、分词器、数据集和 &lt;code>peft_config&lt;/code> 传递给它即可。&lt;/p>
&lt;pre>&lt;code class="language-python">from trl import SFTTrainer
# 定义训练参数
training_args = TrainingArguments(
output_dir=&amp;quot;./lora_finetuned_model&amp;quot;, # 模型输出目录
num_train_epochs=3, # 训练轮次
per_device_train_batch_size=4, # 每个设备的训练批量大小
logging_dir='./logs', # 日志目录
logging_steps=50, # 每隔多少步记录一次日志
learning_rate=2e-4, # 学习率
)
# 初始化 SFTTrainer
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
args=training_args,
train_dataset=dataset,
peft_config=lora_config, # 传入 LoRA 配置
dataset_text_field=&amp;quot;quote&amp;quot;, # 数据集中包含文本的字段名
)
# 开始训练
trainer.train()
# 保存训练好的 LoRA 适配器
trainer.save_model()
&lt;/code>&lt;/pre>
&lt;p>训练完成后，&lt;code>output_dir&lt;/code> 目录下会生成一个 &lt;code>adapter_model.bin&lt;/code> 文件和 &lt;code>adapter_config.json&lt;/code> 文件，这就是我们训练得到的轻量级 LoRA 适配器。&lt;/p>
&lt;h3 id="-5--lora-">步骤 5: 使用训练好的 LoRA 适配器进行推理&lt;/h3>
&lt;p>在推理时，我们首先加载原始的预训练模型，然后加载训练好的 LoRA 适配器权重。&lt;/p>
&lt;pre>&lt;code class="language-python">from peft import PeftModel
# 加载原始的、未经微调的模型
base_model = AutoModelForCausalLM.from_pretrained(model_id)
# 加载 LoRA 适配器
model_with_lora = PeftModel.from_pretrained(base_model, &amp;quot;./lora_finetuned_model&amp;quot;)
# 现在 model_with_lora 就是一个融合了 LoRA 权重的、可以用于推理的模型
prompt = &amp;quot;The best way to predict the future is to&amp;quot;
inputs = tokenizer(prompt, return_tensors=&amp;quot;pt&amp;quot;)
# 生成文本
outputs = model_with_lora.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
&lt;/code>&lt;/pre>
&lt;h2 id="5-lora-">5. LoRA 模型部署：从静态到动态&lt;/h2>
&lt;p>训练完成后，如何高效地将 LoRA 模型投入生产环境是关键的下一步。LoRA 的部署策略主要分为两大类：&lt;strong>权重合并（静态部署）&lt;/strong> 和 &lt;strong>动态适配器加载（动态部署）&lt;/strong>。下面的流程图分别展示了这两种路径：&lt;/p>
&lt;p>&lt;strong>方案一：权重合并 (静态部署)&lt;/strong>&lt;/p>
&lt;pre>&lt;code class="language-mermaid">graph TD
A[LoRA 训练完成] --&amp;gt; B[Base Model + LoRA Adapter];
B --&amp;gt; C[&amp;quot;调用 merge_and_unload()&amp;quot;];
C --&amp;gt; D[生成独立的全量模型];
D --&amp;gt; E[标准部署];
style D fill:#c9f,stroke:#333,stroke-width:2px
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>方案二：动态适配器加载 (动态部署)&lt;/strong>&lt;/p>
&lt;pre>&lt;code class="language-mermaid">graph TD
A[LoRA 训练完成] --&amp;gt; B[vLLM / TGI 服务器];
B --&amp;gt; C[加载 Base Model];
C --&amp;gt; D[加载多个 LoRA Adapters];
D --&amp;gt; E[按需组合推理];
style E fill:#9cf,stroke:#333,stroke-width:2px
&lt;/code>&lt;/pre>
&lt;h3 id="-">方案一：权重合并与标准部署 (静态)&lt;/h3>
&lt;p>这是最简单直接的部署方式。其核心思想是将轻量级的 LoRA 适配器权重合并到原始的基础模型权重中，生成一个全新的、独立的全量模型。&lt;/p>
&lt;p>&lt;strong>操作方法&lt;/strong>:
使用 &lt;code>peft&lt;/code> 库的 &lt;code>merge_and_unload()&lt;/code> 方法可以轻松完成这个过程。&lt;/p>
&lt;pre>&lt;code class="language-python">from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
# 假设 model_id 和 lora_path 已定义
base_model = AutoModelForCausalLM.from_pretrained(model_id)
model_with_lora = PeftModel.from_pretrained(base_model, &amp;quot;./lora_finetuned_model&amp;quot;)
# 合并权重
merged_model = model_with_lora.merge_and_unload()
# 现在 merged_model 就是一个标准的 Transformers 模型
# 你可以像保存任何其他模型一样保存它
merged_model.save_pretrained(&amp;quot;./merged_lora_model&amp;quot;)
tokenizer.save_pretrained(&amp;quot;./merged_lora_model&amp;quot;)
&lt;/code>&lt;/pre>
&lt;p>之后，你可以像加载任何普通 Hugging Face 模型一样加载并使用这个 &lt;code>merged_lora_model&lt;/code>。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>优点&lt;/strong>:
&lt;ul>
&lt;li>&lt;strong>零推理延迟&lt;/strong>: 合并后，推理过程与标准模型完全相同，没有任何额外的计算开销。&lt;/li>
&lt;li>&lt;strong>部署简单&lt;/strong>: 无需任何额外的推理框架支持，可直接用于 &lt;code>transformers&lt;/code> 等标准库。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>缺点&lt;/strong>:
&lt;ul>
&lt;li>&lt;strong>失去灵活性&lt;/strong>: 每有一个 LoRA 适配器，就需要保存和加载一个完整的模型副本，违背了 LoRA 轻量化的初衷。&lt;/li>
&lt;li>&lt;strong>存储成本高&lt;/strong>: 如果有多个适配器，存储开销巨大。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="-vllm--">方案二：使用 vLLM 进行高性能动态部署 (推荐)&lt;/h3>
&lt;p>对于需要同时服务多个 LoRA 适配器的场景，&lt;strong>vLLM&lt;/strong> 是目前业界领先的高性能推理和服务引擎。它通过 &lt;strong>PagedAttention&lt;/strong> 等核心技术，实现了对多个 LoRA 适配器的高效管理和动态加载，能够在不显著牺牲性能的前提下，实现极高的吞吐量。&lt;/p>
&lt;p>&lt;strong>操作方法&lt;/strong>:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>安装 vLLM&lt;/strong>:&lt;/p>
&lt;pre>&lt;code class="language-bash">pip install vllm
&lt;/code>&lt;/pre>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>启动 vLLM 服务器&lt;/strong>:
使用 &lt;code>vllm serve&lt;/code> 命令启动一个 OpenAI 兼容的 API 服务器。关键在于使用 &lt;code>--enable-lora&lt;/code> 开启 LoRA 支持，并可以通过 &lt;code>--lora-modules&lt;/code> 预加载适配器。&lt;/p>
&lt;pre>&lt;code class="language-bash"># lora_path 指向你训练好的适配器目录
vllm serve meta-llama/Llama-2-7b-hf \
--enable-lora \
--lora-modules my_sql_lora=/path/to/your/sql_lora_adapter
&lt;/code>&lt;/pre>
&lt;p>这里，我们将名为 &lt;code>my_sql_lora&lt;/code> 的适配器预加载了进来。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>发送推理请求&lt;/strong>:
你可以通过 &lt;code>curl&lt;/code> 或任何 HTTP 客户端向 vLLM 服务器发送请求。只需在请求体中指定 &lt;code>model&lt;/code> 为你加载的 LoRA 适配器名称即可。&lt;/p>
&lt;pre>&lt;code class="language-bash">curl http://localhost:8000/v1/completions \
-H &amp;quot;Content-Type: application/json&amp;quot; \
-d '{
&amp;quot;model&amp;quot;: &amp;quot;my_sql_lora&amp;quot;,
&amp;quot;prompt&amp;quot;: &amp;quot;Write a SQL query for all users.&amp;quot;,
&amp;quot;max_tokens&amp;quot;: 64
}'
&lt;/code>&lt;/pre>
&lt;p>vLLM 会自动将请求路由到对应的 LoRA 适配器进行推理。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>使用 Python 客户端&lt;/strong>:
vLLM 也提供了 Python API，可以在代码中直接调用。&lt;/p>
&lt;pre>&lt;code class="language-python">from vllm import LLM, SamplingParams
from vllm.lora.request import LoRARequest
# 初始化 LLM 引擎，并开启 LoRA 支持
llm = LLM(model=&amp;quot;meta-llama/Llama-2-7b-hf&amp;quot;, enable_lora=True)
sampling_params = SamplingParams(max_tokens=64)
# 在 generate 调用中，通过 lora_request 指定要使用的适配器
outputs = llm.generate(
&amp;quot;Write a SQL query for all users.&amp;quot;,
sampling_params,
lora_request=LoRARequest(&amp;quot;my_sql_lora&amp;quot;, 1, &amp;quot;/path/to/your/sql_lora_adapter&amp;quot;)
)
&lt;/code>&lt;/pre>
&lt;ul>
&lt;li>&lt;strong>优点&lt;/strong>:
&lt;ul>
&lt;li>&lt;strong>极高吞吐量&lt;/strong>: 专为大规模并发推理设计。&lt;/li>
&lt;li>&lt;strong>动态灵活&lt;/strong>: 可同时服务成百上千个 LoRA 适配器，按需加载，完美支持多租户场景。&lt;/li>
&lt;li>&lt;strong>显存高效&lt;/strong>: PagedAttention 机制有效管理显存，避免浪费。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>缺点&lt;/strong>:
&lt;ul>
&lt;li>&lt;strong>部署稍复杂&lt;/strong>: 需要额外学习和配置 vLLM 服务。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="--tgi">方案三：其他动态部署方案 (如 TGI)&lt;/h3>
&lt;p>Hugging Face 自家的 &lt;strong>Text Generation Inference (TGI)&lt;/strong> 是另一个强大的生产级推理服务器。与 vLLM 类似，TGI 也支持在启动时加载多个 LoRA 适配器，并根据传入的请求头动态应用。它与 Hugging Face 生态系统集成得最好，是 vLLM 的一个有力竞争者。&lt;/p>
&lt;h3 id="heading">部署方案对比总结&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th align="left">特性&lt;/th>
&lt;th align="left">权重合并 (静态)&lt;/th>
&lt;th align="left">vLLM (动态)&lt;/th>
&lt;th align="left">TGI (动态)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td align="left">&lt;strong>性能/吞吐量&lt;/strong>&lt;/td>
&lt;td align="left">最高（单请求延迟最低）&lt;/td>
&lt;td align="left">非常高&lt;/td>
&lt;td align="left">高&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>灵活性&lt;/strong>&lt;/td>
&lt;td align="left">低（无动态能力）&lt;/td>
&lt;td align="left">非常高&lt;/td>
&lt;td align="left">高&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>部署复杂度&lt;/strong>&lt;/td>
&lt;td align="left">低&lt;/td>
&lt;td align="left">中等&lt;/td>
&lt;td align="left">中等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>显存占用&lt;/strong>&lt;/td>
&lt;td align="left">非常高（N个适配器N倍显存）&lt;/td>
&lt;td align="left">低（高效共享）&lt;/td>
&lt;td align="left">低（高效共享）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>适用场景&lt;/strong>&lt;/td>
&lt;td align="left">单一、固定的任务&lt;/td>
&lt;td align="left">多租户、高并发、多任务场景&lt;/td>
&lt;td align="left">Hugging Face 生态的生产部署&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="6-">6. 高级话题&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>多适配器管理&lt;/strong>：PEFT 支持在单个模型上动态添加、切换和禁用多个适配器，使用 &lt;code>model.add_adapter()&lt;/code> 和 &lt;code>model.set_adapter()&lt;/code> 等方法，这为构建灵活的多任务系统提供了极大的便利。&lt;/li>
&lt;/ul>
&lt;h2 id="7-">7. 总结&lt;/h2>
&lt;p>LoRA 作为一种革命性的参数高效微调技术，成功地解决了大模型时代微调成本高昂的难题。它通过巧妙的低秩分解思想，在保证微调效果的同时，极大地降低了对计算资源和存储的需求。结合 vLLM 等先进的推理引擎，LoRA 的部署和服务也变得前所未有的高效和灵活，正在推动大模型在更多特定场景下的落地和应用。&lt;/p></description></item></channel></rss>