news 2026/9/16 20:57:24

在 Xinference 中部署 GLM-4V-9B 多模态模型:规格解析、引擎选择与启动实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Xinference 中部署 GLM-4V-9B 多模态模型:规格解析、引擎选择与启动实践

在 Xinference 中部署 GLM-4V-9B 多模态模型:规格解析、引擎选择与启动实践

【免费下载链接】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

GLM-4V 是智谱 AI 推出的 GLM-4 系列最新一代开源预训练模型,同时具备chat(对话)vision(视觉理解)两种能力。本文以仓库文档 doc/source/models/builtin/llm/glm-4v.rst 为主线,结合 Xinference 内置的模型注册表与引擎实现源码,带你完整掌握该模型的规格信息、vLLM / Transformers 双引擎的差异、启动命令的每个参数,以及如何通过 OpenAI 兼容 API 进行多模态推理调用。

模型概览:GLM-4 系列的多模态开源版本

根据 Xinference 内置模型注册表 xinference/model/llm/llm_family.json 中的定义,glm-4v 的核心元数据如下:

属性
Context Length(上下文长度)8192
Model Name(模型名)glm-4v
Languages(支持语言)en(英文)、zh(中文)
Abilities(模型能力)chat(对话)、vision(视觉理解)
Description(模型描述)GLM-4 系列最新一代预训练模型的开源版本,由智谱 AI(Zhipu AI)发布
Architectures(模型架构)ChatGLMModel
Model Type(模型类型)chatglm

从能力组合可以看出,glm-4v 是一个标准的多模态对话模型:既可以像普通 LLM 一样进行文本对话,也支持输入图片并结合图片内容回答问题。其架构类型为ChatGLMModel,底层沿用了 ChatGLM 家族的建模方式。

模型规格(Model Spec):9B PyTorch 权重,无量化分支

glm-4v 在当前仓库中只注册了一个规格(Model Spec 1),具体参数如下:

规格项
Model Format(模型格式)pytorch
Model Size(参数量)9 Billion(90 亿参数)
Quantizations(量化选项)none(不量化,仅原精度权重)
Engines(可用推理引擎)vLLM、Transformers
Model IDzai-org/glm-4v-9b

对应的模型来源(model_src)在注册表中被配置为三个主流模型分发平台(xinference/model/llm/llm_family.json):

  • Hugging Facezai-org/glm-4v-9b,固定修订号01328faefe122fe605c1c127b62e6031d3ffebf7(该修订号确保了可复现的下载结果);
  • ModelScopeZhipuAI/glm-4v-9b,跟随master分支;
  • OpenMind HubAI-Research/glm-4v-9b

也就是说,启动模型时 Xinference 会根据你的配置自动从对应平台拉取权重,无需手动指定完整路径——只需给出模型名glm-4v与参数量9即可。

需要特别注意的两点

  1. 量化选项只有none:该规格不提供 GPTQ、AWQ 等量化分支,因此启动时--quantization只能填none,模型将以 FP16 原精度加载(下文 Transformers 引擎加载逻辑中会看到torch_dtype=torch.float16的硬编码)。
  2. 引擎可选 vLLM 或 Transformers:两者在性能与部署约束上差异明显,下一节将分别说明。

启动命令逐参数解析

原文档给出了标准的启动命令,格式如下:

xinference launch --model-engine ${engine} --model-name glm-4v --size-in-billions 9 --model-format pytorch --quantization ${quantization}

其中${engine}需替换为vllmtransformers${quantization}需替换为none。实际可执行的命令示例:

# 使用 Transformers 引擎启动 xinference launch --model-engine transformers --model-name glm-4v --size-in-billions 9 --model-format pytorch --quantization none # 使用 vLLM 引擎启动 xinference launch --model-engine vllm --model-name glm-4v --size-in-billions 9 --model-format pytorch --quantization none

各参数含义如下:

参数含义本模型的取值
--model-engine指定推理引擎,决定底层加载与调度框架vllm/transformers
--model-nameXinference 注册表中的模型名glm-4v
--size-in-billions参数量(十亿),用于精确定位规格9
--model-format权重格式pytorch
--quantization量化方式,本规格无量化分支none

命令执行成功后,Xinference 会返回一个包含模型 UID 的响应,后续所有推理请求都通过该 UID 访问模型实例。

引擎底层实现:Transformers 引擎的工作原理

glm-4v 的 Transformers 引擎实现在 xinference/model/llm/transformers/multimodal/glm4v.py,类Glm4VModel通过装饰器同时注册为多模态批处理模型Transformer 模型。该实现有几个关键细节值得展开:

1. 权重加载方式

load_multimodal_model(glm4v.py)使用AutoModelForCausalLM加载权重,并显式指定:

  • torch_dtype=torch.float16:模型以 FP16 精度加载,这也是该规格不提供量化分支、推荐在具备足够显存的 GPU 上运行的原因;
  • trust_remote_code=True(由allow_trust_remote_code决定):ChatGLM 系列需要运行远程代码(modeling_chatglm.py),必须开启;
  • low_cpu_mem_usage=Truedevice_map:由decide_device根据device配置(默认auto)自动选择设备。

2. 单图限制:每轮消息最多一张图片

多模态消息预处理逻辑_get_processed_msgs(glm4v.py)表明:

  • 消息内容支持 OpenAI 风格的text/image_url两种内容块;
  • 每个消息只允许一张图片,若传入多张图片会抛出RuntimeError("Only one image per message is supported")
  • 图片通过_decode_image解码后,以"image"字段拼入消息,再交给 tokenizer 的apply_chat_template处理。

