在本地运行多模态 AI Agent:用 OpenVINO™ 部署 Gemma4-12B
一份 Windows 实战部署指南——从零环境到模型开口说话(还会看图)
一、为什么要在自己的机器上跑大模型
云端大模型固然好用,但也有例外,有时你的数据不能离开公司,有时你在没有 Wi-Fi 的飞机上,有时你只是不想再付一笔按量计费的 token 账单。好消息是:Google 于 2026 年 6 月开源的 Gemma4-12B-it,一个 120 亿参数的多模态模型,把过去得靠云端服务器才能跑的多模态与智能体能力,塞进了一台 16GB 内存的普通笔记本——离线、免费,还能看图、听音频。
本文将带你用 OpenVINO™ 在本地把这个会看图、能调工具的多模态 Agent 跑起来——涵盖从搭建环境、下载模型到完成部署的完整流程——所用的是开源示例仓库 openvino-dev-samples/openvino-gemma4-12b。作为一个展示 Gemma4-12B-it 能力的抢先体验(early-access)示例,它全程使用预编译发行包,上手快捷简单。更广泛、完整集成的支持将在未来的 OpenVINO™ 版本中提供。
仓库地址:https://github.com/openvino-dev-samples/openvino-gemma4-12b
二、先认认主角:Gemma4-12B 究竟是什么
Gemma4-12B 约有 120 亿参数,恰好位于 Gemma 4 家族的轻量级 E4B 与旗舰级 26B MoE 之间,补齐了中段空档。不过它最大的看点不是参数规模,而是一套「无编码器」的统一多模态架构。
传统多模态模型是两段式的「编码器 + 大语言模型」:图片先过视觉编码器,音频先过语音编码器,然后才进入语言模型。Gemma4 走了更激进的一条路:它砍掉传统视觉编码器,换成一个轻量的嵌入模块——一次矩阵乘法,加上位置编码与归一化——把图像数据映射进模型的嵌入空间;对于音频它更进一步,干脆完全移除音频编码器,把原始音频波形直接映射到与文本 token 相同的表示空间。于是图像、声音、文本都以统一形式进入同一个共享主干网络。收益很实在:更低的延迟、更省的内存,以及训练和微调都只需维护一个模型。它也是 Gemma 家族首个原生支持音频理解的中端模型。
几个开发者关心的硬指标:
-
内存门槛低:约 16GB 显存 / 统一内存即可本地运行;多模态质量接近 26B MoE,内存占用却不到其一半。
-
面向智能体:为多步推理与智能体工作流(agentic workflows)而生,并配套 Skills Repository 助力智能体开发。
-
更快的生成:内置多 Token 预测(MTP)草稿模块,提前预测后续 token 以降低延迟。
-
友好的许可:Apache 2.0,可免费商用,并兼容主流开源推理框架。
我们用 OpenVINO™ 配合 Intel GPU 加速在本地运行该模型。以上描述的能力来自模型本身;本文余下部分聚焦于如何用 OpenVINO™ 部署它。
三、它能拿来干嘛:典型应用场景
把一个多模态 + 智能体模型放到本地硬件上,能换来三样实在的东西:数据留在本地、断网也能用、还更省钱。常见场景:
-
隐私敏感工作:医疗、法务、财务等不便上云的资料——本地推理让数据留在你的硬盘上。
-
离线 / 弱网环境:出差、外勤、车间产线——网络不行时 AI 照样在线。
-
个人开发者与中小企业:不用昂贵的工作站或云 GPU;一台消费级笔记本就够做多模态原型和本地智能体。
-
长文处理:超长文档总结、大型代码库问答、会议纪要与财报分析,跨越长上下文。
-
多模态交互:图像问答(看图说话)与音频理解,串入本地智能体工作流。
场景说够了——动手吧,先从我们要用的 OpenVINO™ 工具讲起。
四、再认认工具:这套部署方案是怎么搭起来的
整个发行包是一棵由三个仓库构建而成的「统一安装树」,各司其职:
-
openvino —— OpenVINO™ 推理核心运行时(openvino.dll),负责把算子真正跑在 CPU/GPU/NPU 上。
-
openvino.genai —— GenAI 层:LLM/VLM 流水线、模型构建、分词器(openvino_genai.dll)。
-
openvino.pipeline —— 模块化管线引擎,用 YAML 描述「编码器 → 嵌入融合 → LLM」的拓扑,并附带可运行的 yaml_pipeline_sample.exe。
它们打包在一起,你只要解压即用。部署有两条路线,我们两条都会走:
Hugging Face safetensors (google/gemma-4-12B-it)|阶段一: yaml_pipeline_sample.exe + 配置 YAML|就地量化成 INT4 并序列化出 OpenVINO IR:openvino_language_model.xml / openvino_text_embeddings_model.xmlopenvino_vision_embeddings_model.xml / openvino_audio_embeddings_model.xml|阶段二: 同一个示例再跑一次 -> 直接从磁盘加载 IR(不再重建)== 用 openvino.genai 部署 IR
一句话:阶段一把原始权重炼成 OpenVINO™ 专用的 INT4 中间表示(IR),阶段二则证明这套 IR 可以被反复、快速地部署——这正是生产环境所需要的。
五、开工前的准备:给机器装好「弹药」
先对一下清单:
-
Windows 11(x64)。
-
一块 Intel GPU(Arc 独显,或 Core Ultra 的核显都行)加上较新的 Intel GPU 驱动。
-
约 40 GB 空闲磁盘:约 24 GB safetensors + 约 7 GB 导出的 IR + 发行包。
-
Python 3.10+(用于下载模型和一次性的分词器转换)。
下面所有命令都在仓库根目录、用 cmd 命令行执行。
5.1 下载并解压预编译发行包
从仓库的 Releases 页面(标签 v2026.06)下载约 150 MB 的发行包,解压到根目录的 install\ 下:
:: 下载发行包(约 150 MB)curl -L -o pipeline_windows_x86_64.zip ^https://github.com/openvino-dev-samples/openvino-gemma4-12b/releases/download/v2026.06/pipeline_windows_20260617_x86_64.zippowershell -Command "Expand-Archive -Path pipeline_windows_x86_64.zip -DestinationPath install -Force":: 验收一下dir install\setupvars.batdir install\samples\cpp\yaml_pipeline_sample.exe
install\setupvars.bat 会把 OpenVINO 和 GenAI 的 DLL 加进 PATH——后面的 .bat 脚本会替你自动调用它。
5.2 建好 Python 环境
scripts\setup_env.bat
这一步会创建 python-env\ 虚拟环境,并安装 transformers、huggingface_hub,以及 openvino-tokenizers==2026.2.*(版本特意对齐发行包里的 OpenVINO 2026.2,别让它们各说各话)。
六、把模型搬回家
激活虚拟环境,然后从 Hugging Face 把模型拉下来(约 24 GB,泡杯咖啡的时间):
call python-env\Scripts\activate.batpython samples\common\download_model.py google/gemma-4-12B-it models\gemma-4-12B-it
下载完成后,models\gemma-4-12B-it\ 里会有 model.safetensors(约 24 GB)、config.json、tokenizer.json 等。
接着做一次性的分词器转换,把 HF 分词器转成 OpenVINO 的 IR 格式:
python samples\stage1_safetensors\prepare_tokenizer.py models\gemma-4-12B-it
它会在模型目录里写出 openvino_tokenizer.xml / openvino_detokenizer.xml。这一步是必需的,因为推理引擎里负责「文本↔token」互转的模块吃的是 OpenVINO IR 格式的分词器,而不是原始的 tokenizer.json——转一次,以后就一直能用。
七、第一次部署:从 safetensors 点火
万事俱备——点火:
samples\stage1_safetensors\run.bat "How do black holes work?"
第一次运行时,引擎会加载 safetensors、就地量化成 INT4、把 IR 序列化写回模型目录,然后才开始生成。日志大致长这样(节选):
[Safetensors Copy] Loaded 677 tensors ...[SafetensorsWeightFinalizer] In-flight quantization enabled (INT4_ASYM) ...Pipeline constructed successfully.Pipeline execution finished in ~? msOutput 'generated_text': To understand how black holes work, ...
确认 IR 已经落到磁盘上:
dir models\gemma-4-12B-it\openvino_language_model.xmldir models\gemma-4-12B-it\openvino_text_embeddings_model.xmldir models\gemma-4-12B-it\openvino_vision_embeddings_model.xml
看到这几个 openvino_*.xml 文件,就说明「炼丹」成功——原始权重已经变成 OpenVINO 原生的 INT4 IR 了。
八、第二次部署:直接吃 IR,省去重建
既然 IR 已经躺在磁盘上,这次让引擎直接加载它——这才是「用 openvino.genai 部署 IR」真正的含义:
samples\stage2_ir_genai\run_ir.bat "Explain how OpenVINO accelerates inference."
你会注意到日志里再也没有 [Safetensors Copy] 和 In-flight quantization 那几行——引擎跳过了「炼丹」,直接从磁盘上的 IR 构建流水线,所以首 token 时间明显更短。生产环境里你显然不想每次启动都重新量化 24 GB 的权重,所以这才是你实际会用的路径。
想用 C++ 体验 GenAI 原生 API?仓库 samples\stage2_ir_genai\ 里附了两个参考样例(ov::pipeline::LLMPipeline 与 ov::genai::VLMPipeline)。它们之间的 IR 契约差异在 NOTES.md 里讲清楚了,动手前建议先读一眼,能省下不少挠头时间。
九、它还会看图说话
Gemma4 是个多模态选手——阶段一其实已经一并导出了视觉、文本、语言三套 IR。给 yaml_pipeline_sample.exe 喂一张图片,你只需接上视觉分支:
call install\setupvars.batinstall\samples\cpp\yaml_pipeline_sample.exe ^samples\stage1_safetensors\config\config_modeling_text_img_audio_cb_st.yaml ^"image=path\to\your.png" "prompt=What is shown in this image?"
拿金门大桥的照片实测,输出(节选)大致是这样的:
Pipeline constructed successfully.Pipeline execution finished in ~13000 msOutput 'generated_text': The image shows a close-up view of a large, complex metalor steel structure, likely part of a bridge ... set against a background of water ...
注意这依然是「从 IR 部署」——引擎读的还是磁盘上那几个 openvino_*.xml,只是这次多走了一条视觉分支,并没有回头去碰 safetensors。音频也是同理:把参数换成 audio=你的录音.wav,引擎就会用上 openvino_audio_embeddings_model.xml。
十、给它套个壳:多模态聊天机器人
命令行跑通固然爽,但要给同事演示,你需要一个能点的界面。仓库里带了一个基于 Gradio 的多模态聊天机器人 demo(samples\chatbot\):打开网页、输入文字、可选附上一张图片或一段音频,回答会一个词一个词地流式蹦出来。
samples\chatbot\run_chatbot.bat
▶ 演示视频
十一、收尾
到这里,你已经在自己的机器上、完全离线地跑通了一个 120 亿参数的多模态 Agent:把原始权重炼成 INT4 IR,反复快速地部署这套 IR,让它描述了一张图片,并把它接入了工作流。没有云、没有 token 账单,数据一步也没离开过你的硬盘。
更多推荐



所有评论(0)