news 2026/9/18 8:01:21

从单机到 3 节点:xinference 分布式部署的 3 个核心工作流与参数取舍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从单机到 3 节点:xinference 分布式部署的 3 个核心工作流与参数取舍

从单机到 3 节点:xinference 分布式部署的 3 个核心工作流与参数取舍

【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference

你手上有 3 台机器:一台只有 CPU,另外两台各带 4 张 GPU。目标是让同一个模型跑起来、对外暴露 OpenAI 兼容 API,业务增长时能继续加机器。下面按"本地跑通 → 注册自定义模型 → 跨节点集群部署"三条线索,基于仓库当前代码(xinference/deploy/cmdline.py)梳理 xinference CLI 的全部核心命令,并说明每个关键参数在什么场景选什么值、代价是什么。

工具定位

Xinference 是架在 vLLM、SGLang、llama.cpp 等推理引擎之上的模型服务层,pip install xinference后同时获得一组命令行工具和默认监听 9997 端口的 REST 服务。与只服务单一引擎的 vLLM 不同,它用一套 OpenAI 兼容 API 统一管理 LLM、embedding、rerank、图像、音频和视频模型。集群里 supervisor 的作用类似餐厅前台:接住所有请求,派给空闲的 worker 处理。

数据流只有一条:客户端只和 supervisor 的 9997 端口说话,supervisor 按你 launch 时传入的--n-worker--worker-ip等放置参数把模型调度到 worker,worker 上跑真正的引擎。命令行工具的所有子命令(list、launch、terminate 等)本质都是对 9997 端口的 REST 调用,所以每条管理命令都可以带-e指向远端集群。

🚀 从 0 到第一次响应:最小命令集

下面 6 条命令足以完成安装到跑通模型。每条后面说明它做什么、成功时你应看到什么。

安装 CLI 与 Python 客户端,客户端版本需与服务端一致:

pip install xinference

启动本地集群——单机下 supervisor 和 worker 会在同一进程组内拉起,监听 9997:

xinference-local --host 0.0.0.0 --port 9997

成功输出形如Xinference supervisor 0.0.0.0:64570 startedXinference worker ... startedUvicorn running on http://0.0.0.0:9997。日志与模型缓存默认落在~/.xinference,用环境变量XINFERENCE_HOME可整体挪走。

启动前查一下这个模型支持哪些引擎、格式和量化组合,输出列为 Name / Engine / Format / Size / Quantization:

xinference engine -n qwen2.5-instruct

照表格里的一行来 launch。LLM 启动时--model-engine 是必填项,缺了会直接报错而不是用默认引擎;命令会显示实时进度条:

xinference launch --model-engine vllm -n qwen2.5-instruct -s 7 -f pytorch

成功输出的最后两行是进度条跑满 100.0%,以及Model uid: qwen2.5-instruct——不指定--model-uid时,uid 默认与模型名相同,后文示例都利用这一点。首次启动会从 HuggingFace 下载权重,国内网络可加环境变量XINFERENCE_MODEL_SRC=modelscope走 ModelScope 镜像。

列出当前运行中的模型,LLM 输出列为 UID / Type / Name / Format / Size / Quantization:

xinference list

进入交互式对话验证,输入空行退出:

xinference chat --model-uid qwen2.5-instruct

🧮 启动前算账:显存估算与量化选择

launch 失败最常见的结果是 OOM。与其撞墙再退,不如先用cal-model-mem离线估算。它按参数量、量化、上下文长度计算模型权重、KV cache、激活值的显存总和:

xinference cal-model-mem -n qwen2.5-instruct -s 7 -f pytorch -c 32768

输出会分行给出model memkv_cacheoverheadactivetotal: xxx MB (x GB)。对照nvidia-smi的空闲显存,留 10% 余量再决定上下文长度;估算支持--kv-cache-dtype 8/16/32,KV cache 用 8-bit 能直接压掉一半以上 cache 占用。

