Xinference 中部署与使用 GLM-4.1V-Thinking 多模态推理模型完整指南
【免费下载链接】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
本篇技术指南以 Xinference 内置模型规格文档(glm-4.1v-thinking.rst)为核心,系统讲解在 Xinference 中通过统一推理 API 部署 9B 级视觉语言推理模型 GLM-4.1V-9B-Thinking 的完整流程:包括三种模型格式(pytorch / AWQ / GPTQ)的规格差异、xinference launch启动命令的逐参数说明、模型注册表(llm_family.json)中蕴含的模板与停止符等底层配置,以及 Xinference 对模型<think>推理过程内容的解析机制。读完本文,你将能独立完成该模型的本地或云端部署,并正确调用其 chat、vision、reasoning、tools 四大能力。
GLM-4.1V-Thinking 模型规格总览
GLM-4.1V-Thinking 是一个面向视觉语言推理场景的开源多模态模型。根据 Xinference 内置模型规格文档的描述,其设计目标是探索视觉语言模型推理能力的上限("designed to explore the upper limits of reasoning in vision-language models")。
在 Xinference 的模型注册表中,该模型的完整定义位于 xinference/model/llm/llm_family.json,核心元数据如下:
| 属性 | 值 |
|---|---|
| Context Length(上下文长度) | 65536(即 64K tokens) |
| Model Name(模型名) | glm-4.1v-thinking |
| Languages(支持语言) | en(英语)、zh(中文) |
| Abilities(能力) | chat、vision、reasoning、tools |
| Model Type(模型类型) | glm4v |
| Architectures(架构) | Glm4vForConditionalGeneration |
从能力组合可以看出,这不是一个普通的纯文本对话模型:vision表明它接受图像输入,reasoning表明它具备思维链式推理能力(输出中会包含思考过程),tools表明它支持函数调用等工具使用场景,这四种能力叠加,使其适合做图文理解、视觉问答、多模态推理等任务。
三种模型格式与对应启动命令
与多数 9B 级模型一样,GLM-4.1V-Thinking 提供了原始权重(pytorch)与两种主流量化格式(AWQ、GPTQ)共三种模型规格。每种规格对应不同的模型仓库 ID、量化方式与运行引擎。
Spec 1:pytorch 原始权重(9B)
- Model Format(模型格式):pytorch
- Model Size(参数量):9 Billion
- Quantizations(量化方式):none(不量化,使用 FP16/BF16 原始精度)
- Engines(推理引擎):vLLM、Transformers
- Model ID:
zai-org/GLM-4.1V-9B-Thinking(Hugging Face)/ZhipuAI/GLM-4.1V-9B-Thinking(ModelScope)
启动命令如下(${engine}从 vLLM / Transformers 中选择,${quantization}填写 none):
xinference launch --model-engine ${engine} --model-name glm-4.1v-thinking --size-in-billions 9 --model-format pytorch --quantization ${quantization}即最完整的写法为:
xinference launch --model-engine vllm --model-name glm-4.1v-thinking --size-in-billions 9 --model-format pytorch --quantization noneSpec 2:AWQ 量化(9B)
- Model Format(模型格式):awq
- Model Size(参数量):9 Billion
- Quantizations(量化方式):Int4(4-bit 权重量化)
- Engines(推理引擎):vLLM、Transformers
- Model ID:
QuantTrio/GLM-4.1V-9B-Thinking-AWQ(Hugging Face)/tclf90/GLM-4.1V-9B-Thinking-AWQ(ModelScope)
启动命令:
xinference launch --model-engine ${engine} --model-name glm-4.1v-thinking --size-in-billions 9 --model-format awq --quantization ${quantization}即:
xinference launch --model-engine vllm --model-name glm-4.1v-thinking --size-in-billions 9 --model-format awq --quantization Int4Spec 3:GPTQ 量化(9B)
- Model Format(模型格式):gptq
- Model Size(参数量):9 Billion
- Quantizations(量化方式):Int4-Int8Mix(混合精度量化)
- Engines(推理引擎):vLLM、Transformers
- Model ID:
QuantTrio/GLM-4.1V-9B-Thinking-GPTQ-Int4-Int8Mix(Hugging Face)/tclf90/GLM-4.1V-9B-Thinking-GPTQ-Int4-Int8Mix(ModelScope)
启动命令:
xinference launch --model-engine ${engine} --model-name glm-4.1v-thinking --size-in-billions 9 --model-format gptq --quantization ${quantization}即:
xinference launch --model-engine vllm --model-name glm-4.1v-thinking --size-in-billions 9 --model-format gptq --quantization Int4-Int8Mix选择建议:显存充足、追求最佳效果时选择 pytorch 原始精度;显存受限或需要更高吞吐时,优先考虑 AWQ Int4;GPTQ Int4-Int8Mix 则是另一种混合精度折中方案。三种格式在 vLLM 与 Transformers 两个引擎下均可运行。
launch 命令参数逐项解析
上述启动命令中的参数均定义于 xinference/deploy/cmdline.py,下表逐一说明其含义:
| 参数 | 简写 | 必填 | 说明 |
|---|---|---|---|
--model-engine | -en | 是(LLM 类型必填) | 指定推理引擎,此处可选vllm或Transformers |
--model-name | -n | 是 | 要启动的模型名称,此处为glm-4.1v-thinking |
--size-in-billions | -s | 视模型而定 | 以十亿为单位的模型参数量,此处为9 |
--model-format | -f | 否 | 模型格式,如pytorch、awq、gptq、ggufv2等 |
--quantization | -q | 否 | 量化方式,如none、Int4、Int4-Int8Mix |
此外,围绕启动命令还可以按需追加以下常用选项(同样定义于 cmdline.py):
--model-uid/-u:为模型指定自定义 UID,默认为 None(不指定时 Xinference 自动生成)。--replica/-r:模型副本数,默认 1,用于多副本负载均衡。--n-worker:模型使用的 worker 数量,默认 1。--n-gpu:使用的 GPU 数量,默认auto;当n_worker > 1时表示每个 worker 的 GPU 数。--worker-ip:分布式场景下指定模型运行在哪个 worker(按 IP)。--gpu-idx:指定 worker 上的哪些 GPU 可运行该模型(用逗号分隔)。--endpoint/-e:Xinference 服务端点地址。
需要说明的是:命令中的${engine}与${quantization}是占位符,实际执行时必须替换为上文表格中列出的真实取值。该模型三种格式在 vLLM 引擎下运行时,会自动将vllm相关依赖与system_numpy组装进对应的虚拟环境(见 llm_family.json),Transformers 引擎则要求transformers>=4.53.2。
源码级配置:llm_family.json 中的模型定义
在 Xinference 中,内置模型的可用性来自模型注册表。GLM-4.1V-Thinking 的完整定义可在 xinference/model/llm/llm_family.json 中查到,除了上文已列的元数据,还有几个对部署行为有直接影响的字段:
模型来源(model_src)
每个 spec 的model_src字段同时登记了 Hugging Face 与 ModelScope 两个下载源:
- pytorch spec 在 Hugging Face 上固定了精确的
model_revision(commitb627c82cd8fc9175ff2b82b33fb439eba260055f),保证每次下载权重一致;ModelScope 端则使用master分支。 - awq / gptq 两个量化 spec 在 ModelScope 端同样固定为
master分支。
Xinference 启动时会自动根据该配置从可用的模型源拉取权重,无需手工下载。
对话模板(chat_template)
模型自带完整的 Jinja 对话模板,关键点在于对多模态内容的编码:
- 用户消息中的
image类型内容会被编码为<|begin_of_image|><|image|><|end_of_image|>占位符; video类型内容对应<|begin_of_video|><|video|><|end_of_video|>;- 文本内容正常拼接,系统消息使用
<|system|>前缀,助手消息使用<|assistant|>前缀。
这意味着你可以直接通过 OpenAI 兼容的 Chat Completions API,在messages中携带{"type": "image", "image_url": ...}形式的多模态内容,模板会自动完成拼装,这正是该模型vision能力的底层支撑。
停止标记(stop / stop_token_ids)
stop:<|endoftext|>、<|user|>、<|observation|>stop_token_ids:151329、151336、151338
生成时遇到这些标记或 token id 会立即终止,避免模型继续输出多余内容(如幻觉出的下一个用户轮次)。
推理标记(reasoning_start_tag / reasoning_end_tag)
模型注册表中声明了推理过程标记:
reasoning_start_tag:<think>reasoning_end_tag:</think>
这两个标记是 Xinference 流式解析"思考内容"的关键依据。Xinference 在启动模型时会将它们透传给推理引擎(见 xinference/model/llm/core.py 与 xinference/model/llm/init.py),供流式输出解析使用。
推理内容(reasoning_content)的解析机制
作为 reasoning 模型,GLM-4.1V-Thinking 的回复分为"思考过程"与"最终答案"两部分,思考过程包裹在<think>与</think>之间。Xinference 通过 xinference/model/llm/reasoning_parser.py 中的ReasoningParser对这两部分进行区分与剥离:
- 在流式输出(SSE chunks)场景下,解析器按 token 增量(delta)持续跟踪
<think>/</think>标记的位置(reasoning_parser.py); - 当
<think>出现在前一文本、</think>出现在增量文本中时,增量中被</think>截断的部分归入reasoning_content,其余部分归入content; - 当两个标记同时出现在同一增量中时,同样按标记切分,分别填充
reasoning_content与content; - 未出现结束标记时,当前增量整体作为
reasoning_content返回,content置为None。
也就是说,调用方可以在流式响应中直接读取delta.reasoning_content字段获取模型的实时思考过程,而content字段始终只包含最终回答。该机制对 DeepSeek-R1 系列等其他带思考标记的模型同样适用(解析器注释中即以此为例),是 Xinference 统一处理推理模型输出的通用能力。
启动后的调用方式
模型启动成功后,会以 Xinference 统一的 OpenAI 兼容 API 暴露服务。假设默认端点http://localhost:9997,可通过以下方式验证与调用:
1. 查看已启动模型:
xinference list2. 发起多模态对话请求(携带图片):
curl -X POST http://localhost:9997/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "glm-4.1v-thinking", "messages": [ { "role": "user", "content": [ {"type": "image_url", "image_url": {"url": "https://example.com/your-image.jpg"}}, {"type": "text", "text": "请分析这张图片并给出推理结论"} ] } ], "stream": true }'注意请求体中的model字段即模型名glm-4.1v-thinking(如需自定义可在启动时用--model-uid指定)。
3. 解析流式响应中的推理内容:
开启"stream": true后,每个 chunk 的delta字段中可能同时出现reasoning_content(思考过程)与content(正式回答)两个子字段,分别对应上文解析机制的输出。
对于需要直接使用 Python 的开发者,可借助 Xinference 官方客户端封装请求细节,相关实现见 xinference/client/restful/restful_client.py。
小结与注意事项
- 部署选择:按显存与精度需求在 pytorch(none)、AWQ(Int4)、GPTQ(Int4-Int8Mix)三种格式中做选择,引擎建议优先 vLLM(吞吐更高),Transformers 可作为兼容性兜底。
- 命令占位符:务必用真实值替换
${engine}与${quantization},否则启动会失败。 - 多模态输入:借助内置 chat_template,图片/视频内容会自动转换为模型要求的特殊 token 序列。
- 推理内容:思考过程通过
reasoning_content字段与正式答案分离,流式与非流式场景均可获取。 - 模型源:权重默认从 Hugging Face 或 ModelScope 自动下载,模型注册表中固定了精确 revision,可复现性有保证。
如需进一步了解 Xinference 的安装与整体使用方式,可参阅 getting_started/installation.rst 与 getting_started/using_xinference.rst;若需查看该模型规格文档的原始来源,见 doc/source/models/builtin/llm/glm-4.1v-thinking.rst。
【免费下载链接】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),仅供参考