InternVL3_5-2B-Flash双路压缩管线详解:pixel_shuffle实现1024→256→64 Token极致压缩

【免费下载链接】InternVL3_5-2B-Flash

项目地址:https://ai.gitcode.com/OpenGVLab/InternVL3_5-2B-Flash
点击查看免费下载

InternVL3_5-2B-Flash 是开源多模态大模型 InternVL3.5 家族的轻量高效版本,其核心创新是双路视觉 Token 压缩管线:通过 pixel_shuffle 将每个图像分块(tile)的 1024 个视觉 Token 压缩到 256 或 64 个,配合内置的 Visual Resolution Router(ViR)逐块路由,在视觉输入减少约 50% 的情况下保持接近 100% 的原版性能。本文带你完整看懂这条"1024→256→64"压缩管线的每一环实现。

🎯 一句话认识 InternVL3_5-2B-Flash

项目说明
模型构成InternViT-300M(视觉编码器)+ MLP 投影 + Qwen3-1.7B(语言模型),总计约 2.3B 参数
核心创新双路压缩管线 + 逐 tile 路由(ViR),对应官方训练中的 Visual Consistency Learning(ViCO)阶段
解决的问题视觉 Token 数量大导致 LLM 预填充(prefill)开销高、推理慢
推理入口开启flash_mode后,generate()自动路由到generate_flash

模型的关键配置都在 config.json 末尾几行:flash_mode: true、downsample_ratio: 0.5、flash_relative_threshold: 0.1、flash_absolute_threshold: 0.5。

📉 为什么必须压缩?视觉 Token 的"膨胀"问题

InternVL 系列采用动态高分辨率策略:任意图像会被切成若干 448×448 的 tile(最多 12 个,外加一张缩略图,见 config.json 中max_dynamic_patch: 12)。而 ViT 的 patch 尺寸为 14,因此:

每个 tile 产生 (448 ÷ 14)² = 32 × 32 =1024 个视觉 Token

一张图用满 12 个 tile + 缩略图时,仅图像输入就有13000+ 个 Token,文本还没开始呢。LLM 自回归推理的成本几乎与输入 Token 数成正比,这正是"Flash"版本要动刀的地方——在送进语言模型之前,把视觉 Token 数量砍下去。

📐 三档 Token 规模:1024 → 256 → 64

整个压缩体系基于同一个基础操作:pixel_shuffle。它本质是一次无损的张量重排——把空间上相邻的若干特征格子的通道"合并"到一个 Token 上,空间分辨率下降、单 Token 通道维上升,总信息量不变,只是表达更"浓缩"了。

档位pixel_shuffle 缩放因子输出网格每 tile Token 数单 Token 通道维后续投影
ViT 原始输出—32×3210241024—
标准路(256)0.516×162561024×4 = 4096mlp1 → 2048
极速路(64)0.25(0.5²)8×8641024×16 = 16384mlp2 → 2048
  • 1024:InternViT(24 层,hidden 1024,见 modeling_intern_vit.py)对单个 tile 的原始输出,去掉 CLS 位后就是 32×32 网格。
  • 256:InternVL3.5 标准版的做法,缩放因子取downsample_ratio = 0.5,4 个相邻格子的通道合并,Token 数降为 1/4。
  • 64:Flash 新增的更狠一档,缩放因子直接取 0.5² = 0.25,相当于两次 pixel_shuffle,Token 数降为 1/16。

由于 64 路每个 Token 要"背"16384 维通道(256 路是 4096 维),所以配套的投影 MLP 也不同:256 路用两层的 mlp1,64 路用更深的三层 mlp2(中间维度 4096),把浓缩后的宽通道压回 LLM 的 2048 维输入空间。

🔀 双路压缩管线全流程拆解

双路管线的核心是extract_feature_flash,整个流程分三步:

第一步:ViT 统一抽取 1024 特征

所有 tile 先过一遍视觉编码器,拿到每 tile 1024 个 1024 维特征。注意 ViT 只跑一次——后面无论路由结果如何,都不需要重跑视觉编码器。

第二步:双路 pixel_shuffle 并行预备

在同一份 1024 特征上,代码同时预备出两种压缩表示(均在torch.no_grad()下完成,不产生额外梯度开销):

  • vit_embeds_256:pixel_shuffle(0.5) → 256 个 Token → mlp1
  • vit_embeds_64:pixel_shuffle(0.25) → 64 个 Token → mlp2

这一步的计算量相比 LLM 预填充 256 个 Token 的开销几乎可以忽略,属于"提前备好货"。

第三步:ViR 路由器给每个 tile 打分

