原理示意图 + 流程

“先看左边 LoRA 原理 :预训练模型参数 W 冻结,给 Attention 层 QKV 这些关键模块加‘旁支’—— 低秩矩阵 A(正态分布初始化)和 B(初始全 0 )。输入 x 过模型,h 是中间输出,微调时只更新 AB ,相当于给模型‘装轻量插件’,不动主干,却能适配新任务 。

为啥这么做?冻结预训练权重 能保留模型学到的通用知识,AB 维度低(比如原矩阵 d×d ,旁支是 d×r + r×d ,r 远小于 d ),训练时只需更新少量参数,让训练成本暴跌 ,香橙派这类小硬件也能扛得住 。”

代码步骤拆解

  • 1. 实例化 base model
    “第一块代码,用 AutoModelForCausalLM.from_pretrained 加载预训练模型(比如这里的 DeepSeek 系列模型 )。指定 ms_dtype=mindspore.float16 是为了在昇思框架里用半精度,省内存、加速计算 ;配 generation_config 、对齐 pad_token_id 和 eos_token_id ,是给后续生成任务定规则,让模型知道怎么结束文本、填充空白 。这一步是‘搭好模型主干’,用预训练的强大能力打底 。”

  • 2. 配置 LoraConfig
    “接着配 LoraConfig ,task_type 选 CAUSAL_LM(因果语言模型,适合文本生成 )。target_modules 指定给哪些模块加 LoRA ,像 q_projk_proj 这些 QKV 投影层,就是要插旁支的地方;inference_mode=False 开训练模式;r 是低秩维度(控制旁支‘轻薄度’ ),lora_alpha 影响缩放,lora_dropout 正则化防过拟合。这一步是‘设计轻量插件的参数’,决定 LoRA 怎么插、插多深 。”

  • 3. 实例化 LoRA 模型
    “用 get_peft_model 把 base model 和 LoRA 配置结合,模型就变成‘主干冻结 + 旁支可训’的形态。最后 model.trainable_parameters() 能看哪些参数参与训练 ——只有 LoRA 旁支的 AB 矩阵 ,参数量暴减(比如这里只占 0.5% )。训练时只更新这些‘轻量参数’,算力、内存压力大减 ,小硬件也能跑微调 。”

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