从纯文本到视觉理解:LARQL多模态支持(SigLIP)架构解析 【免费下载链接】larql项目地址https://gitcode.com/gh_mirrors/la/larql点击查看免费下载LARQL 是一个用 Rust 编写的本地大模型推理框架它的多模态功能基于 SigLIP 视觉编码器只需一条命令就能让 Gemma 3 这样的模型看懂图片。本文将完整拆解这套多模态架构从图片文件如何变成 256 个视觉 Soft Token再如何拼接到语言模型的输入序列中以及跨模型家族的扩展设计。如何开启 LARQL 多模态图片输入一条命令让模型看图在多模态支持上线后LARQL 的run子命令新增了--image参数支持一次传入多张图larql run gemma-3-4b-it --image cat.jpg --image stop_sign.jpg describe both这是目前最直观的使用方式图片路径和文本提示词一起进入推理管线。几个值得注意的边界约束来自 run_cmd.rs 的校验逻辑--image必须搭配文本提示词纯图片对话属于后续阶段的工作与--ffn、--experts等实验性开关互斥保证多模态路径独立可测。对新手来说只需记住文本负责问什么--image负责看什么输出依然是纯文本如图片描述。LARQL 的三种多模态接入模式为什么选择 Embed-Splice在设计文档 docs/multi-modal.md 中LARQL 调研了把视觉信息送入解码器的三种结构接入模式代表模型特点LARQL 状态Embed-Splice嵌入拼接Gemma 3、Granite Vision、Qwen-VL编码器输出投影到 LM 隐层维度在占位符位置插入序列LM 前向过程不变✅ v1 采用Cross-Attention交叉注意力Llama 3.2 VisionLM 新增交叉注意力层类型读取独立的视觉 KV cache⏸️ 刻意推迟Prefix-Only纯前缀BLIP-2 时代视觉嵌入放在序列开头被 Embed-Splice 自然覆盖LARQL 选择 Embed-Splice 作为 v1 范围的判断很务实一套拼接机制就能覆盖 Gemma 3、Granite、Qwen-VL、音频模型等五个模型家族且不需要改动层图layer graph。更关键的是文档明确指出 Llama 3.2 Vision 的交叉注意力方案不是 trait 扩展而是前向传播重构——它要求把层循环变成多态的、把 KV cache 从单一缓冲变成集合因此被单独列为 Phase 6 的独立决策。SigLIP 视觉编码器像素如何变成特征矩阵视觉塔的代码分为两层配置与权重加载vision_tower.rslarql-models侧负责从模型config.json的vision_config子对象解析 SigLIP 参数patch 大小、隐层维度、归一化类型等并按 HuggingFace 的 tensor key 约定从 safetensors 中加载vision_tower.vision_model.*权重。CPU 前向传播vision_tower.rslarql-compute侧实现了完整的 SigLIP 前向。与语言模型的关键区别有三点双向注意力无因果 mask、GELU 激活、带 bias 的 LayerNorm。对于 Gemma 3 4BSigLIP 的输出是一个(4096, 1152)矩阵整张图被切成 4096 个 patch每个 patch 映射为 1152 维向量。图片的预处理同样讲究。image_input.rs 用双三次插值把 JPEG/PNG/WebP 图片缩放为编码器期望的正方形而归一化常数mean0.5, std0.5被刻意内嵌在编码器内部——源码注释特别强调这不是 ImageNet 统计量用错会悄无声息地产生略错的嵌入导致图片描述质量下降且难以归因。这是一个很好的工程提醒多模态管线里最危险的不是报错而是静默的数值漂移。Connector 投影器4096 patch 到 256 token 的四步通路语言模型不能直接消费 4096 个 patch 向量。Gemma 3 的视觉投影器projector.rs完成一次空间下采样 维度投影重塑为空间网格4096 个 patch 排成 64×64 网格AvgPool 4×464×64 池化为 16×16得到 256 个 Soft TokenRMSNorm在视觉隐层轴上做归一化矩阵投影1152 维 → 2560 维Gemma 3 文本隐层维度。(4096, 1152) → AvgPool(4×4) → (256, 1152) → RMSNorm → matmul → (256, 2560)这里有一个精细的缩放归属设计投影器内部自带 RMSNorm 与投影矩阵因此协议声明PrecomputedScaling::None——宿主侧不再叠加任何embed_scale。文档 docs/multi-modal.md 刻意没有开放Custom(f32)这种裸标量选项理由是模型相关的缩放因子若散落在协议层每个实现者都要记住它、复制时会静默失效正确归属地是随模型权重走、自带隐层维度信息的project()。EmbeddingPlan 拼接机制视觉嵌入如何入队多模态的 trait 表面定义在 multimodal.rs核心抽象只有几个ModalEncoder与语言模型无关的模态编码器SigLIP 喂给 Gemma 3 或 PaliGemma 都是同一个 SigLIPConnector投影器接口实现有线性、MLP-GELU、MLP像素重排等变体TokenBudget一张图占用多少占位位置——Fixed(256)Gemma 3、PerTile{729}Granite 每瓦片、DynamicQwen-VL 运行时决定PlaceholderProtocol占位符协议。Gemma 3 采用三明治结构start_of_image 256 ×image_soft_tokenend_of_image。CLI 侧的编排入口是 run_cmd_image.rs它把每张图组装成一个三段的EmbeddingPlanTokens([start_of_image]) Precomputed { 256 行投影后的视觉嵌入, modality: Image } Tokens([end_of_image]) Tokens(文本 token)真正外科手术的位置是前向传播的嵌入边界原来tokens → 嵌入表 → 层循环的硬编码路径被替换为接受分块计划的embed_plan。纯文本路径只构造一个Tokens块多模态路径则构造多个块——文本路径在位级上与旧实现保持完全一致这是保证重构安全的验收契约。一个常被忽视的设计收益vindex 存储层larql-vindex本来就是模态无关的它存的是按(layer, feature_index)索引的残差形状向量完全不关心这些向量来自文本还是图片。所以多模态化不需要动存储、KV cache 形状或lm_head只动了两个接缝嵌入边界和位置编码。跨模型家族扩展Granite Vision 的 AnyRes 瓦片压力测试Phase 2PR #144引入 Granite Vision 4.1它用 SigLIP2 编码器 MLP GELU 连接器 AnyRes 动态瓦片被文档明确称为拼接机制的压力测试Gemma 3 每张图只有1 个拼接点256 token 一块Granite 每张图有N1 个拼接点1 个基础瓦片 N 个细节瓦片每瓦片 729 token。如果EmbeddingPlan的拼接机制有 bugGranite 会立刻暴露它而 Gemma 的简单前缀结构发现不了。同时 AnyRes 瓦片数必须来自模型声明的合法集合valid_tile_counts()选错数量会直接破坏占位符核算——这体现了共享机制、按模型配置的分层思路。端到端行为由 multimodal_e2e.rs 守护用三张证据强度递增的参考图简单色块 → 图形 → 真实照片跑图片描述确保说得出图里有什么而不只是模型在背诵描述图片的口头禅。性能路线CPU 编码器 Metal LM 的混合管线当前生产管线是一条清晰的 CPU→GPU 混合流水线CPU 编码器 → CPU 连接器 → embed_plan(CPU) → Metal LM prefill → Metal decode这与大多数本地多模态运行时的起步方式一致。关键数字来自 docs/multi-modal.md 的测算项目数值SigLIP 参数量约 400M27 层hidden1152内存占用f16约 800 MBCPU 前向实测约 30 秒/张Release 构建Metal 编码器预期1–3 秒/张好消息是现有 Metal shader 库存已经覆盖了 SigLIP 管线的绝大部分算子sgemm、layer_norm、activation唯一的结构性缺口是双向注意力——而它只是现有因果注意力 shader 去掉一行if col row { -inf }掩码条件的变体不是新内核。因此 Metal 编码器被列为 Phase 2 之后的独立后续 PR届时将消除 GPU→CPU→GPU 的往返拷贝。后续阶段路线与关键文件索引按 ROADMAP.md 的进度多模态目前Phase 01 已发布trait 表面 Gemma 3 SigLIP CLI--imagePhase 2 已发布Granite Vision SigLIP2 AnyResPhase 3–6 处于设计阶段阶段内容状态Phase 0/1trait 表面 Gemma 3 SigLIP 前缀拼接✅ 已发布Phase 2Granite Vision 瓦片拼接压力测试✅ 已发布Phase 3序列中部文本-图像交错chat template 占位符归属设计中Phase 4Qwen2-VLM-RoPE 三维位置 动态预算设计中Phase 5音频Gemma 4 USM / Qwen2-Audio Whisper设计中Phase 6Llama 3.2 Vision 交叉注意力前向重构独立决策 关键文件速查设计文档docs/multi-modal.mdtrait 表面ModalEncoder/Connector/TokenBudgetmultimodal.rsSigLIP 配置与权重加载encoders/vision_tower.rsSigLIP CPU 前向encoders/vision_tower.rsGemma 3 视觉投影器connectors/projector.rsCLI 多模态编排run_cmd_image.rs图片解码与缩放image_input.rs小结一套机制五个模型家族LARQL 的多模态架构给新手的最大启示是接缝思维视觉理解能力不是加一个模块而是在嵌入边界和位置编码两处打准切口让编码器、连接器、占位符协议各自可替换。这也是为什么 LARQL 敢承诺新增第三个编码器家族Whisper、USM 等只是新架构代码而不需要再动前向传播。从一条--image命令到未来音频输入与跨注意力模型的完整路线这条路径已经铺好。赞分享【免费下载链接】larql项目地址https://gitcode.com/gh_mirrors/la/larql点击查看免费下载相关推荐Transformers 中 ModernVBert 视觉-语言编码器全解析从 ModernBert SigLIP 架构到掩码视觉语言推理实践Transformers 中 ModernVBert 视觉 语言编码器全解析从 ModernBert SigLIP 架构到掩码视觉语言推理实践 导读 Mo人工智能大模型深度学习NLP预训练微调模型推理服务Swagger-SpringMVC架构解析从核心模型到多格式支持Swagger SpringMVC架构解析从核心模型到多格式支持 背景与设计理念 在现代API开发中文档生成工具扮演着至关重要的角色。Swagger Spr开发工具后端文档fabric多模态支持文本、语音、图像全解析fabric多模态支持文本、语音、图像全解析 你是否还在为处理多种格式的内容而烦恼fabric框架提供了一站式的多模态解决方案让你轻松应对文本、语音和图像AI 应用人工智能提示工程CLI本地部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考