DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微调
Lora主要是通过训练一个低秩矩阵,冻结原始网络参数,训练参数被大幅降低,资源消耗较低。最后的推理结果是通过冻结的和LoRA训练的低秩矩阵输出的结果相加。
如何适配到模型中?
- 通过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
)
- 将关于LoRA的配置应用于要微调的模型
model = get_peft_model(base_model, config)
问题定位
可以使用 mindspore.set_context(pynativa_synchronize=True) 开启同步,方便在出现问题时快速定位。
流程
- 使用load_dataset加载数据集
- 实例化tokenizer | AutoTokenizer.from_pretrainedd(model_id)
- 定义数据处理逻辑 | 转化为User、Assistant的模板,并转化为数字索引(结尾添加中止符号),统一长度
- 可以通过tokenizer.decode(input_ids)将数字索引转回文字
- 定义训练超参
- 调用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” 设置镜像