Xinference:快速指南

2,195 阅读4分钟

本地运行 Xinference:快速指南

在这篇博客中,我们将介绍如何在本地运行大语言模型(LLM),以 llama-2-chat 为例,使用 Xinference 提供的工具进行操作。

1. 拉起本地服务

首先,确保你已经按照 Xinference 文档 安装了 Xinference。使用以下命令拉起本地的 Xinference 服务:

xinference-local --host 0.0.0.0 --port 9997
备注

默认情况下,Xinference 会使用 <HOME>/.xinference 作为主目录来存储日志文件和模型文件,其中 <HOME> 是当前用户的主目录。你可以通过配置环境变量 XINFERENCE_HOME 修改主目录,例如:

XINFERENCE_HOME=/tmp/xinference xinference-local --host 0.0.0.0 --port 9997

恭喜!你已经在本地拉起了 Xinference 服务。你可以通过访问 http://127.0.0.1:9997/ui 使用 UI,访问 http://127.0.0.1:9997/docs 查看 API 文档。

2. 使用 Xinference 命令行工具

首先,安装 Xinference:

pip install xinference

查看可用的命令:

xinference --help

如果只需要安装 Xinference 的 Python SDK,可以使用以下命令安装最少依赖:

pip install xinference-client==${SERVER_VERSION}

3. 关于模型的推理引擎

从 v0.11.0 版本开始,在加载 LLM 模型之前,需要指定具体的推理引擎。当前,Xinference 支持以下推理引擎:

  • vllm
  • sglang
  • llama.cpp
  • transformers

你可以通过以下命令查询与模型相关的参数组合:

xinference engine -e <xinference_endpoint> --model-name qwen-chat

4. 运行 Llama-2

让我们运行一个内置的 llama-2-chat 模型。首次运行模型时,会从 HuggingFace 下载模型参数,这需要一些时间。下载完成后,模型会被缓存,后续运行无需重新下载。

可以使用以下命令手动指定模型的 UID:

xinference launch --model-engine <inference_engine> -u my-llama-2 -n llama-2-chat -s 13 -f pytorch

对于某些推理引擎,如 vllm,用户需要在运行模型时指定引擎相关的参数,例如:

xinference launch --model-engine vllm -u my-llama-2 -n llama-2-chat -s 13 -f pytorch --gpu_memory_utilization 0.9

一旦模型在运行中,可以通过命令行、cURL 或者是 Python 代码来进行交互:

curl -X 'POST' \
  'http://127.0.0.1:9997/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "my-llama-2",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "What is the largest animal?"
        }
    ]
  }'

或使用 Python 代码:

from openai import OpenAI

client = OpenAI(base_url="http://127.0.0.1:9997/v1", api_key="not used actually")

response = client.chat.completions.create(
    model="my-llama-2",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the largest animal?"}
    ]
)
print(response)

5. 管理模型

可以列出所有 Xinference 支持的指定类型的模型:

xinference registrations -t LLM

列出所有在运行的模型:

xinference list

停止某个正在运行的模型并释放资源:

xinference terminate --model-uid "my-llama-2"

6. 集群中部署 Xinference

在集群环境中部署 Xinference 需要在一台机器中启动 supervisor 节点,并在当前或其他节点启动 worker 节点。

启动 Supervisor:

xinference-supervisor -H "${supervisor_host}"

启动 Worker:

xinference-worker -e "http://${supervisor_host}:9997" -H "${worker_host}"

7. 使用 Docker 部署 Xinference

在拥有英伟达显卡的机器上运行:

docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version> xinference-local -H 0.0.0.0 --log-level debug

在只有 CPU 的机器上运行:

docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 xprobe/xinference:<your_version>-cpu xinference-local -H 0.0.0.0 --log-level debug

<your_version> 替换为 Xinference 的版本,比如 v0.10.3,可以用 latest 来用于最新版本。

8. 在 Kubernetes 环境中运行 Xinference

