一、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)
"

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