LoRA(Low-Rank Adaptation)是一种高效的参数微调方法。将大模型的权重矩阵分解为原始权重矩阵和两个低秩矩阵的乘积,即W' = W + BA。由于B和A矩阵参与训练的参数量远小于原始权重,其乘积结果又能合入线性层并向下传递,从而达到大模型轻量级微调的目的。
Multi-LoRA指基于一个基础模型,使用多个不同的LoRA权重进行推理。每个请求带有指定的LoRA ID,推理时动态匹配对应的LoRA权重。部署服务时,LoRA权重和基础模型权重预先加载至显存中。一个推理请求至多使用一个LoRA权重,兼容推理请求不使用Lora权重的情况。对于大参数量的模型,若模型参数量过大,无法单卡加载时,可进行Tensor Parallel并行。
LoRA权重中需包含"adapter_config.json"和"adapter_model.safetensors"文件。"adapter_config.json"中包含LoRA权重的超参,支持配置以下参数:r(LoRA 微调中的秩大小),rank_pattern,lora_alpha(LoRA低秩矩阵的缩放系数)和alpha_pattern。"adapter_model.safetensors"文件中包含权重,权重以键值对的形式保存,其中LoRA权重的键名在基础模型的键名前后增加"base_model.model"前缀和"lora_A.weight"、"lora_B.weight"后缀。例如:基础模型中的键名为"model.layers.9.self_attn.v_proj.weight",则LoRA权重中对应的键名应为"base_model.model.model.layers.9.self_attn.v_proj.lora_A.weight"和"base_model.model.model.layers.9.self_attn.v_proj.lora_B.weight"。
已在环境上安装CANN和ATB Models,详情请参见《MindIE安装指南》。
本次样例参考以下安装路径进行:
安装ATB Models并初始化ATB Models环境变量。模型仓set_env.sh脚本中有初始化“${ATB_SPEED_HOME_PATH}”环境变量的操作,所以source模型仓中set_env.sh脚本时会同时初始化“${ATB_SPEED_HOME_PATH}”环境变量。
以LLaMA3.1-70B为例,下载基础模型和LoRA权重后,在基础模型路径下新增lora_adapter.json文件配置预加载的LoRA权重。其中权重名称为权重的别名,长度不能超过256个字符,在后续请求中用于指定Lora权重进行推理。
cd ${基础模型权重} vi lora_adapter.json # 在此文件中配置adapter名称及路径,示例: {"{Lora权重1的名称}": "{Lora权重1路径}", "{Lora权重2的名称}": "{Lora权重2路径}"}
您可以使用以下指令执行对话测试,共3个请求组成 Batch进行推理,每个推理请求中LoRA权重不同。run_pa脚本参数参考表2章节。
cd ${ATB_SPEED_HOME_PATH} torchrun --nproc_per_node 8 --master_port 20030 -m examples.run_pa --model_path {基础模型权重} --max_output_length 20 --max_batch_size 3 --input_dict '[{"prompt": "A robe takes 2 bolts of blue fiber and half that much white fiber. How many bolts in total does it take?", "adapter": "{Lora权重1的名称}"}, {"prompt": "A robe takes 2 bolts of blue fiber and half that much white fiber. How many bolts in total does it take?", "adapter": "{Lora权重2的名称}"}, {"prompt": "What is deep learning?", "adapter": "base"}]'