使用#

本地运行 Xinference#

让我们以一个经典的大语言模型 llama-2-chat 来展示如何在本地用 Xinference 运行大模型。

在这个快速入门之后,可以继续学习如何在一个分布式集群环境下部署 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 服务。一旦 Xinference 服务运行起来,可以有多种方式来使用,包括使用网页、cURL 命令、命令行或者是 Xinference 的 Python SDK。

可以通过访问 http://127.0.0.1:9997/ui 来使用 UI,访问 http://127.0.0.1:9997/docs 来查看 API 文档。

可以通过以下命令安装后,利用 Xinference 命令行工具或者 Python 代码来使用:

pip install xinference

命令行工具是 xinference。可以通过以下命令查看有哪些可以使用的命令:

xinference --help

如果只需要安装 Xinference 的 Python SDK,可以使用以下命令安装最少依赖。需要注意的是版本必须和 Xinference 服务的版本保持匹配。

pip install xinference-client==${SERVER_VERSION}

运行 Llama-2#

让我们来运行一个内置的 llama-2-chat 模型。当你需要运行一个模型时,第一次运行是要从HuggingFace 下载模型参数,一般来说需要根据模型大小下载10到30分钟不等。当下载完成后,Xinference本地会有缓存的处理,以后再运行相同的模型不需要重新下载。

备注

Xinference 也允许从其他模型托管平台下载模型。可以通过在拉起 Xinference 时指定环境变量,比如,如果想要从 ModelScope 中下载模型,可以使用如下命令:

XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port 9997

We can specify the model’s UID using the --model-uid or -u flag. If not specified, Xinference will generate a unique ID. This create a new model instance with unique ID my-llama-2:

xinference launch -u my-llama-2 -n llama-2-chat -s 13 -f pytorch

备注

对于一些推理引擎,比如 vllm,用户需要在运行模型时指定引擎相关的参数,这种情况下直接在命令行中指定对应的参数名和值即可,比如:

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

在运行模型时,gpu_memory_utilization=0.9 会传到 vllm 后端。

Congrats! You now have llama-2-chat running by Xinference. Once the model is running, we can try it out either via cURL, or via Xinference’s python client:

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?"
        }
    ]
  }'

Xinference 提供了与 OpenAI 兼容的 API,所以可以将 Xinference 运行的模型当成 OpenAI的本地替代。比如:

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)

以下是支持的 OpenAI 的 API:

管理模型#

除了启动模型,Xinference 提供了管理模型整个生命周期的能力。同样的,你可以使用命令行、cURL 以及 Python 代码来管理:

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

xinference registrations -t LLM

接下来的命令可以列出所有在运行的模型:

xinference list

当你不需要某个正在运行的模型,可以通过以下的方式来停止它并释放资源:

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

集群中部署 Xinference#

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

首先,根据 文档 确保所有的服务器上都安装了 Xinference。接下来按照步骤:

启动 Supervisor#

在服务器上执行以下命令来启动 Supervisor 节点:

xinference-supervisor -H "${supervisor_host}"

用当前节点的 IP 来替换 ${supervisor_host}

可以在 http://${supervisor_host}:9997/ui 访问 web UI,在 http://${supervisor_host}:9997/docs 访问 API 文档。

启动 Worker#

在需要启动 Xinference worker 的机器上执行以下命令:

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

备注

需要注意的是,如果你需要通过命令行与集群交互,应该通过 -e 或者 --endpoint 参数来指定 supervisor 的地址,比如:

xinference launch -n llama-2-chat -s 13 -f pytorch -e "http://${supervisor_host}:9997"

使用 Docker 部署 Xinference#

用以下命令在容器中运行 Xinference:

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

docker run -p 9997:9997 --rm --gpus all xprobe/xinference:latest

在只有 CPU 的机器上运行#

docker run -p 9997:9997 --rm xprobe/xinference:latest-cpu

在 Kubernetes 环境中运行 Xinference#

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

假设已经有一个可以使用的 Kubernetes 环境。

  1. 下载 KubeBlocks 的命令行工具,可以参考 文档.

确保 kbcli 的版本至少为 v0.7.1。

  1. 通过 kbcli 安装 KubeBlocks,参考 文档 kbcli.

  2. 用以下命令打开 Xinference 插件:

kbcli addon enable xinference
  1. 使用 kbcli 来拉起 Xinference 集群:

kbcli cluster create xinference

如果 Kubernetes 节点没有 GPU 设备,需要加上额外的参数:

kbcli cluster create xinference --cpu-mode

使用 -h 获取帮助文档

kbcli cluster create xinference -h

更多#

恭喜你,已经初步掌握了 Xinference 的用法!为了帮助你更好地使用工具,下面是其他的一些文档和指导资源: