LoRAX:多 LoRA 推理服务器,可扩展至 1000 个经过微调的 LLM
LoRAX (LoRA eXchange) 是一个框架,允许用户在单个 GPU 上为数千个微调模型提供服务,从而在不影响吞吐量或延迟的情况下大幅降低服务成本。
目录
特征
型号
?入门
要求
启动 LoRAX 服务器
通过 REST API 提示
通过Python客户端提示
通过 OpenAI API 聊天
后续步骤
致谢
路线图
动态适配器加载:在您的请求中包含来自 HuggingFace、Predibase 或任何文件系统的任何微调 LoRA 适配器,它将及时加载,而不会阻塞并发请求。根据请求合并适配器以立即创建强大的整体。
异构连续批处理:将对不同适配器的请求打包到同一个批次中,使延迟和吞吐量与并发适配器的数量几乎保持恒定。
适配器交换调度:在 GPU 和 CPU 内存之间异步预取和卸载适配器,调度请求批处理以优化系统的总吞吐量。
优化推理:高吞吐量和低延迟优化,包括张量并行性、预编译 CUDA 内核(闪存注意力、分页注意力、SGMV)、量化、令牌流。
为生产做好准备的预构建 Docker 映像、Kubernetes 的 Helm 图表、Prometheus 指标以及使用 Open Telemetry 的分布式跟踪。 OpenAI兼容API支持多轮聊天对话。通过每个请求租户隔离的私有适配器。结构化输出(JSON 模式)。
?免费用于商业用途: Apache 2.0 许可证。说够了?
使用 LoRAX 提供微调模型由两个部分组成:
基本模型:所有适配器共享的预训练大型模型。
适配器:根据请求动态加载特定于任务的适配器权重。
LoRAX 支持多种大型语言模型作为基础模型,包括 Llama(包括 CodeLlama)、Mistral(包括 Zephyr)和 Qwen。有关支持的基本模型的完整列表,请参阅支持的架构。
基本模型可以以 fp16 加载,也可以使用bitsandbytes
、GPT-Q 或 AWQ 进行量化。
支持的适配器包括使用 PEFT 和 Ludwig 库训练的 LoRA 适配器。模型中的任何线性层都可以通过 LoRA 进行调整并加载到 LoRAX 中。
我们建议从预构建的 Docker 映像开始,以避免编译自定义 CUDA 内核和其他依赖项。
运行 LoRAX 所需的最低系统要求包括:
Nvidia GPU(安培一代或以上)
CUDA 11.8 兼容设备驱动程序及以上版本
Linux操作系统
Docker(对于本指南)
安装 nvidia-container-toolkit 然后
sudo systemctl daemon-reload
sudo systemctl restart docker
型号=mistralai/Mistral-7B-Instruct-v0.1 卷=$PWD/数据 docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/predibase/lorax:main --model-id $model
有关包括令牌流和 Python 客户端的完整教程,请参阅入门 - Docker。
提示基础法学硕士:
卷曲 127.0.0.1:8080/生成 -X 后 -d '{ "inputs": "[INST] Natalia 在 4 月份向她的 48 个朋友出售了剪辑,然后她在 5 月份出售了一半的剪辑。Natalia 在 4 月和 5 月总共出售了多少个剪辑?[/INST] ", "参数": { "max_new_tokens": 64 } }' -H '内容类型:application/json'
提示LoRA适配器:
卷曲 127.0.0.1:8080/生成 -X 后 -d '{ "inputs": "[INST] Natalia 在 4 月份向她的 48 个朋友出售了剪辑,然后她在 5 月份出售了一半的剪辑。Natalia 在 4 月和 5 月总共出售了多少个剪辑?[/INST] ”,“参数”:{“max_new_tokens”:64,“adapter_id”: “vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k” } }' -H '内容类型:application/json'
有关完整详细信息,请参阅参考 - REST API。
安装:
pip 安装 lorax 客户端
跑步:
from lorax import Clientclient = Client("http://127.0.0.1:8080")# 提示基本 LLMprompt = "[INST] Natalia 在 4 月份向她的 48 个朋友出售了剪辑,然后她在 5 月份出售了一半的剪辑4 月和 5 月,Natalia 总共卖出了多少个片段? [/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
参数即可。
从 openai 导入 OpenAIclient = 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 微调模型可供尝试:
alignment-handbook/zephyr-7b-dpo-lora:Mistral-7b 使用 DPO 在 Zephyr-7B 数据集上进行了微调。
IlyaGusev/saiga_mistral_7b_lora:基于Open-Orca/Mistral-7B-OpenOrca
的俄罗斯聊天机器人。
Undi95/Mistral-7B-roleplay_alpaca-lora:使用角色扮演提示进行微调。
您可以在此处找到更多 LoRA 适配器,或者尝试使用 PEFT 或 Ludwig 微调您自己的适配器。
LoRAX 构建于 HuggingFace 的文本生成推理之上,该文本生成推理源自 v0.9.4 (Apache 2.0)。
我们还要感谢 Punica 在 SGMV 内核方面所做的工作,该内核用于加速重负载下的多适配器推理。
我们的路线图在这里跟踪。