大模型-vllm 实现lora解析

一、LoRA Resolver Plugins

https://docs.vllm.ai/en/latest/design/lora_resolver_plugins/

此目录包含基于 LoRAResolver 框架构建的 vLLM LoRA 解析器插件。它们能够自动从指定的本地存储路径发现并加载 LoRA 适配器,无需手动配置或重启服务器。

LoRa 解析器插件提供了一种灵活的方式来动态加载运行时的 LoRa 适配器。当 vLLM 收到对尚未加载的 LoRa 适配器的请求时,解析器插件会尝试从其配置的存储位置查找并加载该适配器。这实现了以下功能:

动态 LoRa 加载:无需重启服务器即可按需加载适配器

多种存储 后端 :支持文件系统、S3 和自定义后端。内置的 lora_filesystem_resolver 需要本地存储路径,而内置的 hf_hub_resolver 将从 Huggingface Hub 拉取 LoRa 适配器并以相同的方式进行操作。通常,可以实现自定义解析器以从任何来源获取适配器。

自动发现:与现有 LoRa 工作流无缝集成

扩展 部署:跨多个 vLLM 实例集中管理适配器

1.1 使用plugins的前提条件

使用 LoRa 解析器插件之前,请确保已配置以下环境变量:

必需环境变量:

复制代码
VLLM_ALLOW_RUNTIME_LORA_UPDATING:必须设置为 true 或 1 以启用动态 LoRa 加载
export VLLM_ALLOW_RUNTIME_LORA_UPDATING=true

VLLM_PLUGINS:必须包含所需的解析器插件(以逗号分隔的列表):

复制代码
export VLLM_PLUGINS=lora_filesystem_resolver
## VLLM_LORA_RESOLVER_CACHE_DIR:必须设置为文件系统解析器的有效目录路径
export VLLM_LORA_RESOLVER_CACHE_DIR=/path/to/lora/adapters

1.2 解析器说明

可用解析器: lora_filesystem_resolver, 这个文件系统解析器默认随 vLLM 安装,用于从本地目录结构加载 LoRA 适配器。

使用步骤:

复制代码
1. 创建 LoRa 适配器存储目录:

mkdir -p /path/to/lora/adapters

2. 设置环境变量:

export VLLM_ALLOW_RUNTIME_LORA_UPDATING=true

export VLLM_PLUGINS=lora_filesystem_resolver

export VLLM_LORA_RESOLVER_CACHE_DIR=/path/to/lora/adapters

3. 启动 vLLM 服务器:
### 基础模型可以是 meta-llama/Llama-2-7b-hf。请确保已在环境变量中设置 Hugging Face 令牌:export HF_TOKEN=xxx235。

vllm serve your-base-model \
--enable-lora

1.3 目录结构要求

目录结构要求, lora_filesystem_resolver文件系统解析器要求 LoRA 适配器按照以下结构组织:

复制代码
/path/to/lora/adapters/
├── adapter1/
│   ├── adapter_config.json
│   ├── adapter_model.bin
│   └── tokenizer files (if applicable)
├── adapter2/
│   ├── adapter_config.json
│   ├── adapter_model.bin
│   └── tokenizer files (if applicable)
└── ...

每个适配器目录必须包含:

  1. adapter_config.json:

    adapter_config.json:
    {
    "peft_type": "LORA",
    "base_model_name_or_path": "your-base-model-name",
    "r": 16,
    "lora_alpha": 32,
    "target_modules": ["q_proj", "v_proj"],
    "bias": "none",
    "modules_to_save": null,
    "use_rslora": false,
    "use_dora": false
    }

  2. adapter_model.bin, The LoRA adapter weights file

二、使用示例

2.1 准备 LoRa 适配器

假设已在 /tmp/my_lora_adapter 目录下放置了一个 LoRa 适配器.

复制代码
# Assuming you have a LoRA adapter in /tmp/my_lora_adapter
cp -r /tmp/my_lora_adapter /path/to/lora/adapters/my_sql_adapter

2.2 验证目录结构

复制代码
ls -la /path/to/lora/adapters/my_sql_adapter/ # Should show: adapter_config.json, adapter_model.bin, etc.

2.3 使用适配器发出请求

复制代码
curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "my_sql_adapter",
        "prompt": "Generate a SQL query for:",
        "max_tokens": 50,
        "temperature": 0.1
    }'

2.4 工作流程

