LoRAX(LoRA 交换)是一个框架,允许用户在单个 GPU 上服务数千个微调模型,显著降低服务成本而不影响吞吐量或延迟。
使用 LoRAX 服务微调模型由两部分组成:
LoRAX 支持多种大语言模型作为基础模型,包括 Llama(包括 CodeLlama)、Mistral(包括 Zephyr)和 Qwen。完整支持列表请参阅支持的架构。
基础模型可以以 fp16 或通过 bitsandbytes、GPT-Q 或 AWQ 进行量化加载。
支持的适配器包括使用 PEFT 和 Ludwig 库训练的 LoRA 适配器。模型中的任何线性层都可以通过 LoRA 进行调整并加载到 LoRAX 中。
我们建议从预构建的 Docker 镜像开始,以避免编译自定义 CUDA 内核和其他依赖项。
运行 LoRAX 的最低系统要求包括:
安装 nvidia-container-toolkit。
然后:
- sudo systemctl daemon-reload
- sudo systemctl restart docker
model=mistralai/Mistral-7B-Instruct-v0.1
volume=$PWD/data
docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data \
ghcr.io/predibase/lorax:main --model-id $model
有关令牌流式传输和 Python 客户端的完整教程,请参阅快速开始 - Docker。
提示基础 LLM:
curl 127.0.0.1:8080/generate \
-X POST \
-d '{
"inputs": "[INST] Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? [/INST]",
"parameters": {
"max_new_tokens": 64
}
}' \
-H 'Content-Type: application/json'
提示 LoRA 适配器:
curl 127.0.0.1:8080/generate \
-X POST \
-d '{
"inputs": "[INST] Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? [/INST]",
"parameters": {
"max_new_tokens": 64,
"adapter_id": "vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k"
}
}' \
-H 'Content-Type: application/json'
有关完整详情,请参阅参考 - REST API。
安装:
pip install lorax-client
运行:
from lorax import Client
client = Client("http://127.0.0.1:8080")
# 提示基础 LLM
prompt = "[INST] Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? [/INST]"
print(client.generate(prompt, max_new_tokens=64).generated_text)
# 提示 LoRA 适配器
adapter_id = "vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k"
print(client.generate(prompt, max_new_tokens=64, adapter_id=adapter_id).generated_text)
有关完整详情,请参阅参考 - Python 客户端。
其他运行 LoRAX 的方式,请参阅快速开始 - Kubernetes、快速开始 - SkyPilot 和快速开始 - 本地。
LoRAX 通过兼容 OpenAI 的 API 支持多轮对话和动态适配器加载。只需将任意适配器指定为 model 参数即可。
from openai import OpenAI
client = OpenAI(
api_key="EMPTY",
base_url="http://127.0.0.1:8080/v1",
)
resp = client.chat.completions.create(
model="alignment-handbook/zephyr-7b-dpo-lora",
messages=[
{
"role": "system",
"content": "你是一个友好的聊天机器人,始终以海盗风格回复",
},
{"role": "user", "content": "人在一顿饭里能吃多少架直升机?"},
],
max_tokens=100,
)
print("回复:", resp.choices[0].message.content)
有关详情,请参阅OpenAI 兼容 API。
以下是一些值得尝试的 Mistral-7B 微调模型:
Open-Orca/Mistral-7B-OpenOrca 的俄语聊天机器人。你可以在这里找到更多 LoRA 适配器,或使用 PEFT 或 Ludwig 微调你自己的适配器。
LoRAX 基于 HuggingFace 的 text-generation-inference 构建,源于 v0.9.4(Apache 2.0 许可证)。
我们还要感谢 Punica 在 SGMV 内核方面的工作,该内核用于在高负载下加速多适配器推理。
我们的路线图在这里跟踪。