ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

在 Xinference 中部署 WeMM-Embedding-4B:多模态嵌入模型的完整实战指南

在 Xinference 中部署 WeMM-Embedding-4B:多模态嵌入模型的完整实战指南 在 Xinference 中部署 WeMM-Embedding-4B多模态嵌入模型的完整实战指南【免费下载链接】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/inferenceWeMM-Embedding-4B 是 Xinference 内置的腾讯多模态嵌入模型支持中文与英文文本并原生支持图像vision与视频video模态最大上下文长度达 262144 tokens。本篇基于 Xinference 仓库中的内置模型文档与对应源码实现讲解如何启动该模型、两种推理后端sentence_transformers 与 vLLM的差异、多模态输入的组织方式以及 Matryoshka 维度截断等关键参数在底层的具体处理逻辑帮助你在生产环境中快速接入一个文本图像视频统一向量化服务。一、模型规格从官方文档到 model_spec.json 的完整信息Xinference 内置模型文档 wemm-embedding-4b.rst 给出的基础信息如下项目值模型名WeMM-Embedding-4B支持语言zh中文、en英文能力Abilitiesembed向量嵌入向量维度Dimensions2560最大 Token 数Max Tokens262144模型 IDtencent/WeMM-Embedding-4B模型仓库Hugging Face 与 ModelScopeTencent-Hunyuan 组织均提供下载文档中只列出了embed这一能力但从仓库的模型规格文件 model_spec.json 可以看到更完整的定义该模型的model_ability为[vision, video]即它不只是文本嵌入模型而是一个可以消费图像与视频输入的多模态嵌入模型。此外规格中还明确了模型格式仅支持pytorch量化方式仅支持none不做 GGUF 等量化格式同一系列还有 WeMM-Embedding-2B2048 维featured 标记为 true与 WeMM-Embedding-9B4096 维三者max_tokens均为 262144规格中统一维护在tencent/WeMM-Embedding-*Hugging Face与Tencent-Hunyuan/WeMM-Embedding-*ModelScope两个来源。向量维度 2560 是模型的默认全量输出维度由于该系列模型支持 Matryoshka 表示学习源码中通过模型 config 的matryoshka_dimensions字段声明合法截断维度你可以通过 API 的dimensions参数请求更短的向量这一点后文会结合源码展开。二、启动模型一条命令与背后的依赖环境文档给出的启动命令如下xinference launch --model-name WeMM-Embedding-4B --model-type embedding执行该命令时Xinference 会根据model_spec.json中声明的virtualenv字段自动准备隔离的模型虚拟环境。WeMM-Embedding-4B 声明的依赖见 model_spec.json按推理引擎#engine#条件划分为两组sentence_transformers 引擎默认sentence-transformers5.7.0 transformers5.2.0 accelerate1.1.0 qwen-vl-utils0.0.14 #system_torch# #system_torchvision#vLLM 引擎vllm0.27.0这些版本约束并非随意指定引擎选择逻辑match_json会在启动时逐一校验。以 sentence_transformers 后端为例sentence_transformers/core.py 中的匹配函数要求sentence-transformers 5.7.0——WeMM 依赖 Sentence Transformers 5.7 引入的模态感知encode()路径能自动区分文本/图像/视频输入transformers 5.2.0qwen-vl-utils 0.0.14——该库负责视觉与视频输入的预处理WeMM 系列沿用了 Qwen-VL 风格的视觉处理管线模型格式必须为pytorch否则直接返回 WeMM-Embedding supports pytorch format only。对于 vLLM 后端vllm/core.py 在加载时会显式检查vllm 0.27.0不满足则抛出WeMM-Embedding requires vLLM0.27.0。测试用例 test_wemm_embedding.py 验证了这一约束vLLM 0.27.0 pytorch 格式匹配成功而 ggufv2 格式被拒绝。三、多模态输入格式Xinference 如何归一化你的请求WeMM 系列的输入归一化逻辑集中在独立模块 wemm.py 中这是理解该模型 API 使用方式的关键。is_wemm_model()以WeMM-Embedding-前缀识别该系列模型wemm.py随后normalize_wemm_inputs()wemm.py将 API 输入统一转换为聊天消息形式。它支持三种等价的输入写法1. 纯文本字符串——最简单形式会被包装为单条 user 消息一段用于嵌入的文本2. 扁平字典flat dictionary——同一条输入中按顺序组合 text、image、video 字段image_url/video_url也接受{ image: https://example.com/photo.jpg, text: 描述这张图片 }3. 角色/内容消息或消息列表——表达交错的多模态内容或多轮对话{ role: user, content: [ {type: image, image: https://example.com/photo.jpg}, {type: text, text: 这张图讲了什么} ] }以及多消息形式{messages: [ ... ]}。归一化过程中的关键规则见_normalize_content_itemwemm.py明确拒绝音频输入任何audio/audio_url/input_audio字段都会抛出WeMM-Embedding does not support audio input.——这与规格中只有 vision/video 两项能力一致图像/视频字段兼容image、image_url含{url: ...}包装等多种写法统一归一为{type: image, image: value}文本必须是字符串content 必须是非空列表或字符串否则抛出明确的 ValueError。本地文件路径在 vLLM 后端有专门的处理_media_url()vllm/core.py会将http://、https://、data:、file://开头的值原样透传而普通本地路径会转换为file://绝对 URI路径不存在时抛出WeMM-Embedding image/video not found错误。四、后端实现剖析一sentence_transformers 路径当使用默认引擎时请求会走 sentence_transformers/core.py 中专门为 WeMM 开辟的分支。源码注释解释了为什么这样做WeMM relies on Sentence Transformers 5.7s modality-awareencodepath. The local text-only helper above bypasses its role/content conversion and vision preprocessing.也就是说Xinference 不复用自己内置的纯文本encode()辅助函数它只处理 tokenization 与 forward无法处理视觉预处理而是直接调用SentenceTransformer.encode()的原生多模态路径。该分支做了三件重要的参数翻译工作维度截断API 参数dimensions被转换为 Sentence Transformers 的truncate_dim参数并先经过_validate_wemm_dimensions()校验sentence_transformers/core.py——合法取值来自模型 config 中的matryoshka_dimensions列表不在列表中则抛出WeMM-Embedding dimensions must be one of [...], got X。这保证了你请求的截断维度确实是模型训练时支持的原生档位归一化参数OpenAI 风格的normalize_embedding被重命名为 Sentence Transformers 认识的normalize_embeddings默认开启 L2 归一化便于用点积代替余弦相似度计算批处理限制batch_size默认强制为 1wemm_kwargs.setdefault(batch_size, 1)与多模态输入的单条推理语义保持一致。视频读取的兼容性补丁是这一后端另一个值得注意的细节。ensure_wemm_video_reader()wemm.py解决的问题是torchvision 0.24 移除了io.read_video而 qwen-vl-utils 0.0.14 在 decord/torchcodec 不可用时仍会回退到该函数。Xinference 通过向qwen_vl_utils.vision_process.VIDEO_READER_BACKENDS[torchvision]注入一个基于 PyAV 的替代读取器PyAV 本就是 qwen-vl-utils 的必需依赖来修复这一断链。该替代实现支持file://路径与data:base64 数据 URI、按时间区间截取片段video_start/video_end并用smart_nframestorch.linspace均匀抽帧最终返回带video_backend: pyav元信息的张量。补丁以幂等方式安装通过_xinference_wemm_pyav_fallback标记防重复注入并会记录 Using PyAV as the WeMM-Embedding video reader fallback. 日志方便你在排查视频输入问题时确认是否生效。五、后端实现剖析二vLLM 路径选择 vLLM 引擎时加载与推理流程都不同加载阶段vllm/core.py要求vllm 0.27.0从模型目录读取embedding_chat_template.jinja聊天模板文件缺失会报Missing WeMM-Embedding chat templateWeMM 需要把多模态消息渲染为模型约定的 prompt 格式以LLM(model..., runnerpooling, ...)构造池化pooling推理器并默认设置gpu_memory_utilization0.6用户显式传参则保留覆盖值由测试 test_wemm_vllm_load_uses_memory_default_and_preserves_override 验证注意vLLM 后端对其他嵌入模型会执行超过上下文长度自动截断逻辑但对 WeMM 模型跳过了该截断vllm/core.py 中not is_wemm_model(...)条件这是因为它 262144 的超大上下文由模型侧自身管理。推理阶段_embed_wemm()vllm/core.py调用同一个normalize_wemm_inputs()得到标准消息两个后端共享 wemm.py 的归一化逻辑用tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptFalse, chat_template模板)渲染出 prompt 文本通过iter_wemm_media()遍历消息中的 image/video 项用 vLLM 的fetch_image/fetch_video拉取媒体组装为multi_modal_data单个媒体取标量、多个取列表最终调用model.embed(vllm_inputs, use_tqdmFalse, pooling_paramspool_params)其中pooling_params携带dimensionsMatryoshka 截断与归一化开关。这一流程由测试 test_wemm_vllm_builds_prompt_and_multimodal_data 完整覆盖图像文本视频交错的输入最终产出渲染后的 prompt 与{image: image:file://..., video: video:file://...}形式的多模态数据。六、行为验证单元测试给出的可复现结论仓库中的测试用例可以作为 API 行为的活文档关键结论如下交错输入保持原样传递sentence_transformers 后端测试test_wemm_embedding.py断言{role: user, content: [{type: image, ...}, {type: text, ...}]}会被原样包成[[input_value]]传给encode()且truncate_dim、normalize_embeddingsTrue、batch_size1三个参数如预期生效批量请求的基数守恒传入[text, {image: x.jpg}, {video: x.mp4}]混合批次返回data长度严格为 3test_wemm_embedding.py依赖与格式匹配vLLM 后端仅匹配WeMM-Embedding-前缀 pytorch 格式且要求 vLLM 版本达标test_wemm_embedding.py。七、总结与适用前提WeMM-Embedding-4B 在 Xinference 中的定位是多模态统一嵌入文本、图像、视频走同一接口、产出同一向量空间中的表示262144 tokens 的上下文使其适合长文档与长视频场景。落地时需要注意启动使用xinference launch --model-name WeMM-Embedding-4B --model-type embedding模型从 Hugging Face 的tencent/WeMM-Embedding-4B或 ModelScope 的Tencent-Hunyuan/WeMM-Embedding-4B自动下载仅支持 pytorch 格式与none量化默认 sentence_transformers 引擎要求 sentence-transformers 5.7.0 / transformers 5.2.0 / qwen-vl-utils 0.0.14 的精确组合由虚拟环境自动安装vLLM 引擎则要求 vLLM 0.27.0不支持音频输入dimensions参数只能取模型matryoshka_dimensions声明的合法档位视频输入在缺少 decord/torchcodec 的环境中会自动切换 PyAV 回退读取器日志中可观察到相应提示信息。核心实现均可在仓库中溯源输入归一化与视频回退见 xinference/model/embedding/wemm.py两种后端的接入点分别在 xinference/model/embedding/sentence_transformers/core.py 与 xinference/model/embedding/vllm/core.py模型规格定义在 xinference/model/embedding/model_spec.json。【免费下载链接】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),仅供参考
返回列表