3. 生成配置默认值

build_generate_kwargs(glm4v.py)和prepare_sanitize_generate_config(glm4v.py)定义了生成时的默认行为:

  • temperature默认0.7(若未在请求中显式指定,则在 sanitize 阶段回落为 0.8);
  • top_p默认0.8
  • max_length默认取请求中max_tokens的值,缺省为2048
  • do_sample=True,即默认开启采样;
  • eos_token_id[151329, 151336, 151338],与注册表中的stop_token_ids一致。

4. 停止词与图像 token 注意力掩码

  • 注册表中配置的stop["<|endoftext|>", "<|user|>", "<|observation|>"](llm_family.json),其中get_stop_strs在流式输出时以<|endoftext|>作为截断标记;
  • 视觉部分的关键实现是get_full_attention_mask(glm4v.py):根据vision_config中的image_sizepatch_size计算图像 patch 数((image_size // patch_size // 2) ** 2),在boi_tokeneoi_token之间插入等长的全 1 注意力掩码,保证图像区域参与自注意力计算——这正是视觉输入能被模型"看见"的原理所在。

vLLM 引擎的部署约束

文档标注 glm-4v 可用 vLLM 引擎,但 vLLM 的多模态支持存在硬性平台要求。在 xinference/model/llm/vllm/core.py 中,多模态引擎的准入检查逻辑明确:

  • 仅支持 Linux 系统
  • 仅支持 CUDA GPU、MLU GPU、VACC GPU 或 MUSA GPU
  • 仅支持pytorch / gptq / awq / fp4 / fp8 / bnb格式(本模型的 pytorch 格式符合要求,但无量化分支);
  • 模型必须声明visionaudioomni能力(glm-4v 具备vision,满足条件)。

因此,若你的环境不满足上述 GPU 与操作系统条件,应改用 Transformers 引擎(CPU 或 Mac 等环境可尝试,但多模态推理对算力要求较高,建议优先使用 NVIDIA GPU)。

此外,从 llm_family.json 的virtualenv.packages可以看到,该模型的虚拟环境依赖按引擎条件化安装(#transformers_dependencies#/#vllm_dependencies#等),即选择不同引擎时只安装对应的推理依赖,避免环境臃肿。

推理调用:OpenAI 兼容的多模态请求

模型启动后,即可通过 Xinference 暴露的 OpenAI 兼容 Chat Completions API 进行多模态推理。典型的图片理解请求格式如下:

curl -X POST http://localhost:9997/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "<启动后返回的模型 UID>", "messages": [ { "role": "user", "content": [ {"type": "text", "text": "请描述这张图片的内容"}, {"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}} ] } ], "max_tokens": 512, "temperature": 0.7, "stream": true }'

请求格式与 OpenAI 多模态接口保持一致,image_url同时支持公网图片地址与本地 base64 编码图片。需要注意上文提到的单图限制:一条 user 消息中最多携带一张图片;多轮对话中每一轮都可以附带一张新图片,模型会基于完整对话上下文与最新图片进行回答。

小结与使用建议

围绕 glm-4v 模型文档,本文完成了三件事:梳理了模型的完整规格(8192 上下文、9B 参数、chat + vision 能力、en/zh 双语);逐参数拆解了启动命令;并从 glm4v.py 与 vllm/core.py 源码层面验证了引擎实现的细节与约束。

实践要点回顾:

  • 量化固定为none,模型以 FP16 原精度加载,请预估约 18 GB 以上的显存占用(含 KV Cache 与运行时开销),显存不足时优先选择vllm引擎获得更好的批处理与显存管理;
  • vLLM 引擎仅限 Linux + 特定 GPU 平台,不满足条件时使用transformers引擎;
  • 每轮消息仅支持一张图片,这是模型侧的实现限制,调用方需在应用层做好图片切分与多轮组织;
  • 生成参数(temperature=0.8top_p=0.8)在未显式指定时由引擎自动填充,业务上如需确定性输出可显式设置更低的温度值。

通过上述命令与接口,你可以把 GLM-4V-9B 快速接入到现有的 OpenAI 兼容生态中,实现图像问答、视觉理解等多模态应用。

【免费下载链接】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/16 20:56:20

MTK DRM显示驱动初始化全解析:从KMS到组件框架

MTK平台的显示驱动&#xff0c;说穿了就是一套Linux原生的DRM/KMS实现&#xff0c;但第一次打开mtk_drm_drv.c的时候&#xff0c;我确实懵了几天——正常的DRM驱动是platform_driver直接probe完set up&#xff0c;而MTK这边到处是component_add、component_match_add、componen…

作者头像 李华
网站建设 2026/9/16 20:54:34

text-to-cad并发构建保护机制:锁等待与竞态处理的工程设计细节

text-to-cad并发构建保护机制&#xff1a;锁等待与竞态处理的工程设计细节 【免费下载链接】text-to-cad A library of agent skills for CAD, CAE and CAM 项目地址: https://gitcode.com/GitHub_Trending/tex/text-to-cad text-to-cad 是一个面向 CAD、CAE 和 CAM 的 …

作者头像 李华
网站建设 2026/9/16 20:53:11

OpenXCAP not yet configured?TaoToken 这样给 Codex 换通道再排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华