使用LoRA适配器
本文档向您展示如何在基本模型之上将 LoRA 适配器与 vLLM 结合使用。可以以最小的开销根据每个请求有效地服务适配器。首先,我们下载适配器并将其保存在本地
from huggingface_hub import snapshot_download
sql_lora_path = snapshot_download(repo_id="yard1/llama-2-7b-sql-lora-test")
我们现在实例化基本模型并传入参数enable_lora=True:
from vllm import LLM, SamplingParams
from vllm.lora.request import LoRARequest
llm = LLM(model="meta-llama/Llama-2-7b-hf", enable_lora=True)
现在我们可以提交提示信息,并使用lora_request参数调用llm.generate。LoRARequest的第一个参数是人类可识别的名称,第二个参数是适配器的全局唯一ID,第三个参数是LoRA适配器的路径。
sampling_params = SamplingParams(
temperature=0,
max_tokens=256,
stop=["[/assistant]"]
)
prompts = [
"[user] Write a SQL query to answer the question based on the table schema.\n\n context: CREATE TABLE table_name_74 (icao VARCHAR, airport VARCHAR)\n\n question: Name the ICAO for lilongwe international airport [/user] [assistant]",
"[user] Write a SQL query to answer the question based on the table schema.\n\n context: CREATE TABLE table_name_11 (nationality VARCHAR, elector VARCHAR)\n\n question: When Anchero Pantaleone was the elector what is under nationality? [/user] [assistant]",
]
outputs = llm.generate(
prompts,
sampling_params,
lora_request=LoRARequest("sql_adapter", 1, sql_lora_path)
)
查看 example/multilora_inference.py,了解如何将 LoRA 适配器与异步引擎结合使用以及如何使用更高级的配置选项的示例。
LoRA 适配器服务
LoRA适配的模型也可以通过与Open-AI兼容的vLLM服务器来提供服务。为此,我们在启动服务器时使用--lora-modules {name}={path} {name}={path}
来指定每个LoRA模块:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-hf \
--enable-lora \
--lora-modules sql-lora=~/.cache/huggingface/hub/models--yard1--llama-2-7b-sql-lora-test/
服务器入口接受所有其他的LoRA配置参数(如max_loras、max_lora_rank、max_cpu_loras等),这些参数将适用于所有即将到来的请求。在查询/models 时,我们应该能看到我们的LoRA以及其基础模型:
curl localhost:8000/v1/models | jq .
{
"object": "list",
"data": [
{
"id": "meta-llama/Llama-2-7b-hf",
"object": "model",
...
},
{
"id": "sql-lora",
"object": "model",
...
}
]
}
请求可以通过模型请求参数指定LoRA适配器,就像指定任何其他模型一样。这些请求将根据服务器范围的LoRA配置进行处理(即与基础模型请求并行处理,如果提供了其他LoRA适配器请求并且max_loras设置得足够高,可能还会与其他LoRA适配器请求并行处理)。