背景描述
LoRA 可以在共享基础模型权重的前提下,为同一个模型部署加载一个或多个微调模型。业务请求通过 model 字段选择基础模型或指定的 LoRA 微调模型,无需为每个 LoRA 单独创建一套完整模型部署。
本文以基础模型 Qwen2.5-0.5B-Instruct 和 LoRA 微调模型 Qwen-2.5-0.5b-instrunt-lora-J 为例,介绍如何在创建模型部署时,加载 LoRA 微调模型,并通过 OpenAI 兼容接口验证基础模型和 LoRA 微调模型。
前提条件
- 已在 Beacon 中准备好基础模型、LoRA 微调模型、vLLM 推理引擎、算力和项目配额,并具有创建模型部署的权限。
- LoRA 微调模型必须基于所选基础模型训练。模型架构、权重版本和 Tokenizer 应与基础模型兼容。
操作步骤
准备基础模型。
- 进入《模型广场》,确认基础模型及其模型文件已经准备完成。
- 本文使用以下基础模型:
配置项 示例值 基础模型 Qwen2.5-0.5B-Instruct
准备 LoRA 微调模型。
- 进入《模型仓库》,上传或导入 LoRA 微调模型文件。
- 上传模型文件时勾选
LoRA 微调模型;如果模型文件已经上传,可以编辑模型文件并补充该标记。 - 如果模型在ModelScope有lora标记,导入时自动打上
LoRA 微调模型标签。 - 等待模型文件状态正常且发布完成。本文使用的 LoRA 模型文件为
Qwen-2.5-0.5b-instrunt-lora-J。
创建vLLM 推理引擎。
创建模型部署。
- 进入《模型广场》,选择
Qwen2.5-0.5B-Instruct,单击部署。 - 选择步骤 3 中准备的 vLLM 推理引擎
- 选择基础模型文件,
SERVED_MODEL_NAME可配置基础模型名称比如Qwen2.5-0.5B-Instruct。 - 在
LoRA 微调模型中单击添加 LoRA 微调模型。
示例:配置项 示例值 说明 模型名称 qwen-hi调用接口时填写到请求体 model字段中的名称LoRA 微调模型 Qwen-2.5-0.5b-instrunt-lora-J已发布的 LoRA 模型文件 - 如果需要加载多个 LoRA 微调模型,继续单击
添加 LoRA 微调模型,并为每个 LoRA 设置不同的模型名称。 - 单击
创建,等待模型部署状态变为就绪。
模型名称是该 LoRA 对外提供服务时使用的模型标识。它可以与模型文件名称不同,但应使用稳定、易识别的英文名称,不要使用中文,也不要与基础模型名称或同一部署中的其他 LoRA 模型名称重复。- 进入《模型广场》,选择
检查模型部署。
- 进入《模型部署》详情页,确认基础模型文件和基础模型名称正确。
- 确认
LoRA 微调模型区域中显示了 LoRA 模型文件、模型地址和模型名称qwen-hi。 - 进入模型部署的
详情页面,进入实例的终端,执行命令:curl -s http://127.0.0.1:8000/v1/models - 返回结果中应同时包含基础模型名称和 LoRA 模型名称。例如:
Qwen2.5-0.5B-Instruct qwen-hi
创建 AI 服务提供者。
- 进入《AI 服务提供者》,单击
创建,服务类型选择内部。 - API 规范选择
OpenAI,模型部署选择步骤 4 中创建的部署。 - 确认该提供者可以识别
Qwen2.5-0.5B-Instruct和qwen-hi,然后单击创建。
- 进入《AI 服务提供者》,单击
创建模型网关路由。
- 进入《模型网关》,单击
创建路由。 - 添加 LoRA 模型
qwen-hi,后端选择步骤 6 中创建的 AI 服务提供者,后端模型选择qwen-hi。 - 如果还需要通过同一域名调用基础模型,可以继续添加模型
Qwen2.5-0.5B-Instruct,并将后端模型选择为Qwen2.5-0.5B-Instruct。 - 输入路由域名并完成创建。
- 进入《模型网关》,单击
创建套餐和 API Key。
- 进入《套餐管理》,创建套餐并选择步骤 7 中创建的路由。
- 进入《API Key》,选择该套餐并签发密钥。
- 复制并妥善保存 API Key,密钥只在签发成功时完整展示一次。
结果验证
- 确认模型部署状态为
就绪,部署详情中同时显示基础模型和 LoRA 微调模型qwen-hi。 - 调用 LoRA 微调模型。请求体中的
model必须填写设置的 LoRA 模型名称:curl -s http://<路由域名>:<网关端口>/v1/chat/completions \ -X POST \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <API Key>' \ -d '{ "model": "qwen-hi", "messages": [ { "role": "user", "content": "你好,请用一句话介绍自己。" } ], "temperature": 0, "max_tokens": 128 }' - 确认接口返回成功,响应中的
model为qwen-hi,并且包含正常生成的内容。 - 使用相同请求调用基础模型,只需把
model改为基础模型名称:{ "model": "Qwen2.5-0.5B-Instruct", "messages": [ { "role": "user", "content": "你好,请用一句话介绍自己。" } ], "temperature": 0, "max_tokens": 128 } - 使用 LoRA 验证问答分别调用基础模型和
qwen-hi。固定提示词、temperature、max_tokens等请求参数,确认 LoRA 模型的回答符合微调目标。普通问候的回答可能相近,不能单独证明微调效果。
约束与注意事项
- 基础模型必须匹配:LoRA 微调模型只能与其训练时使用的基础模型配合使用。名称相似不代表模型权重和 Tokenizer 一定兼容。
- 基础模型仍可调用:加载 LoRA 后,同一部署仍可通过基础模型名称调用原始基础模型。调用 LoRA 时必须显式填写对应的 LoRA 模型名称。
- 使用 vLLM 引擎:LoRA 微调模型配置仅用于 vLLM 推理引擎;当前不支持SGLang, vLLM-Omni 引擎。
- 多个 LoRA 名称必须唯一:同一部署中可以添加多个 LoRA 模型,但每个模型名称必须唯一。模型网关中配置的后端模型名称应与这里保持一致。
- 修改会触发更新:添加、删除或替换 LoRA 微调模型后,需要等待模型部署重新变为就绪,再执行调用验证。