27届大模型岗面试准备十四多模态大模型 VLM——从视觉编码器到多模态推理的完整链路写在前面上一篇十三我们讲长上下文时留了个口子当上下文里不只有文字还有图像时问题又升了一个维度。这一篇就填这个坑——多模态大模型Vision-Language ModelVLM。你正在准备华为的多模态 LLM岗位这一篇几乎就是你的主场题。面试官不会只问VLM 是什么而是会追到图像怎么变成 token、和文本 token 怎么对齐、训练怎么分阶段、多模态推理到底难在哪。本文按架构 → 对齐 → 训练 → 推理的顺序展开最后给一段可运行的多模态推理代码用开源 VLM 接口。一、VLM 的主流架构三件套几乎所有主流 VLM 都遵循同一个骨架视觉编码器Vision Encoder 模态连接器Connector 语言模型LLM。三者职责清晰也是面试里最该讲明白的一张图组件作用常见实现关键设计点视觉编码器把图像从像素变成语义向量序列CLIP-ViT / SigLIP / EVACLIP冻结还是微调、用哪个粒度的 patch模态连接器把视觉向量翻译成 LLM 能读的词嵌入空间MLP 映射LLaVA / Q-FormerBLIP-2 / Resampler投影维度、是否带可学习查询语言模型接收交错的图文 token做推理与生成LLaMA / Qwen / DeepSeek保持原 LLM 能力不重训为什么是 CLIP-ViT 当编码器CLIP 在海量图文对上对比学习过它的图像特征天然和文本语义在同一个对齐空间里——这正好给后面的连接器省了大事。ViT 把图像切成 N×N 个 patch每个 patch 是一个 token所以一张 336×336、patch14 的图会产生 324 个视觉 token。这正是视觉 token 数量膨胀的根源也是后面上下文预算讨论的入口呼应第十三篇。两种连接器路线的取舍是高频追问MLP 映射LLaVA 路线视觉特征直接过两层线性层投影到 LLM 维度简单、训练快、效果够用。代价是视觉 token 数量不压缩324 个就 324 个。Q-Former / ResamplerBLIP-2 / Flamingo 路线用一组可学习 query 通过交叉注意力提炼出固定数量如 32 个视觉 token。大幅压缩 token 数但引入额外参数和训练复杂度。一句话总结连接器本质是在 token 数量与信息保真之间做权衡。二、模态对齐怎么让图和字说同一种语言LLM 只懂词嵌入空间图像特征是另一套坐标系。对齐alignment就是把视觉坐标映射到语言坐标。三种范式早期融合Early Fusion直接把视觉 token 拼到文本 token 序列里一起进 LLM 自注意力。LLaVA、Qwen-VL、GPT-4V 类都走这条——实现最直接但视觉 token 多会占上下文又回到第十三篇的预算问题。交叉注意力融合Cross-AttentionLLM 每层通过 cross-attention 去查视觉特征视觉特征不占自注意力序列。Flamingo 路线。优点是不膨胀上下文缺点是改动 LLM 结构、训练重。混合部分层用 early、部分层用 cross-attention兼顾两者。面试加分点能点出位置编码外推在这里也有作用——图像 patch token 有自己的一套位置和文本位置怎么交错排布是各自编号还是统一编号、是否加模态类型 embedding 区分图文是工程细节也常被问。三、训练范式三阶段流水线VLM 很少从零预训练主流是在已有 LLM 和视觉编码器上做缝合 分阶段训练因为图文对齐数据贵、算力贵。标准三阶段阶段训练目标解冻参数数据目的阶段一特征对齐让视觉特征匹配 LLM 词嵌入只训连接器图文对caption海量建立图→文映射不动 LLM阶段二指令微调多模态对话/问答连接器 LLM多模态指令数据学会按指令看图作答阶段三能力强化复杂推理/特定能力全量或部分高质量/RLHF 数据提推理、降幻觉、对齐偏好为什么阶段一只解冻连接器因为此时 LLM 的语言能力是宝贵的已有资产用海量但粗的图文对直接训 LLM 容易把语言知识冲掉catastrophic forgetting。先让连接器把视觉特征塞进LLM 能理解的区间再在阶段二用指令数据带 LLM 学会图文联合推理。这个先对齐后微调的节奏值得主动讲。四、多模态推理难在哪这是多模态岗最容易深挖、也最能体现你水平的环节。单模态 LLM 的推理是文本进文本出多模态推理多出三道坎视觉幻觉Visual Hallucination模型看见了图上没有的东西——凭文本先验编造比如把图里没有的红色杯子描述出来。根因是视觉编码器→LLM 的信息有损且 LLM 的文本先验太强会脑补。缓解靠高质量对齐数据 区域级 grounding让模型输出物体边界框强制它真的看到了。细粒度感知数清图里有几个物体、读对图表里的数字、区分左边第三个——这些对 ViT 的平均池化式表征是难点。高分辨率切片把图切成多张子图分别编码再拼接如 LLaVA-NeXT、InternVL是主流解。跨模态组合推理需要同时用图空间关系和文本提问约束才能答对的题比如把图里蓝色正方形旁边的物体数量告诉我。要求模型在统一空间里做联合推理而非各看各的。这里可以主动接回你的研究方向——多模态 RAG/多模态推理——但注意只讲通用方法论检索增强、多跳推理、跨模态对齐不展开未公开的具体研究点符合你一贯的保密要求。五、代码实战用开源 VLM 做多模态推理下面演示两种调用方式。第一段用 transformers 直接加载一个开源 VLM如 Qwen2-VL / LLaVA 类做图文推理第二段展示用 OpenAI 兼容接口传 base64 图像的多模态对话。皆可运行需安装对应包第二段注释掉本地依赖符合无 API 也可说明的原则。# -*- coding: utf-8 -*- 多模态推理两种范式本地 transformers / OpenAI 兼容接口可运行需依赖 # 范式 A本地 transformers 加载开源 VLM以 Qwen2-VL 风格为例 def infer_local(image_path: str, question: str) - str: from transformers import Qwen2VLForConditionalGeneration, AutoProcessor from qwen_vl_utils import process_vision_info import torch model Qwen2VLForConditionalGeneration.from_pretrained( Qwen/Qwen2-VL-7B-Instruct, torch_dtypeauto, device_mapauto ) processor AutoProcessor.from_pretrained(Qwen/Qwen2-VL-7B-Instruct) # 构造多模态消息图像以本地路径传入文本为问题 messages [{ role: user, content: [ {type: image, image: image_path}, {type: text, text: question}, ], }] # 模板化 把图像转成模型输入像素/特征 text processor.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) image_inputs, video_inputs process_vision_info(messages) inputs processor(text[text], imagesimage_inputs, videosvideo_inputs, paddingTrue, return_tensorspt).to(model.device) generated model.generate(**inputs, max_new_tokens256) # 去掉输入部分只取新生成 out_ids generated[0][inputs.input_ids.shape[1]:] return processor.decode(out_ids, skip_special_tokensTrue) # 范式 BOpenAI 兼容接口传 base64 图像不依赖本地大模型 def infer_api(base64_image: str, question: str, api_key: str, base_url: str) - str: from openai import OpenAI client OpenAI(api_keyapi_key, base_urlbase_url) resp client.chat.completions.create( modelmultimodal-model, messages[{ role: user, content: [ {type: image_url, image_url: {url: fdata:image/png;base64,{base64_image}}}, {type: text, text: question}, ], }], max_tokens256, ) return resp.choices[0].message.content if __name__ __main__: q 图里有几个物体分别是什么颜色 print(问题:, q) print(范式 A本地需安装 transformers qwen-vl-utils 并下载权重) print(范式 BAPI需 base_url 指向一个支持多模态的兼容网关。)这段代码把图像怎么进模型讲清楚了本地范式是路径/像素 → processor → 视觉 token → 拼接文本 token → 自回归生成API 范式则是base64 图像随消息体上传、服务端完成编码对齐。面试时被问图像 token 数量怎么算你可以接回第一篇的 patch 公式尺寸 / patch_size 的平方。六、高频面试题与答题要点VLM 和纯文本 LLM 的核心区别—— 多了视觉编码器和模态连接器推理时多了视觉 token 的编码、对齐与融合难点在视觉幻觉和细粒度感知。为什么 VLM 一般不在第一阶段训 LLM—— 防灾难性遗忘先只用海量图文对把连接器对齐再指令微调带 LLM 学多模态推理。一张 336×336、patch14 的图产生多少视觉 token—— (336/14)² 324 个。能现场算这个说明你真懂 ViT 切分。高分辨率图怎么处理不爆上下文—— 切片tile分别编码再拼接或 Q-Former 压缩到固定 query 数同时配合第十三篇讲的前缀缓存与 KV 压缩。怎么缓解视觉幻觉—— 高质量对齐数据、区域 grounding输出 bbox、高分辨率切片、RLHF 偏好对齐。小结VLM 的骨架是视觉编码器 连接器 LLM三件套训练走对齐 → 指令微调 → 强化三阶段难点集中在视觉幻觉、细粒度感知和跨模态推理。把它和前面讲的长上下文视觉 token 占预算、RAG多模态检索增强、Agent带视觉的具身/文档 Agent串起来你就有了一条完整的多模态知识链。下一组B 系列我们从 B13 开始把 Agent 的记忆做成带持久化的版本——让 Agent 跨会话也不忘事。