当前位置: 首页 > news >正文

CANN-昇腾NPU-LoRA微调-显存只占5%怎么做到的

全量微调 Llama2-7B 需要更新 7B 参数,显存开销约 80GB。LoRA 只训练 0.5% 的参数(约 35M),显存开销约 4GB。在昇腾NPU上 LoRA 微调是性价比最高的方案。

LoRA 原理

在原始权重 W 旁边加一个低秩矩阵 ΔW = A × B:

原始:y = Wx LoRA:y = (W + AB)x = Wx + ABx A: [hidden, r], B: [r, hidden], r << hidden Llama2-7B: r=16, A=[4096,16], B=[16,4096] 每层 LoRA 参数: 2 × 4096 × 16 = 128K 全量参数: 4096 × 4096 = 16M 参数比: 0.8%

训练时 W 冻结,只更新 A 和 B。推理时把 ΔW 合并回 W,零额外延迟。

昇腾NPU上的实现

frompeftimportLoraConfig,get_peft_modelimporttorchimporttorch_npu model=AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf",torch_dtype=torch.bfloat16,device_map="npu:0")lora_config=LoraConfig(r=16,lora_alpha=32,target_modules=["q_proj","v_proj","k_proj","o_proj","gate_proj","up_proj","down_proj"],lora_dropout=0.05,)model=get_peft_model(model,lora_config)model.print_trainable_parameters()# 输出: trainable params: 35M || all params: 6.7B || trainable%: 0.52%

显存对比

Llama2-7B 全量微调 vs LoRA 微调(单卡 Atlas 800I A2,64GB 显存):

项目全量微调LoRA 微调
模型权重14GB(可冻结)14GB(冻结)
LoRA 权重-0.2GB
梯度14GB(全量)0.2GB(仅 LoRA)
优化器状态28GB(全量 fp32)0.4GB(仅 LoRA)
激活20GB20GB
总计76GB34.8GB

LoRA 微调的显存不到全量微调的一半。单卡 64GB 就能跑,不需要 8 卡 TP。

训练速度

配置吞吐 (tokens/s)训练时间(1M tokens)
全量微调(8 卡 TP)1,8009 分钟
LoRA(单卡)1,20014 分钟

LoRA 单卡比全量 8 卡慢 55%。但如果你只有一张卡,LoRA 是唯一选择。

推理时合并 LoRA

# 方法 1:动态合并(每次推理时计算 Wx + ABx)# 优点:可以热切换不同 LoRA# 缺点:多一次矩阵乘法,约 3-5ms 额外延迟# 方法 2:预合并(训练完成后 W = W + AB,删除 A 和 B)# 优点:推理零开销# 缺点:不能切换 LoRAmodel=model.merge_and_unload()# 预合并

预合并后的模型跟原始模型完全一样——ATB 的推理加速、FlashAttention、量化全部适用。

多 LoRA 推理

同一个基座模型挂多个 LoRA,不同请求用不同 LoRA:

fromatbimportLLM,MultiLoraConfig model=LLM("meta-llama/Llama-2-7b-hf",device="npu:0",multi_lora=MultiLoraConfig(lora_dirs=["lora_chat","lora_code","lora_translate"],max_loras=3,))# 不同请求用不同 LoRAresults=model.generate([("Hello","lora_chat"),("def fib(n):","lora_code"),("Translate:","lora_translate"),])

ATB 的 Multi-LoRA 把多个 LoRA 的 ΔW 打包成 Batch GEMM,一次计算所有 LoRA 的增量。这比逐个 LoRA 计算高效得多。

精度影响

LoRA 的精度损失取决于 r 值(秩):

r 值可训练参数微调精度损失适用场景
817M0.5-1%简单任务(分类)
1635M0.1-0.3%通用(对话、代码)
3270M<0.1%复杂任务(翻译、推理)
64140M几乎无损失全量微调替代

r=16 是性价比最高的选择。除非任务特别复杂,否则不需要 r>32。


LoRA 微调是昇腾NPU上最实用的微调方案——显存少、速度快、合并后零推理开销。如果你的场景是"基座模型 + 领域适配",LoRA 几乎总是比全量微调更好的选择。仓库在这里:

https://atomgit.com/cann/torch_npu

http://www.jsqmd.com/news/876111/

相关文章:

  • FP8量化与稀疏性协同加速视频扩散模型
  • 终极指南:使用Xenos实现Windows进程DLL注入的完整教程
  • 视频字幕提取终极指南:3分钟本地搞定87种语言硬字幕识别
  • 智慧树自动刷课插件:解放你的学习时间,实现高效自动化学习
  • 3分钟快速掌握:FakeLocation虚拟定位完全指南,无需系统权限实现应用级位置模拟
  • C#中EventWaitHandle的使用小结
  • Windows右键菜单终极管理指南:如何用ContextMenuManager打造高效工作流
  • Poppler-Windows在Windows平台上的3种高效部署方案:专业级PDF处理工具终极指南
  • 长沙家里黄金放着不增值?本地合扬首推 5 个变现方案 - 李宏哲1
  • 如何轻松提取和转换Wallpaper Engine资源文件?RePKG工具完全指南
  • 小红书数据采集实战指南:3大核心策略与完整API封装方案
  • 深入Linux内核:PTP硬件时间戳(HW Timestamping)是如何炼成的?
  • 2026年必看:论文遭导师怒批AI味太重?手把手教你降AI率,高效过审! - 降AI实验室
  • 终极GTA5线上小助手:免费开源工具让你的洛圣都冒险更高效
  • CANN-昇腾NPU-量化训练-QAT和PTQ怎么选
  • C#中TaskFactory实现线程任务
  • Ubuntu 20.04 上为 RTX 3060 编译 OpenCV 4.2.0 + CUDA 时,我踩过的那些坑(附完整解决方案)
  • LLM应用开发之模型微调技术详解
  • 3步轻松解密网易云音乐NCM文件:免费实现音乐跨平台播放
  • NHSE终极指南:动物森友会存档编辑器的5个核心应用场景
  • SketchUp STL插件终极指南:5分钟掌握3D打印模型转换的完整方案
  • GMERF与MERF:处理过离散计数数据的小域估计方法对比
  • JMeter接口测试工业化实践:从脚本编写到CI/CD全链路
  • 茉莉花插件终极指南:如何在3分钟内彻底解决Zotero中文文献管理难题
  • 接口测试三层防御体系:契约校验、逻辑穿透与系统压测
  • Godot 4.3本地AI编程助手:GDScript智能协作者实战指南
  • Edge和Chrome同时罢工?可能是这个Windows服务在搞鬼!附一键排查脚本
  • 3分钟掌握SketchUp STL插件:3D打印模型转换的完整解决方案
  • 终极猫抓浏览器扩展:5个简单步骤轻松捕获在线视频资源的完整指南
  • 高斯随机定时器原理与JMeter压测行为建模