LoRA 的秩取 8 还是 64:先把参数账算清

发布时间:2026/10/13 22:44:12
LoRA 的秩取 8 还是 64:先把参数账算清 版权与内容来源声明本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容均在附表 A 中标注来源引用官方原文保持原样不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式也不对任何收益结果作承诺。转载请注明出处。一、先把两件事拆开秩和适配范围根本不是同一个坐标把 LoRA 的r从 8 改成 64、只适配 q/v可训练参数从 4,194,304 涨到 33,554,432涨了 8 倍而r保持 8 不动、只把适配范围从 q/v 扩到全部线性层参数从 4,194,304 涨到 19,988,480涨了约 4.8 倍。两个数字都在涨涨的却是完全不同的东西——前者抬高每个被适配矩阵的表达上限后者把被改动的层铺开。把它们当成同一个「LoRA 大小」来调是超参排查绕远路的最大来源。现场一次几乎人人犯过的误判我见过的典型操作是这样的微调完效果不理想第一反应是把r从 8 加到 64跑完发现显存吃紧或者过拟合再往下调整个过程里target_modules从来没动过一直停在注意力块的 q/v 上。如果真实需求是「让模型记住一批行业术语并稳定输出」需要的并不是更宽的秩而是更多层被覆盖到。两个旋钮共用一个模糊的名字但作用点不重合。先把参数账的公式钉死LoRA 的参数量算法很朴素一句话就能记住每层每个被适配的权重矩阵新增一对低秩矩阵 A 和 B参数量 r × (d_in d_out)。d_in、d_out是这个权重矩阵的输入维与输出维r就是所谓的秩。整个模型的 LoRA 参数量就是把所有被适配的矩阵按这条公式加总。这条公式是下文所有数字的基础。你拿自己模型的hidden_size、层数和 MLP 中间维就能复算一遍不用装任何框架。实测块 1参数账跑一遍 实测环境Python 3.13.12 / macOS / 仅标准库L,D32,4096flambdar,ms:sum(r*(io)for_,i,oinms)*L qv[(q_proj,D,D),(v_proj,D,D)]all_linearqv[(k_proj,D,D),(o_proj,D,D),(gate_proj,D,11008),(up_proj,D,11008),(down_proj,11008,D)]base6.74e9print(f{rank:4}|{只适配 q/v:16}|{占基座:8}|{适配全部线性层:16}|{占基座:8})print(-*74)forrin(4,8,16,64):n1,n2f(r,qv),f(r,all_linear)print(f{r:4}|{n1:16,}|{n1/base*100:7.3f}% |{n2:16,}|{n2/base*100:7.3f}%)print()print(frank 从 8 提到 16只适配 q/v参数翻倍 →{f(8,qv):,}→{f(16,qv):,})print(frank16 时把适配范围从 q/v 扩到全部线性层参数放大{f(16,all_linear)/f(16,qv):.1f}倍)print(frank16 全线性层占比{f(16,all_linear)/base*100:.2f}% —— 仍不到基座的 3%)print()print(f对照全量微调 7B ≈ 6.74e9 可训练参数rank16 只适配 q/v ≈{f(16,qv):,}约{base/f(16,qv):,.0f}分之一)原样输出rank | 只适配 q/v | 占基座 | 适配全部线性层 | 占基座 -------------------------------------------------------------------------- 4 | 2,097,152 | 0.031% | 9,994,240 | 0.148% 8 | 4,194,304 | 0.062% | 19,988,480 | 0.297% 16 | 8,388,608 | 0.124% | 39,976,960 | 0.593% 64 | 33,554,432 | 0.498% | 159,907,840 | 2.373% rank 从 8 提到 16只适配 q/v参数翻倍 → 4,194,304 → 8,388,608 rank16 时把适配范围从 q/v 扩到全部线性层参数放大 4.8 倍 rank16 全线性层占比 0.59% —— 仍不到基座的 3% 对照全量微调 7B ≈ 6.74e9 可训练参数rank16 只适配 q/v ≈ 8,388,608约 803 分之一这段脚本不加载模型、不装依赖纯按公式和公开结构参数算跑一次不到一秒。它给出的第一个反直觉结论已经在表里了在 7B 这个量级上「把适配范围扩到全部线性层」比「把秩从 8 提到 64」更贵。二、LoRA 的内核它只动权重更新量的一小块但缩放挂在秩上LoRA 省参数量靠的是不去重训整个权重矩阵冻结原始权重只学一个低秩的「更新量」再加回到原权重上。这件事论文摘要说得很直白下面逐字引原文。论文口径省下来的到底是什么LoRA 论文arXiv:2106.09685摘要里的原句是Compared to GPT-3 175B fine-tuned with Adam, LoRA can reduce the number of trainable parameters by 10,000 times and the GPU memory requirement by 3 times.也就是可训练参数减少约 1 万倍、显存需求减少约 3 倍。这个结论的限定条件必须一起读它说的是「相比用 Adam 全量微调同一个 175B 模型」不是「LoRA 在任何模型任何配置上都省 3 倍显存」。做参数账时把限定条件丢掉账就会算歪。QLoRAarXiv:2305.14314摘要里的两句原句是QLoRA backpropagates gradients through a frozen, 4-bit quantized pretrained language model into Low Rank Adapters~(LoRA).reduces memory usage enough to finetune a 65B parameter model on a single 48GB GPU while preserving full 16-bit finetuning task performance翻译过来QLoRA 把基座冻结并量化到 4-bit梯度穿过量化后的基座、只回到 LoRA 适配器上因此能在单张 48GB 显存的卡上微调 65B 参数模型并且保持与 16-bit 全量微调相当的训练任务表现。它解决的是「显存不够」这个前置条件不是「效果不够」。官方配置项里的三个名字Hugging Face PEFT 是目前落地这套方法最常用的库官方文档对三个关键参数的定义如下逐字引用出处见附表 ArLora attention dimension (the rank).target_modulesThe names of the modules to apply the adapter to.传all-linear时all linear/Conv1D modules are chosen (if the model is a PreTrainedModel, the output layer excluded)。lora_alphaThe alpha parameter for Lora scaling.文档里还有两句对本文的判断最关键的话A higher rank means the model has more parameters to train, but it also means the model has more learning capacity.The resulting number of trainable parameters in a LoRA model depends on the size of the update matrices, which is determined mainly by the rankrand the shape of the original weight matrix.「主要由秩和原权重形状决定」这句把第一件易混的事说穿了在参数量这个数字里r只是一个乘数被适配矩阵的形状是另一个乘数而形状由target_modules决定。一个 PEFT 的最小配置长这样⚠️代码待验证frompeftimportLoraConfig configLoraConfig(r16,lora_alpha32,target_modulesall-linear,lora_dropout0.05,biasnone,)这是官方文档给出的参数组合形式本地环境没有安装 peft所以没有跑过参数含义以附表 A 的出处为准。PEFT 当前发布版本为 v0.21.2截至 2026-10-13取自 PyPI 官方接口。一个容易被忽略的耦合改秩就改了有效缩放PEFT 文档说明LoRA 的缩放系数在原实现里是lora_alpha/r如果打开 rsLoRA则变成lora_alpha/math.sqrt(r)。这句话的后果很直接你把r从 8 改成 64、lora_alpha不动有效缩放就变成了原来的八分之一。此时做对比评测测出来的差异到底来自「秩变宽」还是「等效缩放变小」是分不清的。于是有了本文的第一条判据比较不同秩之前先把lora_alpha/r的比值固定住或者统一改用 rsLoRA让缩放只跟sqrt(r)相关。不固定这个比值后面扫出来的r曲线不可信。三、把两个坐标都摆上桌才看清四个真问题算完账会发现「r取 8 还是 64」这个问题本身就问偏了——它只在一个坐标上挪动。差距悬殊的四个档没有一个超过 3% 实测环境Python 3.13.12 / macOS / 仅标准库离线复算不加载任何模型rank只适配 q/v占基座适配全部线性层占基座q/v 相对全量微调42,097,1520.031%9,994,2400.148%约 1/321484,194,3040.062%19,988,4800.297%约 1/1607168,388,6080.124%39,976,9600.593%约 1/8036433,554,4320.498%159,907,8402.373%约 1/201口径按 32 层、隐藏维 4096、MLP 中间维 11008 的公开 7B 量级结构自算基座参数量按 6.74e9 记公式为「每层每适配矩阵 r × (d_in d_out)」「只适配 q/v」指每层适配 q_proj 与 v_proj 两个矩阵「适配全部线性层」指每层适配 q/k/v/o 与 gate/up/down 共 7 个矩阵取数日期 2026-10-13。四个档里最大的 2.373%最小的 0.031%相差 76 倍但没有一档超过 3%。也就是说只要不碰全量微调参数量占比这个数字从头到尾都「很好看」。正因为都好看它就不能当效果指标——它是成本指标只回答「要多存多少参数、多算多少梯度」。真正拉开差距的是层覆盖了哪些能力面由这两个坐标衍生出的四个问题按重要性排0.124% 和 0.593% 都不到 1%效果却可能差出一个档次。差的那 4.8 倍不是均匀撒出去的而是全压在 MLP 的 gate/up/down 上。这几层动与不动改的是不同的能力面。被适配的层决定覆盖面秩只决定单层表达上限。只适配 q/v改的是注意力里「信息怎么被重新加权」把 k/o 和 MLP 三层纳进来才有机会改「信息怎么被写进中间表示」。显存和训练时间跟着参数量走。全线性层的参数是 q/v 的 4.8 倍优化器状态与梯度也按同比例上涨。「扩范围」比「提秩」更贵这正是 QLoRA 要用 4-bit 量化基座把这个前提压下去的原因。缩放耦合会污染评测结论。上一条已经拆过但它是评测里最容易漏的一环值得单独记一笔。把系数摊开看更清楚。这段两行代码就能算出来D4096print(q/v 每层每 rank 系数 ,2*(DD))print(全线性层每层每 rank 系数 ,4*2*D2*(D11008)(11008D))输出两行q/v 每层每 rank 系数 16384、全线性层每层每 rank 系数 78080。前者是 2 个矩阵 × (4096 4096)后者是 4 个 4096×4096 加上 gate/up/down 三项两者比值 4.77——这就是「4.8 倍」的来源把维度换成你自己模型的就能复算。所以第一件事永远是先定范围再定秩顺序倒过来会怎样你会先花几天时间扫r 8/16/32/64每个配置的适配范围都停在 q/v最后发现四个配置之间的差异都落在波动范围里于是误判成「LoRA 调参没效果」。实际上你一直在同一个坐标上左右挪另一个坐标一次都没动。四、坐标系四类常见配置分别落在哪一格把「每层每秩的参数量系数」当横轴、「覆盖的能力面」当纵轴四类配置的落点就清楚了。下面四行覆盖了绝大多数 7B 级微调会真实用到的组合。先把坐标轴定下来横轴是每层每秩的参数量系数q/v 16,384q/k/v/o 32,768含 MLP 的全部线性层 78,080。纵轴是能力面q/v 只覆盖注意力的重加权路径加上 k/o 覆盖注意力的读与写再加 MLP 三层才覆盖到信息写进中间表示这一段。坐标系表配置每层每秩系数覆盖的能力面建议起始秩什么条件下别用q/v16,384注意力重加权不碰 MLP8任务需要注入大批领域术语时覆盖面不够q/k/v/o32,768注意力的读侧与写侧8 到 16任务瓶颈在 MLP 表达时扩到这里也不够全线性层含 MLP78,080注意力 MLP 三层8显存只够极小的 batch 且不能用量化基座时全线性层 分层秩78,080 起关键层加宽其余保持8局部 16 到 32没做过分层验证时先别上分层秩口径同上每层每秩系数按 32 层、隐藏维 4096、MLP 中间维 11008 的结构自算取数日期 2026-10-13。这张表的读法是先横后纵任何一行的起始秩都可以是 8先看自己需要哪条能力面再决定要不要往上加秩。把行选错、只在那行里加秩是效率最低的一种调参方式。这份资料里有什么本文的参数账脚本、7B 与 13B 两种结构的系数对照表以及四类配置的 PEFT 配置模板都在这个资料包里扫码即可获取五、选型建议先定范围再定秩定完用两个条件验收选型这件事收敛到两句话横轴先用任务性质拍定纵轴用验证集数据和显存余量拍定。下面把常见情形对号入座。按现象决定先动哪个坐标你观察到的现象先动哪个坐标建议起始配置验收条件格式、语气、输出结构不对知识其实是有的范围先秩后q/v秩取 8格式类样例在验证集上稳定通过模型不认识领域术语答案和术语对不上范围全线性层秩取 8领域问答样例不再出现术语张冠李戴上面都试过仍不足且训练数据量够秩全线性层秩取 16 再上 32秩翻倍后验证集指标稳定超出波动范围显存不够batch 只能压到很小先降秩不降范围全线性层秩取 4 加 4-bit 基座训练能稳定跑完再谈效果口径表中的配置都指 PEFT 里LoraConfig的target_modules与r取值缩放参数按前面的要求固定lora_alpha/r比值取数日期 2026-10-13。什么时候该停手三条可以直接执行的停手判断秩翻倍8 到 16、16 到 32之后验证集指标的变化落在波动范围里就停手。继续加秩是在给成本表加数字不是在给效果表加数字。此时应该先去扩适配范围或者回头查数据。全线性层 秩取 64 在 7B 上约 1.6 亿可训练参数、占基座 2.373%。如果按这个配置算出来的显存余量撑不住一个完整 epoch就降到秩取 16或者先上 4-bit 量化基座不要靠砍 batch 硬撑——参数账在这里是硬约束。只适配 q/v 且秩已经到 643355 万参数、占基座 0.498%效果仍不达标基本能说明问题不在容量。此时把范围扩到全线性层比继续加秩更值得试。回到标题那个问题秩取 8 还是 64答案取决于你先在哪一行。只适配 q/v 时秩取 8 就够起步往上加秩的边际收益要靠验证集来证明选了全线性层时秩取 8 到 16 的起点已经比「q/v 秩取 64」覆盖了更多能力面而参数量还更低。把两个坐标分开看这个选择就不再是二选一。这份资料里有什么配套的学习路线图和微调实操课都在同一个资料包里路线图里标了「哪些微调前置知识可以先跳过」扫码即可获取附表 A本文引用事实与出处对照表#事实出处本文位置1LoRA 相比用 Adam 全量微调 175B 量级模型可将可训练参数减少约 1 万倍、显存需求减少约 3 倍原句reduce the number of trainable parameters by 10,000 times and the GPU memory requirement by 3 times论文摘要页《LoRA: Low-Rank Adaptation of Large Language Models》作者 Hu 等arXiv:2106.09685v22021-10-16 修订https://arxiv.org/abs/2106.09685第二章「论文口径」2QLoRA 通过冻结的 4-bit 量化基座把梯度传回 LoRA可在单张 48GB 显存卡上微调 65B 参数模型并保持与 16-bit 全量微调相当的训练任务表现论文摘要页《QLoRA: Efficient Finetuning of Quantized LLMs》作者 Dettmers 等arXiv:2305.14314v12023-05-23https://arxiv.org/abs/2305.14314第二章「论文口径」3r的官方定义为Lora attention dimension (the rank).Hugging Face PEFT 官方仓库src/peft/tuners/lora/config.py中LoraConfig文档字符串https://github.com/huggingface/peft/blob/main/src/peft/tuners/lora/config.py第二章「官方配置项」4target_modules用于指定被适配的模块名传all-linear时选中全部 linear/Conv1D 模块PreTrainedModel 会排除输出层同第 3 条出处第二章「官方配置项」5lora_alpha的官方定义为The alpha parameter for Lora scaling.同第 3 条出处第二章「官方配置项」6秩越高可训练参数越多、学习容量越大LoRA 可训练参数量主要由秩r与原权重矩阵形状决定默认给注意力块的 query/value 层加可训练权重QLoRA 则加到所有线性层且官方文档称其可提供等同全量微调的表现Hugging Face PEFT 官方文档源文件docs/source/package_reference/lora.md即官网 huggingface.co/docs/peft 的 LoRA 页面内容来源https://github.com/huggingface/peft/blob/main/docs/source/package_reference/lora.md第二、三章7原实现的 LoRA 缩放为lora_alpha/rrsLoRA 使用lora_alpha/math.sqrt(r)同第 3 条与第 6 条出处第二章「缩放耦合」8PEFT 当前发布版本为 v0.21.2PyPI 官方 JSON 接口 https://pypi.org/pypi/peft/json取数日期 2026-10-13第二章「官方配置项」核验说明第 3 至 7 条引文的官网页面huggingface.co/docs/peft在核验时返回空白页前端渲染因此逐字引文取自同一项目的官方仓库源文件两者为同一份内容仓库文件为目标页面「待验证」之外的可靠替代。第 1、2 条的英文原句已逐字核对 arXiv 摘要页。第 3、4、5 条引文中的英文原样保留未做拼写改写。写在最后这篇用到的资料写这篇文章时把相关的官方文档和源码又翻了一遍顺手也整理了几份配套的东西大模型学习路线图从零基础到能自己动手做 Agent按阶段说明每一步该学什么、哪些可以先跳过《LangChain LangGraph MCP 智能体开发实战》视频课7 个模块从私有化部署、EmbeddingRAG 到 MCPAgent 全流程AI 大模型知识库在线可查Agent Skills 从入门到落地、Claude Skills 完全指南等专题按目录浏览即可640 套 AI 大模型行业报告 经典 PDF 书籍看行业落地案例和别人怎么做的时候用得上大模型零基础到精通教学视频跟着敲一遍比只读文档快得多资料是我自己整理的放在下面这个码上扫码即可获取添加时备注「AI」优先通过。资料按「先路线、再动手、最后查漏」的顺序整理好了建议先看学习路线那一份照着它挑一条适合自己当前基础的路径再往下看。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询