Xinference部署教程

0 / 1933

在本地使用 RAGFlow 搭建知识库时,为了数据不泄露至互联网,需要先安装模型推理框架从而便捷的部署 LLM、Embeding Model 和 Reranke Model 等模型。由于 Ollama 对模型只支持 LLM 和 Embeding Model 部署。而 Xinferce 支持不仅各种模型,还支持各种模型格式。所以选用 Xinference 作为 RAGFlow 的模型推理框架。

Xinference 安装

Xinference 有两种安装方式:Docker 和 pip。本篇主要讲 pip 安装方式,Docker 安装有机会在写,如果想了解 Xinerence 的话建议去中文版文档地址:https://inference.readthedocs.io/zh-cn/latest/index.html

使用 conda 创建虚拟环境

conda 简介和使用在这里就不详细说明了,需要注意的是使用 conda 时,最好改一下 conda 源和 pip 源

# 创建环境
conda create --name xinfer python=3.12
# 进入环境
conda activate xinfer

安装 Xinference

Xinference 支持多种推理引擎,我目前只使用了 Transformers 和 vLLM 这两个引擎后端

1.Transformers 引擎
pip install "xinference[transformers]"
2.vLLM 引擎
pip install "xinference[vllm]"
# 一些模型可能需要用到FlashInfer
pip install flashinfer -i https://flashinfer.ai/whl/cu124/torch2.4
# 对于不同的Cuda和torch版本可以查看https://docs.flashinfer.ai/installation.html 这个网页进行安装

也可同时安装 Transformer 和 vLLM 引擎

pip install "xinference[transformers, vllm]"
3.安装所有引擎(可选)
pip install "xinference[all]"

注:在安装完 Xinference 之后,可以执行以下命令看 PyTorch 是否正常:

python -c "import torch; print(torch.cuda.is_available())"

但实际上笔者没有试过,因为笔者是新创了一个 conda 虚拟环境安装,从来没有遇到过这个问题,所以笔者猜测是在已有的 conda 环境安装才会遇到这个问题。

部署模型

1.设置环境变量(可选)
  1. 设置 XINFERENCE_HOME
    是 Xinference 用来存储信息或数据的(比如模型文件)。在 Linux 系统中一般位于 /home/用户/.xinference 目录下。可以通过配置环境变量修改。

    # 1.打开 .bashrc
    sudo vim ~/.bashrc
    
    # 2.在文档最后写入,路径可以自定义
    export XINFERENCE_HOME=/tmp/xinferenc
    
    # 3.时.bashrc立刻生效
    source ~/.bashrc
    

    需要注意的,设置 XINFERENCE_HOME 的终端和启动 Xinference 的终端必须是同一个终端窗口,笔者曾经在一个终端窗口设置环境变量,一个窗口启动。后来发现设置的环境变量并没有生效。

  2. 设置 HF_ENDPOINT
    Xinference 模型下载默认是从Huggingface 官方网站下载 。在国内因为网络原因,可以通过下面的环境变量设计为其它镜像网站: export HF_ENDPOINT=https://hf-mirror.com/
    具体设置步骤与上述相同。
    另外也可通过设置 XINFERENCE_MODEL_SRC=modelscope,使其默认从 modelscop 下载。

    2.启动 Xinference
    xinference-local --host 0.0.0.0 --port 9997
    

    Xinference 默认会在本地启动服务,因为这里配置了--host 0.0.0.0 参数,使非本地客户端也可以通过机器的 IP 地址来访问 Xinference 服务。端口默认为 9997,可以使用--port 配置其他端口。
    启动成功后,可以通过 http://IP:9997,访问 WebGUI 界面。
    image.png

    3.使用 Xinference 部署模型

    在 Xinference 上可以部署多种模型,比如大语言模型、嵌入模型等,甚至可以部署自定义模型。笔者将以部署 DeepSeek-R1 模型为例,阐述如何部署模型和部署过程中需要注意的地方。由于笔者使用的显卡显存为 48G。所以选择 DeepSeek-R1:32b 量化后的 6bit 版本。其模型的基本配置如下:
    image.png

我选择 modelscope 作为模型的下载源,其配置如下:
image.png
其中需要着重讲一下 vLLM 的配置参数 gpu_memory_utilizationmax_model_len.

gpu_memory_utilization:vLLM 在部署模型过程中会为其预先分配显存,gpu_memory_utilization 值越大,预先分配的显存就越大,一般默认值为 0.9。比如
本机总显存为 48G,gpu_memory_utilization=0.9,那么为模型预先分配显存的就是 48G*0.9,预先分配显存越大,就有更多显存可用于 KV 缓存,推理速度也会越快。在显存足够的情况下,gpu_memory_utilization 可以设置为 0.95。这也是为什么部署一模一样的量化模型,使用 vLLM 要比使用 Ollama 部署占用的显存多的原因。

max_model_len:模型的最大生成长度,包含 prompt 长度和 generated 长度。这个值需要根据 gpu_memory_utilization 设置。经过测试笔者推测 模型预先分配显存-模型部署本身需要的显存=模型的最大生成长度。笔者以部署 DeepSeek32b-6bit 量化版简单做了个实验,实验结果如下:

gpu_memory_utilization max_model_len model size 显存差
0.6(28.8G) 8122 25.1G 3.7G
0.7(33.6G) 27584 25.1G 8.5G
0.8(38.4G) 47056 25.1G 13.3G
0.9(43.2G) 66523 25.1G 18.1G

如果在部署过程中碰到“The model's max seq len (131000) is larger than the maximum number of tokens that can be stored in KV cache (66512). Try increasing gpu_memory_utilization or decreasing max_model_len when initializing the engine.”这个报错,那么代表着自己设置的 max_model_len=131000 太大了,超过了当前显存可生成的 KV cache(66512)。所以有两个解决办法:1)将 max_model_len 设置小于当前显存生成的最大值就可以了。2)修改 gpu_memory_utilization 使其模型占用的显存变大,从而使可以生成的 KV cache 变多。