大模型-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)
"
相关推荐
ahccqw4 分钟前
OpenCV 缩放 与 位移
人工智能·opencv·计算机视觉
长不大的杨瑞杰11 分钟前
OpenCode v2 GitLab 集成实战:Issue 驱动开发、MR 审查与 CI/CD 最小权限
人工智能·ci/cd·gitlab·ai编程·opencode
深蓝AI1 小时前
美团 LongCat-2.5 拆解:1.6T 参数只激活 3%,1M 上下文卖 0.3 美元,Agent 模型的账变了
人工智能·llm
小和尚同志6 小时前
54.6k star 的 Multica: 集多 Agent 和看板于一体的 AI 平台
人工智能·aigc·three.js
一枕槐安4876 小时前
少样本提示(Few-shot)在业务场景的落地实践
大数据·人工智能·意图分类·mmr多样性·knn检索·动态示例选择
王中阳Go7 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
海宇AI7 小时前
零信任架构实战:基于海宇个人风险报告构建自动化分期商城信用额度初审网关
运维·人工智能·架构·自动化
tellmewhoisi7 小时前
深度学习32:卷积神经网络:卷积层(卷积运算,填充,步幅)
人工智能·深度学习·cnn
weixin_307779138 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
Sinokap8 小时前
OpenAI 披露 AI 安全实验:智能体如何突破隔离边界?
人工智能·安全