Xinference 实战指南:全面解析 LLM 大模型部署流程,携手 Dify 打造高效 AI 应用实践案例,加速 AI 项目落地进程
Xinference 实战指南:全面解析 LLM 大模型部署流程,携手 Dify 打造高效 AI 应用实践案例,加速 AI 项目落地进程
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。通过 Xorbits Inference,可以轻松地一键部署你自己的模型或内置的前沿开源模型
官网:https://xorbits.cn/inference
github:https://github.com/xorbitsai/inference/tree/main
官方手册:https://inference.readthedocs.io/zh-cn/latest/index.html
Xinference 功能特点:
模型推理
:大语言模型,语音识别模型,多模态模型的部署流程被大大简化。一个命令即可完成模型的部署工作。前沿模型
:框架内置众多中英文的前沿大语言模型,包括 baichuan,chatglm2 等,一键即可体验!内置模型列表还在快速更新中!异构硬件
:通过 ggml,同时使用你的 GPU 与 CPU 进行推理,降低延迟,提高吞吐!接口调用
:提供多种使用模型的接口,包括 OpenAI 兼容的 RESTful API(包括 Function Calling),RPC,命令行,web UI 等等。方便模型的管理与交互。集群计算,分布协同
: 支持分布式部署,通过内置的资源调度器,让不同大小的模型按需调度到不同机器,充分使用集群资源。开放生态,无缝对接
: 与流行的三方库无缝对接,包括 LangChain,LlamaIndex,Dify、FastGPT、RAGFlow、Chatbox。
1. 模型支持
1.1 大模型支持
参考链接:https://inference.readthedocs.io/zh-cn/latest/models/builtin/llm/index.html
所有主流模型都兼容支持
1.2 嵌入模型
参考链接:https://inference.readthedocs.io/zh-cn/latest/models/builtin/embedding/index.html
开源的词嵌入模型也都支持
BAAI-bge-large-zh-v1.5BAAI Embedding语义向量微调参考链接
1.3 重排序模型(Reranker)
参考链接:https://inference.readthedocs.io/zh-cn/latest/models/builtin/rerank/index.html
bge-reranker-largeBAAI Cross-Encoder语义向量微调参考链接
1.4 IMAGE 模型
Xinference 还支持图像模型,使用图像模型可以实现文生图、图生图等功能。Xinference 内置了几种图像模型,分别是 Stable Diffusion(SD)的各个版本。部署方式和文本模型类似,都是在 WebGUI 界面上启动模型即可,无需进行参数选择,但因为 SD 模型比较大,在部署图像模型前请确保服务器上有 50GB 以上的空间。
1.5 CUSTOM 模型
语音模型是 Xinference 最近新增的功能,使用语音模型可以实现语音转文字、语音翻译等功能。在部署语音模型之前,需要先安装ffmpeg
组件,以 Ubuntu 操作系统为例,安装命令如下:
1.6 模型来源
Xinference 默认是从 HuggingFace 上下载模型,如果需要使用其他网站下载模型,可以通过设置环境变量XINFERENCE_MODEL_SRC
来实现,使用以下代码启动 Xinference 服务后,部署模型时会从 Modelscope[5] 上下载模型:
1.7 模型独占 GPU
在 Xinference 部署模型的过程中,如果你的服务器只有一个 GPU,那么你只能部署一个 LLM 模型或多模态模型或图像模型或语音模型,因为目前 Xinference 在部署这几种模型时只实现了一个模型独占一个 GPU 的方式,如果你想在一个 GPU 上同时部署多个以上模型,就会遇到这个错误:No available slot found for the model。
1.8 管理模型
除了启动模型,Xinference 提供了管理模型整个生命周期的能力。同样的,你可以使用命令行:
更多内容参考 3.1 节
2. Xinference 安装
安装 Xinference 用于推理的基础依赖,以及支持用 ggml 推理 和 PyTorch 推理的依赖。
2.1 Xinference 本地源码安装
首先我们需要准备一个 3.9 以上的 Python 环境运行来 Xinference,建议先根据 conda 官网文档安装 conda。 然后使用以下命令来创建 3.11 的 Python 环境:
以下两条命令在安装 Xinference 时,将安装 Transformers 和 vLLM 作为 Xinference 的推理引擎后端:
如果你想使用 GGML 格式的模型,建议根据当前使用的硬件手动安装所需要的依赖,以充分利用硬件的加速能力。在 Xinference 安装过程中,有可能会安装 PyTorch 的其他版本(其依赖的 vllm[3] 组件需要安装),从而导致 GPU 服务器无法正常使用,因此在安装完 Xinference 之后,可以执行以下命令看 PyTorch 是否正常:
如果输出结果为True
,则表示 PyTorch 正常,否则需要重新安装 PyTorch。
2.1.1 llama-cpp-python 安装
错误原因:使用 pip install llama-cpp-python 安装时,是通过下载源码编译安装的(llama_cpp_python-0.2.55.tar.gz (36.8 MB))。这时候如果系统没有相应的 cmake 和 gcc 版本,会弹出这个错误。
根据系统选择官方编译后的 whl 下载进行离线安装。
网址:https://github.com/abetlen/llama-cpp-python/releases
参考链接:告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
找一个加速器就好
安装命令例子
2.2 Docker 安装 xinference
参考链接:Docker 镜像安装官方手册
当前,可以通过两个渠道拉取 Xinference 的官方镜像。
在 Dockerhub 的 xprobe/xinference 仓库里。
Dockerhub 中的镜像会同步上传一份到阿里云公共镜像仓库中,供访问 Dockerhub 有困难的用户拉取。拉取命令:docker pull registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:
<tag>
。目前可用的标签包括:nightly-main
: 这个镜像会每天从 GitHub main 分支更新制作,不保证稳定可靠。v<release version>
: 这个镜像会在 Xinference 每次发布的时候制作,通常可以认为是稳定可靠的。latest
: 这个镜像会在 Xinference 发布时指向最新的发布版本对于 CPU 版本,增加 -cpu 后缀,如 nightly-main-cpu。
Nvidia GPU 用户可以使用 Xinference Docker 镜像 启动 Xinference 服务器。在执行安装命令之前,确保系统中已经安装了 Docker 和 CUDA。你可以使用如下方式在容器内启动 Xinference,同时将 9997 端口映射到宿主机的 9998 端口,并且指定日志级别为 DEBUG,也可以指定需要的环境变量。
需要修改<your_version>为实际使用版本,也可以为 latest:
--gpus 必须指定,正如前文描述,镜像必须运行在有 GPU 的机器上,否则会出现错误。
-H 0.0.0.0 也是必须指定的,否则在容器外无法连接到 Xinference 服务。
可以指定多个 -e 选项赋值多个环境变量。
2.2.2 挂载模型目录
默认情况下,镜像中不包含任何模型文件,使用过程中会在容器内下载模型。如果需要使用已经下载好的模型,需要将宿主机的目录挂载到容器内。这种情况下,需要在运行容器时指定本地卷,并且为 Xinference 配置环境变量。
上述命令的原理是将主机上指定的目录挂载到容器中,并设置 XINFERENCE_HOME 环境变量指向容器内的该目录。这样,所有下载的模型文件将存储在您在主机上指定的目录中。您无需担心在 Docker 容器停止时丢失这些文件,下次运行容器时,您可以直接使用现有的模型,无需重复下载。
如果你在宿主机使用的默认路径下载的模型,由于 xinference cache 目录是用的软链的方式存储模型,需要将原文件所在的目录也挂载到容器内。例如你使用 huggingface 和 modelscope 作为模型仓库,那么需要将这两个对应的目录挂载到容器内,一般对应的 cache 目录分别在 <home_path>/.cache/huggingface 和 <home_path>/.cache/modelscope,使用的命令如下:
3.启动 xinference 服务(UI)
Xinference 默认会在本地启动服务,端口默认为 9997。因为这里配置了-H 0.0.0.0 参数,非本地客户端也可以通过机器的 IP 地址来访问 Xinference 服务。
启动输出结果
3.1 模型下载
vLLM 引擎
vLLM 是一个支持高并发的高性能大模型推理引擎。当满足以下条件时,Xinference 会自动选择 vllm 作为引擎来达到更高的吞吐量:
模型格式为
pytorch
,gptq
或者awq
。当模型格式为
pytorch
时,量化选项需为none
。当模型格式为
awq
时,量化选项需为Int4
。当模型格式为
gptq
时,量化选项需为Int3
、Int4
或者Int8
。操作系统为 Linux 并且至少有一个支持 CUDA 的设备
自定义模型的
model_family
字段和内置模型的model_name
字段在 vLLM 的支持列表中。
Llama.cpp 引擎
Xinference 通过 llama-cpp-python
支持 gguf
和 ggml
格式的模型。建议根据当前使用的硬件手动安装依赖,从而获得最佳的加速效果。
不同硬件的安装方式:
Apple M 系列
英伟达显卡:
AMD 显卡:
SGLang 引擎
SGLang 具有基于 RadixAttention 的高性能推理运行时。它通过在多个调用之间自动重用 KV 缓存,显著加速了复杂 LLM 程序的执行。它还支持其他常见推理技术,如连续批处理和张量并行处理。
初始步骤:
3.2 模型部署
在部署 LLM 模型时有以下参数可以进行选择:
Model Format: 模型格式,可以选择量化和非量化的格式,非量化的格式是 pytorch,量化格式有 ggml、gptq、awq 等
Model Size:模型的参数量大小,如果是 Llama3 的话,则有 8B、70B 等选项
Quantization:量化精度,有 4bit、8bit 等量化精度选择
N-GPU:选择使用第几个 GPU
Model UID(可选): 模型自定义名称,不填的话就默认用原始模型名称
参数填写完成后,点击左边的火箭图标按钮即开始部署模型,后台会根据参数选择下载量化或非量化的 LLM 模型。部署完成后,界面会自动跳转到 Running Models 菜单,在 LANGUAGE MODELS 标签中,我们可以看到部署好的模型。
3.2.1 flashinfer 安装
参考链接:https://docs.flashinfer.ai/installation.html
提供了适用于 Linux 的预编译轮子,可以通过以下命令尝试 FlashInfer:
或者你可以从源代码编译安装:
若需减小构建和测试时的二进制大小,可以这样做:
查看 torch 版本:
OS: Linux only
Python: 3.8, 3.9, 3.10, 3.11, 3.12
PyTorch: 2.2/2.3/2.4 with CUDA 11.8/12.1/12.4 (only for torch 2.4)
Use python -c "import torch; print(torch.version.cuda)" to check your PyTorch CUDA version.
Supported GPU architectures: sm80, sm86, sm89, sm90 (sm75 / sm70 support is working in progress).
如果觉得太慢了,就用 whl
github 网址:https://github.com/flashinfer-ai/flashinfer/releases
又遇到问题,可能是量化模型不支持问题
尝试使用 qwen2:1.5b 遇到一下问题:
GPU 的 Compute Capability 列表:
由此可见 Tesla V100 的 Compute Capability 是 7.0,也就是不能用 Bfloat16 进行计算,要对 Bfloat16 减半转换为 float16,所以运行时的 dtype 是 half 或者 float16,否则 vLLM 会报错。
在国内需要设置环境变量 VLLM_USE_MODELSCOPE=True,然后就可以启动一个 vLLM 大模型 API 服务了:
界面修改参考:
命令行就是 --dtype half,界面上 extra +号点击,key 是 dtype,值是 half。
查看 GPU 资源占用
3.2.2 分布式部署
分布式场景下,需要在一台服务器上部署一个 Xinference supervisor,并在其余服务器上分别部署一个 Xinference worker。 具体步骤如下:
(1)启动 supervisor 执行命令 xinference-supervisor -H "{supervisor_host} 为 supervisor 所在服务器的实际主机名或 IP 地址。
(2)启动 workers 其余服务器执行命令 xinference-worker -e "http://${supervisor_host}:9997"
Xinference 启动后,将会打印服务的 endpoint。这个 endpoint 用于通过命令行工具或编程接口进行模型的管理:
本地部署下,endpoint 默认为 http://localhost:9997
集群部署下,endpoint 默认为 http://{supervisor_host} 为 supervisor 所在服务器的主机名或 IP 地址。
3.3 模型使用
模型下载并启动后,会自动打开一个本地网页,你可以在这里与模型进行简单的对话,测试其是否成功运行。
复制标题下方的 Model ID,可以在其他 LLMops 上使用
3.3.1 快速 Gradio 对话
3.3.2 集成 Dify 智能问答
模型部署完毕,在 Dify 中使用接入模型,在 设置 > 模型供应商 > Xinference 中填入:
模型名称:qwen2-instruct
服务器 URL:http://<Machine_IP>:7861 替换成您的机器 IP 地址
模型 UID:qwen2-instruct
"保存" 后即可在应用中使用该模型。
Dify 同时支持将 Xinference embed 模型 作为 Embedding 模型使用,只需在配置框中选择 Embeddings 类型即可。
3.4 自定义模型
参考链接:参考下文
通过 Web 注册模型
4. 终端命令
上面如果修改了端口,可以根据下面对应的修改端口
修改完了就可以对应的启动相对应的服务,下面是分别启动 chat / embedding / rerank 三种模型的 cmd 命令, 其他模型命令可以参考 xinference 主页。 启动完了,会返回对应模型的 UID(后期在 Dify 部署会用到)
API 调用
如果你不满足于使用 LLM 模型的 Web 界面,你也可以调用 API 接口来使用 LLM 模型,其实在 Xinference 服务部署好的时候,WebGUI 界面和 API 接口已经同时准备好了,在浏览器中访问 http://localhost:9997/docs / 就可以看到 API 接口列表。
接口列表中包含了大量的接口,不仅有 LLM 模型的接口,还有其他模型(比如 Embedding 或 Rerank )的接口,而且这些都是兼容 OpenAI API 的接口。以 LLM 的聊天功能为例,我们使用 Curl 工具来调用其接口,示例如下:
如果想测试模型是否已经部署到本地,以 rerank 模型为例可以执行下面这个脚本, 或者执行
或者执行查看已经部署好的模型
如果需要释放资源
需要外网访问,需要查找本地 IP 地址 即 http://<Machine_IP>:<端口 port> , 查找 IP 地址的方式如下。
5. Xinference 官方 AI 实践案例
官方链接:https://inference.readthedocs.io/zh-cn/latest/examples/index.html
参考链接:
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/0de81f3a91a9e76a1c33ae6b8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论