来源:llm/lorax
LoRAX:多 LoRA 推理服务器#
LoRAX (LoRA eXchange) 是一个框架,它允许用户在单个 GPU 上部署数千个微调的 LLM,在不牺牲吞吐量或延迟的情况下大幅降低服务成本。它的工作原理是在运行时动态加载多个微调的“适配器”(LoRA 等)到单个基础模型之上。不同适配器的并发请求可以在单个批次中一起处理,这使得 LoRAX 能够随着适配器数量的增加保持接近线性的吞吐量扩展。
启动部署#
创建名为 lorax.yaml
的 YAML 配置文件
resources:
accelerators: {A10G, A10, L4, A100, A100-80GB}
memory: 32+
ports:
- 8080
envs:
MODEL_ID: mistralai/Mistral-7B-Instruct-v0.1
run: |
docker run --gpus all --shm-size 1g -p 8080:80 -v ~/data:/data \
ghcr.io/predibase/lorax:latest \
--model-id $MODEL_ID
在上面的示例中,我们要求 SkyPilot 供应一个配备 1 块 Nvidia A10G GPU 和至少 32GB RAM 的 AWS 实例。节点供应完成后,SkyPilot 将使用我们最新的预构建 Docker 镜像 启动 LoRAX 服务器。
让我们启动 LoRAX 作业
sky launch -c lorax-cluster lorax.yaml
默认情况下,此配置将部署 Mistral-7B-Instruct
,但这可以通过运行带有参数 --env MODEL_ID=<my_model>
的 sky launch
命令来覆盖。
注意: 此配置将在公共 IP 上启动实例。强烈建议将实例置于私有子网内以提高安全性。有关在 VPC 中运行和设置私有 IP 的选项,请参阅 SkyPilot 文档的高级配置部分。
使用基础模型提示 LoRAX#
在另一个窗口中,获取新创建实例的 IP 地址
sky status --ip lorax-cluster
现在我们可以使用简单的 REST API 提示基础模型部署
IP=$(sky status --ip lorax-cluster)
curl http://$IP: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'
使用适配器提示 LoRAX#
为了提高响应质量,我们可以添加一个参数 adapter_id
,指向 HuggingFace Hub 中有效的 LoRA 适配器。
在此示例中,我们将使用适配器 vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k
,它微调了基础模型以提高其数学推理能力
curl http://$IP: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'
这里有一些其他有趣的 Mistral-7B 微调模型供测试
alignment-handbook/zephyr-7b-dpo-lora:使用 DPO 在 Zephyr-7B 数据集上微调的 Mistral-7b。
IlyaGusev/saiga_mistral_7b_lora:基于
Open-Orca/Mistral-7B-OpenOrca
的俄语聊天机器人。Undi95/Mistral-7B-roleplay_alpaca-lora:使用角色扮演提示进行微调。
停止部署#
停止部署将关闭实例,但保留存储卷
sky stop lorax-cluster
由于我们在之前的配置中设置了 docker run ... -v ~/data:/data
,这意味着我们下载的任何模型权重或适配器都将在下次运行 sky launch
时被保留。LoRAX Docker 镜像也会被缓存,这意味着像 latest
这样的标签在重启时不会更新,除非您将 docker pull
添加到您的 run
配置中。
删除部署#
要完全删除部署,包括存储卷
sky down lorax-cluster
下次您运行 sky launch
时,部署将从头开始重新创建。
包含的文件#
lorax.yaml
resources:
accelerators: {A10G, A10, L4, A100, A100-80GB}
memory: 32+
ports:
- 8080
envs:
MODEL_ID: mistralai/Mistral-7B-Instruct-v0.1
run: |
docker run --gpus all --shm-size 1g -p 8080:80 -v ~/data:/data \
ghcr.io/predibase/lorax:latest \
--model-id $MODEL_ID