如果想在 Kubernetes 中运行 Xinference,需要通过 KubeBlocks 帮助安装。

下载 KubeBlocks 的命令行工具,参考 文档

通过 kbcli 安装 KubeBlocks:

kbcli addon enable xinference

拉起 Xinference 集群:

kbcli cluster create xinference

如果 Kubernetes 节点没有 GPU 设备:

kbcli cluster create xinference --cpu-mode

使用 -h 获取帮助文档:

kbcli cluster create xinference -h

通过以上步骤,你可以在本地或者集群环境中轻松运行和管理大语言模型。希望这篇博客能帮助你快速入门 Xinference 并体验其强大功能。

推理引擎概述

Xinference 支持多种推理引擎,根据不同模型的需求自动选择最合适的引擎。以下是几种主要的推理引擎及其特点:

1. llama.cpp

llama-cpp-python 是 llama.cpp 的 Python 接口。llama-cpp 基于 ggml(tensor 库)开发,支持 LLaMA 系列的大语言模型及其变种。用户可以根据当前硬件配置手动安装并编译 llama-cpp-python,以获得最佳的推理性能。详细的安装指南请参考 llama-cpp-python 安装指南

2. Transformers

Transformers 引擎支持绝大多数新模型,并且是 PyTorch 格式模型的默认引擎。它具有广泛的兼容性和灵活性,适用于各种深度学习任务。

3. vLLM

vLLM 是一个高效且易用的大语言模型推理引擎,具有以下特点:

  • 领先的推理吞吐量:优化的 CUDA 内核使得推理速度更快。
  • PagedAttention:高效管理注意力键和值的内存使用。
  • 连续批处理:对传入请求进行批量处理,提高处理效率。
自动选择 vLLM 的条件:
  • 模型格式为 pytorchgptqawq
    • 当模型格式为 pytorch 时,量化选项需为 none
    • 当模型格式为 awq 时,量化选项需为 Int4
    • 当模型格式为 gptq 时,量化选项需为 Int3Int4Int8
  • 操作系统为 Linux,并且至少有一个支持 CUDA 的设备。
  • 自定义模型的 model_family 字段和内置模型的 model_name 字段在 vLLM 的支持列表中。
支持的模型包括但不限于:
  • llama 系列:llama-2, llama-3, llama-2-chat, llama-3-instruct
  • baichuan 系列:baichuan, baichuan-chat, baichuan-2-chat
  • internlm 系列:internlm-16k, internlm-chat-7b, internlm-chat-8k, internlm-chat-20b
  • mistral 系列:mistral-v0.1, mistral-instruct-v0.1, mistral-instruct-v0.2, mistral-instruct-v0.3
  • 其他模型:codestral-v0.1, Yi, Yi-1.5, Yi-chat, Yi-1.5-chat, Yi-1.5-chat-16k, code-llama, code-llama-python, code-llama-instruct, deepseek, deepseek-coder, deepseek-chat, deepseek-coder-instruct, codeqwen1.5, codeqwen1.5-chat, vicuna-v1.3, vicuna-v1.5, internlm2-chat, qwen-chat, mixtral-instruct-v0.1, mixtral-8x22B-instruct-v0.1, chatglm3, chatglm3-32k, chatglm3-128k, glm4-chat, glm4-chat-1m, qwen1.5-chat, qwen1.5-moe-chat, qwen2-instruct, qwen2-moe-instruct, gemma-it, orion-chat, orion-chat-rag, c4ai-command-r-v01

4. SGLang

SGLang 是基于 RadixAttention 的高性能推理引擎。它通过在多个调用之间自动重用 KV 缓存,显著加速了复杂 LLM 程序的执行。它还支持其他常见推理技术,如连续批处理和张量并行处理。


通过了解上述推理引擎及其特点,用户可以更好地选择和配置适合自己需求的引擎,从而在本地或集群环境中高效运行大语言模型。