Xinference 使用指南
一、引言
随着人工智能技术的飞速发展,分布式计算和大规模集群部署成为实现高性能模型推理的关键。Xinference 是一个专注于分布式推理的开源项目,旨在帮助用户高效地部署和管理大规模语言模型(LLMs)及其他多模态模型。通过 Xinference,用户可以轻松搭建集群,实现模型的快速加载、推理和监控。
本文将详细介绍 Xinference 的使用方法,涵盖环境准备、集群搭建、模型部署、高级配置、维护与监控等方面,帮助读者全面掌握 Xinference 的使用技巧。
二、环境准备
(一)硬件要求
在搭建 Xinference 集群之前,需要确保硬件环境满足以下要求:
- CPU:建议使用高性能多核处理器,如 Intel Xeon 或 AMD EPYC 系列,以支持高并发推理任务。
- GPU:对于需要加速的模型(如深度学习模型),建议使用 NVIDIA 的高性能 GPU,如 Tesla 或 A100 系列。确保 GPU 驱动程序已正确安装,并支持 CUDA 运算。
- 内存:根据模型大小和并发需求,建议至少配置 64GB 内存。对于大型模型,可能需要更高的内存配置。
- 存储:使用高速存储设备(如 SSD)以减少模型加载和数据读取的延迟。建议为每个节点配置至少 1TB 的存储空间。
- 网络:确保集群内各节点之间的网络连接稳定且带宽充足。建议使用千兆以太网或更高性能的网络设备。
(二)软件依赖
- 操作系统:推荐使用 Linux 操作系统,如 Ubuntu 20.04 或 CentOS 7。Windows 和 macOS 也可用于开发和测试,但生产环境中建议使用 Linux。
- Python:Xinference 基于 Python 开发,建议安装 Python 3.8 或更高版本。可以通过以下命令安装:
sudo apt-get update sudo apt-get install python3.8 python3-pip
- Docker:Xinference 支持通过 Docker 容器化部署,简化环境配置和管理。安装 Docker 的步骤如下:
- 卸载旧版本(可选):
sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc sudo rm -rf /var/lib/docker /etc/docker sudo rm -rf /etc/systemd/system/docker.service.d
- 安装 Docker:
sudo apt-get install docker
- 安装 NVIDIA Docker 工具包(如果需要 GPU 支持):
sudo apt-get remove -y nvidia-docker2 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) sudo apt-get update sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker
- 卸载旧版本(可选):
- Docker Compose:用于管理多容器 Docker 应用。安装步骤如下:
- 下载并安装:
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d")" /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
- 验证版本:
docker-compose --version
- 下载并安装:
(三)网络配置
- 防火墙设置:确保集群内各节点之间的端口通信未被防火墙阻止。Xinference 默认使用以下端口:
- 9997:Supervisor 服务端口
- 10000-10010:Worker 服务端口范围
- 8080:Web GUI 端口(可选)
- 6379:Redis 端口(用于分布式任务调度,可选)
如果使用防火墙,请确保这些端口已开放。
- DNS 配置:确保集群内各节点可以通过主机名或 IP 地址相互访问。可以通过配置
/etc/hosts
文件或使用 DNS 服务器来实现。
三、集群搭建
(一)本地部署
对于单机测试和开发环境,可以使用本地部署方式快速启动 Xinference 服务。本地部署支持单机多 GPU 推理,适合小规模测试。
- 安装 Xinference:
- 通过 pip 安装:
pip install xinference
- 或者从源码安装(如果需要最新功能):
git clone https://github.com/xinference/xinference.git cd xinference pip install -e .
- 通过 pip 安装:
- 启动 Xinference 服务:
- 运行以下命令启动本地 Xinference 服务:
xinference
- 默认情况下,服务会启动在
http://localhost:9997
。
- 运行以下命令启动本地 Xinference 服务:
- 访问服务:
- 打开浏览器,访问
http://localhost:9997
或http://localhost:9997/docs
查看接口文档。 - 如果需要使用 Web GUI,访问
http://localhost:9997/web
。
- 打开浏览器,访问
(二)分布式部署
分布式部署适用于大规模生产环境,支持跨多台机器的模型推理。以下是分布式部署的详细步骤:
1. 部署 Supervisor
Supervisor 是 Xinference 集群的管理节点,负责协调 Worker 节点的任务分配和模型管理。
- 选择一台服务器作为 Supervisor:
- 确保该服务器的硬件和网络配置满足要求。
- 安装 Xinference:
- 与本地部署相同,通过 pip 或源码安装 Xinference。
- 启动 Supervisor 服务:
- 执行以下命令启动 Supervisor:
其中xinference-supervisor -H "${supervisor_host}" --port 9997
${supervisor_host}
是 Supervisor 所在服务器的实际主机名或 IP 地址。例如:xinference-supervisor -H "192.168.1.100" --port 9997
- 执行以下命令启动 Supervisor:
- 验证 Supervisor 状态:
- 打开浏览器,访问
http://${supervisor_host}:9997
或http://${supervisor_host}:9997/docs
,确保服务正常运行。
- 打开浏览器,访问
2. 部署 Workers
Worker 是 Xinference 集群的计算节点,负责执行实际的模型推理任务。
- 在其余服务器上部署 Worker:
- 确保每台 Worker 服务器的硬件和网络配置满足要求。
- 安装 Xinference:
- 与 Supervisor 节点相同,通过 pip 或源码安装 Xinference。
- 启动 Worker 服务:
- 执行以下命令启动 Worker:
其中xinference-worker -e "http://${supervisor_host}:9997" -H "${worker_host}"
${supervisor_host}
是 Supervisor 所在服务器的实际主机名或 IP 地址,${worker_host}
是当前 Worker 服务器的实际 IP 地址。例如:xinference-worker -e "http://192.168.1.100:9997" -H "192.168.1.101"
- 执行以下命令启动 Worker:
- 验证 Worker 状态:
- 在 Supervisor 的 Web GUI 页面中,查看 Worker 节点的连接状态,确保所有 Worker 已成功注册。
(三)Docker 部署
Docker 部署方式适合需要快速部署和环境隔离的场景。以下是使用 Docker 部署 Xinference 的步骤:
1. 创建 Docker Compose 文件
创建一个 docker-compose.yml
文件,配置 Supervisor 和 Worker 服务。以下是一个示例配置:
version: '3.8'
services:
supervisor:
image: xinference/supervisor:latest
ports:
- "9997:9997"
environment:
- XINFERENCE_LOG_LEVEL=INFO
volumes:
- ./models:/models
worker:
image: xinference/worker:latest
ports:
- "10000:10000"
environment:
- XINFERENCE_LOG_LEVEL=INFO
- XINFERENCE_SUPERVISOR_ENDPOINT=http://supervisor:9997
volumes:
- ./models:/models
depends_on:
- supervisor
2. 启动 Docker Compose
运行以下命令启动 Docker Compose 服务:
docker-compose up -d
3. 验证服务状态
- 访问
http://localhost:9997
或http://localhost:9997/docs
,确保 Supervisor 服务正常运行。 - 在 Supervisor 的 Web GUI 页面中,查看 Worker 节点的连接状态,确保 Worker 服务已成功注册。
四、使用与管理
(一)访问服务
- 本地部署:
- 访问
http://localhost:9997
或http://localhost:9997/docs
查看接口文档。 - 如果使用 Web GUI,访问
http://localhost:9997/web
。
- 访问
- 分布式部署:
- 访问
http://${supervisor_host}:9997
或http://${supervisor_host}:9997/docs
。 - 如果使用 Web GUI,访问
http://${supervisor_host}:9997/web
。
- 访问
(二)启动模型
1. 通过 Web GUI 启动模型
- 访问 Supervisor 的 Web GUI 页面:
- 进入 Launch Model 标签页。
- 搜索并选择模型:
- 在搜索框中输入模型名称(如
bce-embedding-base_v1
或bce-reranker-base_v1
)。 - 选择模型后,设置参数(默认参数适用于大部分场景)。
- 在搜索框中输入模型名称(如
- 启动模型:
- 点击模型卡片左下角的 🚀 火箭图标 启动。
2. 通过命令行启动模型
运行以下命令启动模型:
xinference launch --model-name "llama-2-chat" --model-format ggmlv3 --size-in-billions 7 --quantization q4_0 --endpoint "http://${supervisor_host}:9997"
其中:
--model-name
:模型名称。--model-format
:模型格式。--size-in-billions
:模型大小(以十亿为单位)。--quantization
:量化类型。--endpoint
:Supervisor 服务的地址。
(三)列举运行中的模型
运行以下命令列举当前运行中的模型:
xinference list --endpoint "http://${supervisor_host}:9997"
(四)结束模型
运行以下命令结束指定的模型:
xinference terminate --model-uid ${model_uid}
其中 ${model_uid}
是要结束的模型的 UID。
五、高级配置
(一)分布式推理
Xinference 支持在多台机器上运行大型语言模型,如 DeepSeek V3、DeepSeek R1 等。以下是分布式推理的配置方法:
1. 使用 Web UI 配置分布式推理
- 选择模型:
- 在 Launch Model 页面中,选择需要运行的模型。
- 配置分布式参数:
- 在可选配置中,选择期望的机器数量作为
worker count
。 - 例如,如果需要在 4 台机器上运行模型,将
worker count
设置为 4。
- 在可选配置中,选择期望的机器数量作为
- 启动模型:
- 点击 🚀 火箭图标 启动模型。
2. 使用命令行配置分布式推理
运行以下命令启动分布式模型:
xinference launch --model-name "llama-2-chat" --model-format ggmlv3 --size-in-billions 7 --quantization q4_0 --endpoint "http://${supervisor_host}:9997" --n-worker 4
其中 --n-worker
参数指定运行模型的机器数量。
(二)多模态模型和 Embedding 模型
1. 部署多模态模型
- 选择模型:
- 在 Launch Model 页面中,使用 “Model Ability” 过滤器选择多模态模型。
- 启动模型:
- 选择模型后,设置参数并启动。
2. 部署 Embedding 模型
部署 Embedding 模型与部署其他模型类似,但不需要配置额外的参数。通过 Web GUI 或命令行启动模型即可。
(三)自定义模型源
如果需要使用其他网站下载模型,可以通过设置环境变量 XINFERENCE_MODEL_SRC
来实现。例如:
export XINFERENCE_MODEL_SRC="https://example.com/models"
六、维护与监控
(一)监控服务状态
定期检查 Xinference 服务的状态,确保其正常运行。可以通过以下方式监控服务状态:
- 查看日志文件:
- Supervisor 和 Worker 的日志文件通常位于
/var/log/xinference
目录下。 - 使用以下命令查看日志:
tail -f /var/log/xinference/supervisor.log tail -f /var/log/xinference/worker.log
- Supervisor 和 Worker 的日志文件通常位于
- 使用 Web GUI 监控:
- 在 Supervisor 的 Web GUI 页面中,查看各节点的状态和性能指标。
(二)日志管理
- 日志存储:
- 确保日志文件存储在高速存储设备上,以减少写入延迟。
- 可以通过配置日志存储路径来优化日志管理。例如:
xinference --log-dir "/path/to/log/directory"
- 日志轮转:
- 使用日志轮转工具(如
logrotate
)定期清理旧日志文件,避免日志文件占用过多磁盘空间。
- 使用日志轮转工具(如
(三)性能优化
- 调整模型参数:
- 根据实际需求调整模型的量化类型、并行度等参数,以优化推理性能。
- 优化网络配置:
- 确保集群内各节点之间的网络连接稳定且带宽充足。
- 可以使用负载均衡器(如 HAProxy)优化网络流量分配。
(四)故障排查
- 检查服务状态:
- 使用
systemctl
或docker-compose
命令检查服务状态。 - 例如:
systemctl status xinference-supervisor docker-compose ps
- 使用
- 查看错误日志:
- 查看日志文件中的错误信息,定位问题原因。
- 如果遇到网络连接问题,可以使用
ping
或traceroute
命令检查网络连通性。
七、注意事项
(一)版本更新
Xinference 的具体部署步骤可能会根据版本更新和具体使用场景有所不同。建议定期查看最新的官方文档,以获取最新的功能和优化信息。
(二)安全配置
在生产环境中,建议对 Xinference 服务进行安全配置,包括但不限于:
- 使用 HTTPS:
- 为 Supervisor 和 Worker 服务配置 HTTPS,确保数据传输的安全。
- 身份验证:
- 配置身份验证机制(如 API 密钥或 OAuth),限制对服务的访问。
- 防火墙设置:
- 确保防火墙仅允许授权的 IP 地址访问服务端口。
(三)资源管理
- 监控资源使用:
- 使用工具(如 Prometheus 和 Grafana)监控 CPU、内存、GPU 等资源的使用情况。
- 动态资源分配:
- 根据实际需求动态调整资源分配,优化集群性能。
八、总结
Xinference 是一个功能强大的分布式推理框架,支持多种模型类型和部署方式。通过本文的详细介绍,读者可以快速掌握 Xinference 的使用方法,包括环境准备、集群搭建、模型部署、高级配置、维护与监控等方面。希望本文能帮助读者高效地搭建和管理 Xinference 集群,实现高性能的模型推理。