引擎选择遵循官方文档 About Model Engine 的建议:Linux 优先 vLLM 或 SGLang,资源有限选 llama.cpp(量化选项最多),兜底用 transformers;macOS 优先 MLX。引擎参数组合拿不准时,xinference engine -n <name> --model-engine vllm会把该引擎下合法的 format/size/quantization 组合直接列出来。

🧩 接入已有应用与自定义模型

跑起来的模型就是一个标准 OpenAI 端点,业务侧只需改 base_url:

curl -X POST http://127.0.0.1:9997/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model": "qwen2.5-instruct", "messages": [{"role": "user", "content": "你好"}]}'

返回结构与 OpenAI Chat Completions 一致;Anthropic 协议走http://127.0.0.1:9997/anthropic

自定义模型有两条路。模型家族在内置支持范围内时,v0.14.0 起可以直接传本地路径启动,免注册:

xinference launch --model-engine vllm -n qwen1.5-chat --model-path /opt/models/qwen1.5-7b

模型结构不在内置家族里时才需要注册。按 自定义模型文档 的模板写好 JSON(含model_familymodel_specsmodel_uri等字段),再提交到集群:

xinference register -t LLM -f /opt/models/my-model.json --persist

--persist 决定注册在服务重启后是否保留,生产环境建议始终带上。注册后用xinference registrations -t LLM核对(Is-built-in 列显示 False 即自定义项),不再需要时xinference unregister -t LLM --model-name my-model移除。分布式场景注册可加--worker-ip 10.1.20.12把模型文件定位到指定节点。

🌐 跨节点协作:supervisor 与 worker 配置

单台机器装不下 DeepSeek 这类大模型时,至少需要 2 个 worker 做跨机并行。supervisor 一台、worker 若干,全部通过 9997 端口通信;当前版本没有旧文档里的coordinator命令,对应入口是xinference-supervisorxinference-worker(见 pyproject.toml 的[project.scripts])。

在 10.1.20.11 上启动 supervisor,-H必须写对局域网 IP 或 0.0.0.0:

xinference-supervisor -H 0.0.0.0 --port 9997

两台 GPU 机各自加入集群。-e指向 supervisor,-H是本机对 supervisor 可达的 IP:

xinference-worker -e http://10.1.20.11:9997 -H 10.1.20.12 xinference-worker -e http://10.1.20.11:9997 -H 10.1.20.13

这条命令的作用就是让 worker 认到主节点并上报自己的地址;supervisor 日志出现 worker 地址即注册成功,xinference list -e http://10.1.20.11:9997应能看到两台的运行模型。

跨机 launch 时注意参数语义:--n-gpu--n-worker > 1时含义变为"每个 worker 用几张卡"。每台 4 卡、共 2 台,则 8 卡张量并行;用 vLLM v0.11.0+ 时按 分布式推理文档 的要求,必须显式传tensor_parallel_size(等于总 GPU 数)和 pipeline_parallel_size=1,且 Xinference 需 ≥ v1.17.1:

xinference launch -e http://10.1.20.11:9997 \ --model-engine vllm -n deepseek-r1 -s 0_5 -f pytorch \ --n-worker 2 --n-gpu 4 \ --tensor_parallel_size 8 --pipeline_parallel_size 1

不想跨机时,用--worker-ip 10.1.20.12--gpu-idx 0,1可以把小模型钉在指定 worker 的指定卡上,与--n-worker > 1互斥。

📏 参数取舍:引擎、量化与并行

参数何时选代价与收益
--model-engine vllmLinux 高并发主力吞吐最优,需 vLLM 环境
--model-engine llama.cppCPU 机 / 低资源量化选项最多,吞吐更低
--model-engine sglang长上下文、分布式v1.3.0 起支持跨 worker
--quantization q4_0显存紧张权重体积约为 q8_0 一半,精度有损
--quantization fp16/none精度优先显存接近翻倍,适合小模型
--n-gpu单机多卡张量并行n-worker>1 时变为每机卡数
--n-worker单机装不下需 ≥2 worker,vLLM 要配 tp/pp
--replica提吞吐与可用性每副本独立占一份显存

