昇思学习营-模型LoRA微调 学习心得

DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微调

Lora主要是通过训练一个低秩矩阵,冻结原始网络参数,训练参数被大幅降低,资源消耗较低。最后的推理结果是通过冻结的和LoRA训练的低秩矩阵输出的结果相加。

如何适配到模型中?

  1. 通过LoraConfig得到关于LoRA的配置
config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]
    inference_mode=False, # 训练模式
    r=8,
    lora_alpha=32,
    lora_dropout=0.1
)
  1. 将关于LoRA的配置应用于要微调的模型
model = get_peft_model(base_model, config)

问题定位

可以使用 mindspore.set_context(pynativa_synchronize=True) 开启同步,方便在出现问题时快速定位。

流程

  1. 使用load_dataset加载数据集
  2. 实例化tokenizer | AutoTokenizer.from_pretrainedd(model_id)
  3. 定义数据处理逻辑 | 转化为User、Assistant的模板,并转化为数字索引(结尾添加中止符号),统一长度
  4. 可以通过tokenizer.decode(input_ids)将数字索引转回文字
  5. 定义训练超参
  6. 调用Trainer的train启动微调

注意

kwargs[“model”].save_pretrained(path, safe_serialization=True)也会把model safetensors也会保存,可以把它删除节省更多的空间。

可以使用ms_dtype=mindspore.float16在加载模型时,是加载fp32再转为fp16的权重,可以直接传入只是fp16的模型。
也可以先加载模型、model.half()、在保存到本地就是fp16了。

! 用于指定图编译时可用的CPU核数
export MAX_COMPILE_CORE_NUMBER=1 
! 算子最大并行编译进程数 默认是8,取值范围1~32
export TE_PARALLEL_COMPILER=1   
sudo cgcreate -g memory:python_limit
sudo cgset -r memory.limit_in_bytes=4G /python_limit  # 限制4G内存
sudo cgclassify -g memory:python_limit $$

mirror=“modelers” 设置镜像