来源:llm/lorax

LoRAX:多 LoRA 推理服务器#

LoRAX

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 微调模型供测试

您可以在这里找到更多 LoRA 适配器,或者尝试使用 PEFTLudwig 微调您自己的适配器。

停止部署#

停止部署将关闭实例,但保留存储卷

sky stop lorax-cluster

由于我们在之前的配置中设置了 docker run ... -v ~/data:/data,这意味着我们下载的任何模型权重或适配器都将在下次运行 sky launch 时被保留。LoRAX Docker 镜像也会被缓存,这意味着像 latest 这样的标签在重启时不会更新,除非您将 docker pull 添加到您的 run 配置中。

删除部署#

要完全删除部署,包括存储卷

sky down lorax-cluster

下次您运行 sky launch 时,部署将从头开始重新创建。

包含的文件#