三个三角关系值得记住:量化位数越低、显存越省、精度越差;上下文越长、KV cache 越大、可并发请求越少;副本越多吞吐越高、总显存占用线性增长。engine 与量化的合法组合不要凭记忆猜,用xinference engine查询,cal-model-mem验算显存,两步都能省下一次失败启动。

✅ 真实环境 Playbook

Playbook A:3 机集群部署 DeepSeek-R1(10.1.20.x 网段)

前提:10.1.20.11(supervisor,CPU 机)、10.1.20.12 / 10.1.20.13(各 4 张 GPU),三台已pip install xinference,防火墙放行 9997 及 supervisor 日志中打印的 worker 内部端口(形如 64570)。

# 10.1.20.11 xinference-supervisor -H 0.0.0.0 --port 9997 # 10.1.20.12 xinference-worker -e http://10.1.20.11:9997 -H 10.1.20.12 # 10.1.20.13 xinference-worker -e http://10.1.20.11:9997 -H 10.1.20.13

三台就绪后在 10.1.20.11 上跨机启动:

xinference launch -e http://10.1.20.11:9997 \ --model-engine vllm -n deepseek-r1 -s 0_5 -f pytorch \ --n-worker 2 --n-gpu 4 \ --tensor_parallel_size 8 --pipeline_parallel_size 1

验证方法:xinference list -e http://10.1.20.11:9997中 deepseek-r1 一行出现且状态稳定,再curl http://10.1.20.11:9997/v1/models能看到 uid。

Playbook B:单机 7B + vLLM 调优后下线

xinference-local --host 0.0.0.0 --port 9997 --metrics-exporter-port 9998 xinference launch --model-engine vllm -n qwen2.5-instruct -s 7 -f pytorch \ --gpu_memory_utilization 0.9 xinference terminate --model-uid qwen2.5-instruct

--gpu_memory_utilization属于引擎透传参数:launch 对未知选项不校验,直接透给 vLLM,占满显存提吞吐。--metrics-exporter-port供 Prometheus 抓取。验证方法:terminate 后再xinference list,表格应为空;显存用nvidia-smi确认已释放。

Playbook C:注册本地模型文件并清理缓存

xinference register -e http://10.1.20.11:9997 -t LLM \ -f /opt/models/my-model.json -w 10.1.20.12 --persist xinference registrations -e http://10.1.20.11:9997 -t LLM xinference cached -e http://10.1.20.11:9997 xinference remove-cache -e http://10.1.20.11:9997 -n my-model --check

cached列出各 worker 的缓存文件及大小;remove-cache会先打印将删除的路径并交互确认,--check跳过交互直接删。验证方法:xinference cached中该模型行消失,磁盘df -h容量回收。

⚠️ 高频踩坑与自救

launch 秒退并报 ValueError。现象:命令刚执行就报--model-engine is required for LLM models。这是 v0.11.0 起的硬性校验(cmdline.py 第 985 行),不是环境故障。第一反应:确认命令里带了--model-engine。根因是引擎不再自动推断;修复就是补上参数,取值用xinference engine -n <name>查出来的合法行。

worker 加入集群后 supervisor 看不到它。现象:worker 进程活着,list里没有它的模型,launch 指定--n-worker 2报 worker 不足。第一反应排查:在 worker 机上执行curl -s http://10.1.20.11:9997应返回 JSON;再nc -vz 10.1.20.11 9997确认端口通。根因通常是两类:supervisor 用默认-H只绑了本机回环,或防火墙拦了 worker 内部端口(supervisor 日志里Xinference supervisor 0.0.0.0:64570 started那行的 64570 才是 worker 实际回连的端口,别只放 9997)。修复:supervisor 显式-H 0.0.0.0,安全组放行 9997 与该内部端口。

