大模型-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 自定义解析器实现
-
实现解析器接口
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 常见问题
常见问题:
-
“VLLM_LORA_RESOLVER_CACHE_DIR 必须设置为有效目录”
-
确保目录存在且可访问
-
检查目录的文件权限
-
“未找到 LoRA 适配器”
-
验证适配器目录名称与请求的模型名称是否匹配
-
检查 adapter_config.json 文件是否存在且为有效的 JSON 文件
-
确保 adapter_model.bin 文件存在于目录中
-
“适配器配置无效”
-
验证 peft_type 是否设置为“LORA”
-
检查 base_model_name_or_path 是否与您的基础模型匹配
-
确保 target_modules 配置正确
-
“LoRA 排名超过最大值”
-
检查 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)
"
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)