
Xinference 中部署 Ovis2 视觉大模型11 种规格组合、Transformers 引擎与源码级实现解析【免费下载链接】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 内置模型文档 Ovis2 展开完整覆盖 Ovis2 系列在 Xinference 中的 11 种模型规格1B 到 34B、pytorch 与 GPTQ 量化、xinference launch启动命令及各参数含义并结合 Ovis2 后端实现源码 深入讲解模型加载、多模态输入处理与流式生成的底层链路帮助你在自有 GPU 环境上一键拉起可对外提供 OpenAI 兼容视觉对话 API 的 Ovis2 服务。一、Ovis2 模型概览Ovis2 是 Xinference 内置模型目录中的一员在模型总览表中登记如下见 内置 LLM 索引属性值上下文长度Context Length32768模型名Ovis2支持语言en, zh能力Abilitieschat, vision描述Ovis (Open VISion) is a novel Multimodal Large Language Model (MLLM) architecture, designed to structurally align visual and textual embeddings.从源码结构看这些元数据与 llm_family.json 中的 Ovis2 条目一一对应context_length为 32768model_ability为[chat, vision]。该条目还声明了推理起止标记reasoning_start_tag/reasoning_end_tag与 Qwen 风格的聊天模板、停止 token151645、151643用于推理时的输出解析与截断。Ovis2 属于视觉能力vision 对话能力chat的图文多模态模型因此它的推理链路走的是 Xinference Transformers 引擎下的多模态模型通道而非普通文本 LLM 通道。二、完整模型规格清单Model SpecsOvis2 文档共列出 11 个 Model Spec与 llm_family.json 中的model_specs数组完全一致。汇总如下模型权重均可在 Hugging Face 或 ModelScope 两个模型中心的AIDC-AI组织下找到pytorch 全精度规格6 种Quantization: noneSpec参数量B量化引擎Model IDModel Spec 11noneTransformersAIDC-AI/Ovis2-1BModel Spec 22noneTransformersAIDC-AI/Ovis2-2BModel Spec 34noneTransformersAIDC-AI/Ovis2-4BModel Spec 48noneTransformersAIDC-AI/Ovis2-8BModel Spec 516noneTransformersAIDC-AI/Ovis2-16BModel Spec 634noneTransformersAIDC-AI/Ovis2-34BGPTQ 量化规格5 种Spec参数量B量化引擎Model IDModel Spec 72Int4TransformersAIDC-AI/Ovis2-2B-GPTQ-{quantization}Model Spec 84Int4TransformersAIDC-AI/Ovis2-4B-GPTQ-{quantization}Model Spec 98Int4TransformersAIDC-AI/Ovis2-8B-GPTQ-{quantization}Model Spec 1016Int4TransformersAIDC-AI/Ovis2-16B-GPTQ-{quantization}Model Spec 1134Int4, Int8TransformersAIDC-AI/Ovis2-34B-GPTQ-{quantization}几点使用提示所有规格的量化选项均为单个确定值pytorch 固定noneGPTQ 为Int4仅 34B 额外提供Int8不像部分文本模型有多种量化可任选文档中的${engine}占位符对 Ovis2 只有一个合法取值transformers因为整个系列仅登记了 Transformers 这一个推理引擎{quantization}占位符用于拼出真实的 Model ID如AIDC-AI/Ovis2-8B-GPTQ-Int4。启动命令文档为每个规格给出同一形式的启动命令以 Model Spec 4 的 8B 全精度为例xinference launch --model-engine transformers \ --model-name Ovis2 \ --size-in-billions 8 \ --model-format pytorch \ --quantization noneGPTQ 规格则以 34B Int8 为例xinference launch --model-engine transformers \ --model-name Ovis2 \ --size-in-billions 34 \ --model-format gptq \ --quantization Int8三、launch 命令参数与参数匹配机制上述命令的参数在 cmdline.py 中定义对 Ovis2 这类 LLM 有如下约束与行为--model-engine必填源码中明确if model_type LLM and model_engine is None: raise ValueError(--model-engine is required for LLM models.)所以启动 Ovis2 时必须显式给出引擎--size-in-billions与--model-format共同定位唯一规格启动流程会用引擎 模型名 参数量 格式 量化五元组去匹配内置/自定义的模型规格表从而确定要下载的 Model ID--quantization必须命中该规格登记的量化列表例如对 pytorch 规格传--quantization Int4会匹配失败只能传none对 Transformers 引擎的 BnB 格式还可通过--quantization-config传递量化配置cmdline.py 中定义为bnb quantization config for transformers engine。此外仓库提供了按引擎/格式/参数量/量化反查可用规格的查询命令见 cmdline.py可用它确认 Ovis2 在某个引擎下实际支持的组合例如xinference search-models --model-name Ovis2该命令会按model_format、model_size_in_billions、quantizations逐条过滤规格并打印匹配结果适合作为启动前核对参数拼写如Int4大小写的辅助手段。四、Ovis2 后端实现解析Ovis2ChatModelXinference 为 Ovis2 实现了专用的 Transformers 多模态后端 Ovis2ChatModel继承自 PytorchMultiModalModel。以下从源码逐段说明文档中Engines: Transformers背后的真实行为。4.1 注册与规格匹配match_jsonregister_transformer register_non_default_model(Ovis) class Ovis2ChatModel(PytorchMultiModalModel): OVIS_ARCHITECTURES {Ovis}match_json 是后端与规格之间的门禁判定条件有三格式model_spec.model_format必须属于[pytorch, gptq, awq, bnb, fp4]否则报错 Ovis2 transformer supports pytorch/gptq/awq/bnb/fp4 formats only。注意这比内置规格登记的 pytorch/gptq 更宽——从源码结构看自定义注册的 Ovis 架构模型即使采用 AWQ/BnB/FP4 格式只要走 Transformers 引擎也能被该后端匹配架构模型 config 中的 architectures 必须包含Ovis能力model_ability必须包含vision否则拒绝Ovis2 transformer requires vision ability。4.2 模型加载bf16 32K 多模态长度 强制 CUDAload_multimodal_model 的关键代码kwargs self.apply_quantization_config() self._model AutoModelForCausalLM.from_pretrained( self.model_path, torch_dtypetorch.bfloat16, multimodal_max_length32768, trust_remote_codeallow_trust_remote_code(self.model_family), **kwargs, ).cuda() self._text_tokenizer self._model.get_text_tokenizer() self._visual_tokenizer self._model.get_visual_tokenizer()可从中确认的事实Ovis2 以bfloat16精度加载multimodal_max_length32768与元数据中的上下文长度 32768 呼应末尾的.cuda()表明该后端要求 GPU 环境这是文档Engines: Transformers之外的重要适用前提量化通过apply_quantization_config()注入**kwargs因此 GPTQ 规格无需额外的量化参数即可正确加载模型同时暴露文本 tokenizer 与视觉 tokenizer 两个组件get_text_tokenizer()/get_visual_tokenizer()后续输入构造会同时用到二者load_processor()被置空pass因为 Ovis2 的处理器逻辑内嵌在模型对象中。4.3 消息转换与视觉输入处理对话入口是 PytorchMultiModalModel.chat最终走到 Ovis2 自己的两条路径1角色映射_parse_messages_ovis 把标准消息角色转换为 Ovis 原生角色——user→human、assistant→gpt、system保持system并只抽取文本片段组成对话历史。2视觉信息抽取_generate_chat_data 借助qwen_vl_utils.process_vision_info从 messages 中解析出image_inputs与video_inputs然后按三种情况改写最后一条用户 prompt单图max_partition 9prompt 前置image\n多图max_partition 图片数 1prompt 前置逐行的Image i: image标记视频先把 4D 视频张量逐帧转成 PIL 图像_convert_video_tensors_to_pilCUDA 张量先回 CPU 再转换max_partition 1prompt 前置每个帧一个image纯文本max_partition 0prompt 不变。随后调用模型自带的preprocess_inputs(messages_ovis, image_inputs, max_partition...)得到 Ovis 原生格式的prompt / input_ids / pixel_values并用文本 tokenizer 的pad_token_id构造attention_masktorch.ne(input_ids, pad_token_id)最后把pixel_values转到视觉 tokenizer 的 dtype 与设备上。3多模态嵌入合并build_inputs_from_messages 再调用self._model.merge_multimodal(...)把文本 token 与图像像素值融合为inputs_embeds左填充返回input_ids / inputs_embeds / attention_mask三件套——这正是文档中 structurally align visual and textual embeddings 描述的具体实现点。4.4 生成参数与流式输出build_generate_kwargs 固定了以下生成行为API 调用方只能影响其中的max_tokens与temperature参数取值说明max_new_tokensgenerate_config[max_tokens]或默认1024未在请求中指定 max_tokens 时默认生成 1024 tokendo_sample固定False采用贪心解码top_p/top_k固定None不启用随机采样temperature透传请求值可为 Noneeos_token_id/pad_token_id取自模型 generation_config 与文本 tokenizeruse_cacheTrue开启 KV cache流式场景由 build_streaming_iter 实现构造TextIteratorStreamertimeout60 秒、跳过 prompt 与特殊 token把生成任务放进独立线程执行self._model.llm.generate(...)向调用方返回 streamer 迭代器与输入长度从而实现 OpenAI 兼容接口下的 SSE 逐 token 推送。五、文档与数据源的关系llm_family.json 驱动 rst 生成值得一提的是本文开头的规格清单并非手工维护两份Ovis2 文档是由 llm.rst.jinja 模板 对 llm_family.json 的 Ovis2 条目做渲染生成的——模板逐条遍历model_specs输出 Model Spec N (format, size Billion) 小节、量化列表、Model ID 与 Model Hubs并渲染出统一的启动命令xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions ... --model-format ... --quantization ${quantization}。因此当上游模型库更新规格时文档与运行时的匹配规则model_specs是启动时用于定位 Model ID 的同一份数据保持天然一致。六、选型与运行建议结合文档与源码给出几条可操作的结论显存预算与规格选择1B/2B/4B 规格适合单卡小显存环境做快速验证8B/16B 是能力与资源的平衡点34B 建议优先使用 GPTQ 量化版本Int4/Int8以降低显存占用。具体显存需求因硬件与 batch 而异本文不给出未经验证的数值请以实际压测为准量化取舍若对精度敏感用 pytorchnone规格若显存紧张2B~16B 有现成 Int4 GPTQ 版本34B 还可二选 Int4 或 Int8引擎与硬件全系列仅支持--model-engine transformers且从.cuda()的加载代码 看必须运行在 NVIDIA GPU 上请求参数注意由于后端固定do_sampleFalse请求中的top_p/top_k不生效max_tokens缺省为 1024长回答场景请显式调大视觉输入通过标准多模态消息文本 图片 URL/文件发起请求即可单图、多图、视频帧三种输入在 源码中均有对应处理分支。相关源码索引规格数据 llm_family.json、Ovis2 后端 ovis2.py、多模态基类 multimodal/core.py、命令行入口 cmdline.py。【免费下载链接】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),仅供参考