launch 进度条卡住或引擎报 CUDA out of memory。现象:下载到 100% 后加载阶段失败,vLLM 日志出现 OOM。第一反应:nvidia-smi看其他进程占了多少卡,确认不是显存被别的东西吃光。根因多是上下文默认值过大导致 KV cache 膨胀。修复:先用cal-model-mem -c <目标上下文>验算 total,把--context-length(透传参数)降到显存装得下的值,或换更激进的量化;--kv-cache-dtype 8是压 cache 的另一条路。

管理命令"连错了集群"。现象:xinference list是空的,但 Web UI 里明明有模型。根因:所有管理命令的默认 endpoint 是127.0.0.1:9997(cmdline.py 的get_endpoint),在跳板机上执行时就打到了本机不存在的实例。修复:对远端集群的所有命令显式加-e http://10.1.20.11:9997;若集群开启了认证,先xinference login -e <endpoint> --username admin --password <pwd>把 token 落盘,之后同 endpoint 的命令自动携带。

一页纸速查

命令一句话功能最常用选项适用角色
xinference-local单机起 supervisor+worker--port 9997开发/单机
xinference-supervisor集群主节点-H 0.0.0.0运维
xinference-worker加入集群的工作节点-e-H运维
xinference register注册自定义模型-f--persist开发/算法
xinference registrations查已注册模型-t LLM开发
xinference unregister注销自定义模型--model-name开发
xinference engine查引擎/量化合法组合-n--model-engine开发
xinference launch启动模型--model-engine--n-worker开发/运维
xinference list查运行中模型-e所有人
xinference terminate停止指定模型--model-uid开发/运维
xinference chat/generate命令行对话/补全--model-uid开发
xinference cached查各节点模型缓存-e--worker-ip运维
xinference remove-cache删除模型缓存-n--check运维
xinference cal-model-mem估算显存占用-s-c开发/运维
xinference stop-cluster停掉整个集群-e(必填)运维

引擎内部细节、Docker 部署、监控接入的完整选项,去读官方文档 使用 Xinference 与 推理后端 章节,集群拓扑设计参考 分布式推理。

本文基于仓库当前 Xinference v2.x 代码(2026-09),参数以官方文档为准。

【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 8:01:03

AI Agent驱动Unity编辑器:从命令行到自动化闭环

先说个背景&#xff1a;我最近在一个 Unity 项目上接 AI Agent 做自动化流程&#xff0c;处理的就是“让 Agent 直接驱动 Unity 编辑器编译与测试”这档子事。一开始觉得&#xff0c;这无非是跑几个命令行参数&#xff0c;调一下 Unity 而已。但真正把链路打通之后才发现&#…

作者头像 李华
网站建设 2026/9/18 7:58:59

品牌资产量化管理:从声量测量到动态价值模型

1. 品牌资产管理的量化困局品牌经理们常面临一个经典难题&#xff1a;当CEO询问"我们的品牌到底值多少钱"时&#xff0c;往往只能给出模糊的定性回答。传统品牌评估存在三大痛点&#xff1a;依赖抽样调查导致数据滞后、主观问卷难以反映真实心智、单维度指标无法捕捉…

作者头像 李华
网站建设 2026/9/18 7:57:37

神经网络与卷积神经网络实战:从原理到Caffe模型训练

简介&#xff1a;《人工智能教程 神经网络算法教程 卷积神经网络介绍 Caffe模型介绍》是一份145页的中文PDF文档&#xff0c;面向希望入门深度学习和计算机视觉的开发者、学生及研究人员。教程系统梳理了神经网络核心算法&#xff0c;重点讲解卷积神经网络&#xff08;CNN&…

作者头像 李华
网站建设 2026/9/18 7:57:32

Python+Vue校园二手拍卖系统与人脸识别实践

1. 项目背景与核心价值校园二手交易一直是个高频刚需场景。每到毕业季&#xff0c;大量教材、电子产品、生活用品被低价处理甚至丢弃&#xff1b;而新生入学时又需要采购这些物品。传统的线下跳蚤市场受时间和空间限制&#xff0c;信息不对称严重。我们团队开发的这套"Pyt…

作者头像 李华