A. 当 vLLM 收到名为 my_sql_adapter 的 LoRa 适配器请求时:

B. 文件系统解析器检查 /path/to/lora/adapters/my_sql_adapter/ 是否存在

C. 如果存在,则验证 adapter_config.json 文件

D. 如果配置与基础模型匹配且有效,则加载适配器

E. 使用新加载的适配器正常处理请求

F. 该适配器将保持可用状态,以应对未来的请求

2.5 多个解析器配置

多个解析器,可以配置多个解析器插件,以便从不同的源加载适配器:

复制代码
'lora_s3_resolver' 是一个自定义解析器的示例,您需要实现它。 export VLLM_PLUGINS=lora_filesystem_resolver,lora_s3_resolver

所有列出的解析器均已启用;在请求时,vLLM 会按顺序尝试这些解析器,直到找到一个成功为止。

2.6 自定义解析器实现

  1. 实现解析器接口

    Create a new resolver class:

    from vllm.lora.resolver import LoRAResolver, LoRAResolverRegistry
    from vllm.lora.request import LoRARequest

    class CustomResolver(LoRAResolver):
    async def resolve_lora(self, base_model_name: str, lora_name: str) -> Optional[LoRARequest]:
    # Your custom resolution logic here
    pass

  2. 注册解析器

    def register_custom_resolver():
    resolver = CustomResolver()
    LoRAResolverRegistry.register_resolver("Custom Resolver", resolver)

三、使用技巧

3.1 常见问题

常见问题:

  1. "VLLM_LORA_RESOLVER_CACHE_DIR 必须设置为有效目录"

  2. 确保目录存在且可访问

  3. 检查目录的文件权限

  4. "未找到 LoRA 适配器"

  5. 验证适配器目录名称与请求的模型名称是否匹配

  6. 检查 adapter_config.json 文件是否存在且为有效的 JSON 文件

  7. 确保 adapter_model.bin 文件存在于目录中

  8. "适配器配置无效"

  9. 验证 peft_type 是否设置为"LORA"

  10. 检查 base_model_name_or_path 是否与您的基础模型匹配

  11. 确保 target_modules 配置正确

  12. "LoRA 排名超过最大值"

  13. 检查 adapter_config.json 中的 r 值是否超过 max_lora_rank 设置值

3.2调试技巧

打印关键变量

复制代码
Enable debug logging:
export VLLM_LOGGING_LEVEL=DEBUG

Verify environment variables:
echo $VLLM_ALLOW_RUNTIME_LORA_UPDATING
echo $VLLM_PLUGINS
echo $VLLM_LORA_RESOLVER_CACHE_DIR

Test adapter configuration:
python -c "
import json
with open('/path/to/lora/adapters/my_adapter/adapter_config.json') as f:
    config = json.load(f)
print('Config valid:', config)
"
相关推荐
li-xun4 分钟前
2026年6月8日博客精选
人工智能·ai·ai编程·每日阅读
郑洁文6 分钟前
基于机器学习的成都市租房数据的分析与应用
人工智能·机器学习·成都市租房数据·成都市租房数据分析
升鲜宝供应链及收银系统源代码服务6 分钟前
升鲜宝AI助手开发功能详尽说明书(五)---升鲜宝生鲜配送供应链管理系统源代码服务
人工智能·生鲜配送源代码·升鲜宝生鲜配送源代码·后端app与手机端·b2b订货商城·客户订货系统源代码·升鲜宝生鲜配送源代码服务
guslegend8 分钟前
AI驱动的缺陷全自动修复
人工智能·软件工程
小e说说10 分钟前
在遵义学美甲,如何找到适合自己的培训机构?
人工智能
terry60010 分钟前
2026企业级携号转网查询标准:论实时数据同步与高并发承载设计
java·大数据·人工智能·json·信息与通信·数据库架构
一一哥Sun11 分钟前
第05课:大模型到底是什么?——AI世界的“超级大脑“
人工智能
林间码客17 分钟前
《人工智能概论》实验4 知识点复习提纲
人工智能·深度学习·机器学习
道友可好19 分钟前
3 个人,100 万行代码,一行都没人写:OpenAI 的 Harness Engineering 实验
前端·人工智能·后端
辞辞辞19 分钟前
江苏正分科技:一站式碳酸锂提锂整套解决方案,引领湿法提锂行业革新
大数据·人工智能·科技