LoRA微调学习打卡

LoRA微调实战与优化分析

一、LoRA微调核心原理

  1. 核心作用
    • 为大模型添加“轻量插件”,仅更新少量参数实现新任务适配
    • 冻结基础模型权重,仅训练旁支低秩矩阵A和B,降低资源消耗
  2. 实现流程
    • 实例化基础模型(如DeepSeek-R1-Distill-Qwen-1.5B)
    • 配置LoraConfig(指定目标模块、秩r、学习力度lora_alpha等)
    • 整合为LoRA模型,仅0.5%参数参与训练
  3. 关键参数解析
    • 秩r(低秩分解维度):决定矩阵A(d×r)和B(r×d)的规模,r越小参数越少(如r=8时参数为2dr,远小于原d×d)
    • lora_alpha(缩放因子):与r共同计算scale factor(lora_alpha/r),值越大学习越“激进”(如32/8=4时更新幅度更大)

二、昇思框架实战流程

  1. 前期准备(前3步提前完成)
    • 环境检查:确保昇思框架与开发板兼容,开启同步调试(mindspore.set_context(pynative_synchronize=True))
    • 代码与权重下载:获取微调脚本及模型预训练权重(权重下载耗时较长)
  2. 数据预处理(与Hugging Face差异点)
    • 采用.map(…)方法对接Pipeline,指定处理列(instruction/input/output)
    • 自定义process_func:格式化对话模板(User: … Assistant: …),转换为input_ids/attention_mask/labels(User部分标签设为-100不参与训练)
  3. 模型训练配置
    • 加载FP16精度基础模型,减少内存占用
    • 配置LoRA目标模块(q_proj/k_proj等注意力层)
    • 训练参数:batch_size=1、学习率1e-4、每3步保存适配器权重
  4. 权重保存策略
    • 自定义SavePeftModelCallback:仅保存adapter_model,删除基础模型权重文件,节省空间

三、资源优化方案

  1. 内存占用优化
    • 直接加载FP16权重:避免“FP32加载后转换”的临时内存占用(从5G+降至2G+)
    • 限制进程内存:通过cgroup创建内存限制组(如python_limit),设置上限(如4G),为NPU预留空间
  2. 进程控制
    • 环境变量配置:MAX_COMPILE_CORE_NUMBER=1(限制编译核心)、TE_PARALLEL_COMPILER=1(限制并行编译进程),控制进程数在4-6个
  3. 硬件适配