路由器由两个组件构成:

  1. CrossAttentionPooling:用一个可学习的 query token,通过 4 轮交叉注意力把每个 tile 的 1024 个特征"投票"成 1 个汇总向量——相当于先看整块内容再决策。
  2. Gating:4 个残差 MLP block 做特征细化,最后接一个 2 分类的 gate 层,输出 softmax 概率probs[:, 0]/probs[:, 1]。

概率probs[:, 0]越高,说明该 tile 语义越"稀疏简单"(如纯色背景、大面积留白),可以放心压到 64;反之信息密集的 tile(文字、细节)应保留 256。

⚖️ 路由决策:相对 + 绝对"双阈值"判定

打分之后,真正的取舍发生在generate_flash中,判定条件有两条,必须同时满足才压缩到 64:

相对阈值:gate > quantile(gate 全集, 0.1) 绝对阈值:gate >= 0.5
  • 相对阈值(flash_relative_threshold: 0.1):取整批 tile 打分分布的 10% 分位数,落在最低 10% 的 tile 一律不压——相当于给最没把握的一批"留后路"。
  • 绝对阈值(flash_absolute_threshold: 0.5):两分类 softmax 概率和为 1,>= 0.5意味着路由器必须"占多数票"才动手。

判定通过后,compress_visual_tokens_in_sentence会做最后一件关键事:把该 tile 在句子里占位的 256 个<IMG_CONTEXT>Token(token id 见 added_tokens.json)物理删除其中的 192 个,只保留 64 个位置再填入 64 路特征。注意这不是"算了但不省"——序列长度真正缩短了,attention 计算量随之下降。

⚙️ 核心配置参数速查

参数取值作用定义位置
flash_modetrue开启 Flash 模式,generate()走双路管线config.json
downsample_ratio0.5256 路缩放因子;64 路为其平方 0.25config.json
flash_relative_threshold0.1相对分位数阈值(10% 分位)config.json
flash_absolute_threshold0.5绝对概率下限config.json
ps_version"v2"pixel_shuffle 版本;v2 修正了 v1 宽高未换回导致的图像转置问题configuration_internvl_chat.py
max_dynamic_patch12单图最大 tile 数,决定压缩收益上限config.json

🚀 快速上手:加载即用

Flash 逻辑已内置在模型里,加载方式与普通 InternVL3.5 一致,无需额外开关(trust_remote_code=True会加载本仓库的自定义代码):

from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained( "OpenGVLab/InternVL3_5-2B-Flash", torch_dtype=torch.bfloat16, trust_remote_code=True, use_flash_attn=True, ).eval().cuda() tokenizer = AutoTokenizer.from_pretrained("OpenGVLab/InternVL3_5-2B-Flash", trust_remote_code=True, use_fast=False)

之后正常调用model.chat(...)即可,双路压缩与逐 tile 路由全程自动完成,用户无感知。

✅ 小结

  • 双路并行、按需取用:256 路与 64 路特征在同一次前向中并行算好,路由器(ViR)按 tile 的语义丰富度决定走哪一路,简单区域用 64、复杂区域保 256。
  • 压缩是"真省":被选中压缩的 tile 会实际删除 192 个占位 Token,序列变短,LLM 预填充成本真实下降。
  • 双阈值保险:相对分位数 + 绝对概率的双重判定,避免路由器"误伤"信息密集的图像块。
  • 收益明确:官方数据显示该机制使视觉 Token 减少约 50%,同时保持接近 100% 的 InternVL3.5 原版性能,是端侧与低算力部署的利器。

如果你想继续深挖,推荐按 README.md 中的 Model Architecture 与 Visual Consistency Learning 两节,对照 modeling_internvl_chat.py 的extract_feature_flash、Gating、generate_flash三个函数逐行阅读,即可完整还原"1024→256→64"的每一步。

【免费下载链接】InternVL3_5-2B-Flash

项目地址:https://ai.gitcode.com/OpenGVLab/InternVL3_5-2B-Flash
点击查看免费下载
上一篇:如何追踪被重命名的文件?Markdown Preview的FileWatcher原子保存检测技巧详解
下一篇:Modern Web Guidance CSS布局实战:容器查询、:has()与滚动驱动动画的Agent友好写法

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

SpringBoot+Vue前后端分离管理系统开发实战:从架构到部署

SpringBoot+Vue前后端分离管理系统开发实战:从架构到部署

平时接私活或者在公司做内部系统&#xff0c;我最怕遇到一种需求&#xff1a;业务方上来就说要一套“完整的管理系统”&#xff0c;功能要全、界面要好看、还要能快速部署。你要是真从零开始搭&#xff0c;光权限、菜单、日志这些基础模块就够你熬几个通宵。最近刚好整理了一套…

