LoRA微调:加入参数式微调
冻结原始网络参数,对Attention层中QKV等添加旁支,包含两个低维度的矩阵A和矩阵B,微调过程中仅更新A、B 矩阵
效果:训练参数被大幅降低,资源消耗较低。
对attention的参数加入如下图所示,使用两个A,B矩阵来拟合原始QKV矩阵,其中A,B矩阵中的两个参数r,lora_alpha为重要参数,一般情况下,lora_alpha为r的两倍以上。
Mindspore中的实现代码如下图所示:
整体流程代码部分:
数据导入和载入分词模型及配置:
\
数据样式:
数据处理逻辑部分:
训练模型参数及配置载入:
训练参数及配置:
香橙派板子上运行模型优化策略:
香橙派AIpro的host侧和device侧共享,所以在host侧的内存占用(如python的多进程,模型加载等)也会影响到显存。
优化策略:
1. 在加载模型时,直接加载fp16的权重,而非加载fp32权重再转成fp16。
2.如何限制拉起的python进程数,从而控制额外的内存占用,减少对显存的影响
3.在开启新的终端时,手动限制进程最大内存占用,开了swap然后再限制内存就可以空出来给NPU用。
学习心得:
- 了解lora模型训练基础原理
- 对mindspore上进行模型微调的代码进行分析和确认,方便后续代码的升级和维护
- 对香橙派板子上进行微调的具体流程,包含数据预处理、模型参数及配置加载、训练参数和保存等。
- 对香橙派板子上运行的模型优化策略有一定了解,例如权重加载、限制进程数、限制内存等。