2026/10/20 4:39:46 阅读更多 →
5G网络架构深度解析:从服务化架构到核心网部署实践

5G网络架构深度解析:从服务化架构到核心网部署实践

1. 为什么值得重新认识5G网络架构很多人对5G的理解还停留在“网速快”这个层面&#xff0c;觉得它不过是4G的升级版&#xff0c;下载电影从几分钟变成几秒钟而已。但如果你真正接触过5G网络的部署和调优&#xff0c;就会发现事情远没有这么简单。5G之所以能支撑起低时延、大连接…

2026/10/20 4:39:46 阅读更多 →
千问大模型Function Calling实操:从聊天机器人到能干活的Agent

千问大模型Function Calling实操:从聊天机器人到能干活的Agent

这一两年我最大的一个感受是&#xff1a;大模型的热闹劲儿过去了&#xff0c;真正静下心来研究怎么让它"干活"的人&#xff0c;开始吃到红利了。去年大家还在比谁的对话更流畅、更有"人味儿"&#xff0c;今年风向明显变了——客户上来就问&#xff1a;&quo…

2026/10/20 4:39:46 阅读更多 →

最新新闻

从20%转化异常到1,833.56分方案:Coomia DIP决策闭环全解析

从20%转化异常到1,833.56分方案:Coomia DIP决策闭环全解析

1. 一次转化异常背后的完整决策链条1.1 从数据异常到决策闭环的起点转化率从预期的基准线掉到20%附近&#xff0c;这个信号在任何业务场景里都足够刺眼。我见过不少团队遇到这种情况的第一反应是“赶紧改页面”“赶紧换素材”&#xff0c;但真正有效的做法是先停下来&#xff0…

2026/10/20 5:20:04 阅读更多 →
AI编程模型迭代加速:从Argon到Carbon,什么是真正的代码生成“手感”?

AI编程模型迭代加速:从Argon到Carbon,什么是真正的代码生成“手感”?

最近圈子里有个消息挺有意思&#xff1a;某头部科技公司还没把内部代号Argon的编程模型推到全员使用&#xff0c;下一代Carbon就已经开始小范围内测了。参与内测的人给出的评价很耐人寻味——他们说Carbon的编程“手感”已经接近内部基准模型Opus 5.5。这话听起来像一句随口的评…

2026/10/20 5:20:04 阅读更多 →
ResidualQuant:面向循环Transformer KV Cache的2-bit残差量化方案

ResidualQuant:面向循环Transformer KV Cache的2-bit残差量化方案

做模型推理优化这几年&#xff0c;我最大的一个体感是&#xff1a;真正卡住长上下文生成的&#xff0c;往往不是算力&#xff0c;而是内存带宽和缓存容量。模型权重可以离线反复压缩&#xff0c;已经卷到 4-bit、甚至更低&#xff1b;可 KV Cache 是运行时动态增长的数据&#…

2026/10/20 5:20:04 阅读更多 →
FunctionCall函数调用全解析:从原理到实战,让大模型真正“动手干活”

FunctionCall函数调用全解析:从原理到实战,让大模型真正“动手干活”

如果你正在做AI对话类产品&#xff0c;不管是客服助手、内容助手还是企业内部的知识问答系统&#xff0c;大概率会遇到这样一个让人头疼的瞬间&#xff1a;用户问“帮我查一下昨天订单的物流状态”&#xff0c;模型回了一句“很抱歉&#xff0c;我无法访问你的订单系统”。不是…

2026/10/20 5:19:03 阅读更多 →
PyInstaller打包Python脚本实战:从原理到多平台发布

PyInstaller打包Python脚本实战:从原理到多平台发布

Python 脚本写完之后&#xff0c;最常被问到的一个问题就是&#xff1a;怎么把它交给一个没装 Python 的人也能跑起来&#xff1f;你总不能让人家先装解释器、再配环境变量、再 pip install 一堆依赖。PyInstaller就是干这个的——把.py文件连同解释器和依赖库一起打包成单个可…

2026/10/20 5:19:03 阅读更多 →
Pulsar创新实践:消息中间件架构演进与生产落地指南

Pulsar创新实践:消息中间件架构演进与生产落地指南

最近不少技术群都在倒计时&#xff1a;COSCon‘25 同场活动 Pulsar Developer Day 还有 3 天就要开了。这个开发者日把主题定在“消息中间件创新实践”&#xff0c;我个人觉得比泛泛的技术布道更有看头。原因很简单&#xff1a;消息中间件这几年变化太快&#xff0c;快到“选型…

2026/10/20 5:19:03 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →