現(xiàn)原理全解析)
【免費(fèi)下載鏈接】InternVL3_5-8B-Flash項(xiàng)目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-8B-Flash點(diǎn)擊查看免費(fèi)下載InternVL3_5-8B-Flash 是 OpenGVLab 開(kāi)源的多模態(tài)大模型Multimodal LLM屬于 InternVL3.5 系列中面向推理效率的 Flash 變體。它引入視覺(jué)分辨率路由器ViR, Visual Resolution Router對(duì)每個(gè)圖像分塊實(shí)時(shí)決定用 64 還是 256 個(gè)視覺(jué) token 表示在視覺(jué) token 數(shù)平均減少約 50% 的同時(shí)保持接近 100% 的基礎(chǔ)模型性能。源碼中三大核心機(jī)制分別是pixel_shuffle空間壓縮、Gating路由決策與generate_flash推理流水線。本文不堆砌代碼面向新手逐一講清它們的實(shí)現(xiàn)原理。一、模型結(jié)構(gòu)總覽三大件與一個(gè)Token 漏斗 InternVL3_5-8B-Flash 沿用經(jīng)典的 ViT – MLP – LLM 三段式架構(gòu)詳見(jiàn) README.md 的 Model Architecture 章節(jié)組件作用關(guān)鍵數(shù)字ViT 視覺(jué)編碼器InternViT將每個(gè) 448×448 分塊編碼為 1024 個(gè)視覺(jué) tokenpatch 14×14 → 32×32 網(wǎng)格即 1024 個(gè)位置MLP 投影器mlp1/mlp2把視覺(jué) token 投影到語(yǔ)言模型維度256-token 通路用mlp164-token 通路用mlp2LLM 語(yǔ)言模型Qwen3-8B基于視覺(jué)文本 embedding 生成回答隱藏維度 4096兩個(gè)新手必須理解的背景知識(shí)動(dòng)態(tài)分塊Dynamic Tiling長(zhǎng)邊圖像會(huì)被切成最多 12 個(gè) 448×448 分塊并額外附加一張縮略圖見(jiàn) config.json 的min_dynamic_patch/max_dynamic_patch與use_thumbnail。每個(gè)分塊獨(dú)立走下面描述的token 漏斗。Token 漏斗 1024 → 256 → 64ViT 對(duì)每個(gè)分塊輸出 1024 個(gè) tokenmodeling_intern_vit.py 的InternVisionModelInternVL3.5 基礎(chǔ)版先壓縮到256Flash 版再根據(jù)路由結(jié)果把部分分塊進(jìn)一步壓到64。二、pixel_shuffle 精讀空間換通道的三行張量重排 實(shí)現(xiàn)位置modeling_internvl_chat.py。pixel_shuffle本質(zhì)是計(jì)算機(jī)視覺(jué)里的經(jīng)典space-to-depth空間轉(zhuǎn)深度操作核心思想一句話把相鄰 2×2 的 token 合并成 1 個(gè) token把省下的空間分辨率換成通道寬度——信息沒(méi)有丟棄空間分辨率降了每個(gè) token 的通道數(shù)翻倍。以scale_factor0.5為例輸入為單分塊特征[B, 32, 32, 1024]先按高減半、通道翻倍重排[B, 32, 16, 2048]并交換寬高兩維再做一次寬減半、通道再翻倍得到[B, 16, 16, 4096]展平后即256 個(gè) token每個(gè) 4096 維。Flash 版把壓縮率疊乘scale_factor downsample_ratio ** 2 0.25同一套操作得到64 個(gè) token每個(gè) 16384 維。兩條通路對(duì)比通路scale_factor每分塊輸出 token單 token 通道數(shù)投影器基礎(chǔ)通路InternVL3.50.52564096mlp1Flash 壓縮通路0.256416384mlp2投影器定義在 modeling_internvl_chat.pymlp1是兩層 Linear4096→4096mlp2是三層更寬的 Linear16384→8192→4096兩者都把輸出統(tǒng)一到 LLM 的 4096 維從而保證無(wú)論走哪條通路LLM 看到的 token 維度一致。 一個(gè)小細(xì)節(jié)ps_version參數(shù)控制最后是否把 H/W 換回原位。v1會(huì)輸出轉(zhuǎn)置圖像源碼中甚至有告警提示本模型 config.json 使用v2無(wú)需擔(dān)心。三、Gating 路由路由器如何決定這塊圖要不要壓縮動(dòng)機(jī)來(lái)自 README.md 的 Visual Consistency Learning 章節(jié)不同圖像分塊的語(yǔ)義密度差異極大——純色天空幾乎可以極限壓縮但公式、表格的文字區(qū)域一旦壓縮就會(huì)明顯掉信息。ViR 因此把壓縮率選擇建模為二分類問(wèn)題類別 0壓縮到 64 token高壓縮率 1/16類別 1保留 256 token低壓縮率 1/4路由由兩個(gè)模塊完成均在 modeling_internvl_chat.py① CrossAttentionPoolingL79-L132——給分塊寫摘要用一個(gè)可學(xué)習(xí)的 query 向量通過(guò)多層交叉注意力反復(fù)讀取該分塊全部 1024 個(gè) token最終把 1024 個(gè) token 池化成一個(gè) 1024 維的摘要向量。每個(gè)分塊獨(dú)立處理相當(dāng)于給路由器提供了一份這塊圖的信息量報(bào)告。實(shí)現(xiàn)上的細(xì)節(jié)第 2 層起的注意力層復(fù)用同一組權(quán)重。② GatingL36-L76——輸出二分類概率摘要向量先經(jīng)過(guò) 4 個(gè)殘差 MLP 塊1024→4096→1024GELU Dropout LayerNorm充分混合再經(jīng)一個(gè) 2 路 Linear softmax輸出兩個(gè)專家概率probs[0]是壓縮到 64 token的信心分probs[1]是保留 256 token的信心分。③ 雙重閾值決策在generate_flash內(nèi)執(zhí)行relative_threshold_value torch.quantile(gate_result[:, 0], 0.1) gate_result (gate_result[:, 0] relative_threshold_value) (gate_result[:, 0] 0.5)絕對(duì)閾值 0.5壓縮概率至少要 0.5保證路由器有把握才動(dòng)手相對(duì)閾值10% 分位數(shù)概率最低的后 10% 分塊一律不壓縮相當(dāng)于給整張圖留了安全墊避免極端情況把全圖都?jí)旱?。兩個(gè)閾值均可配置見(jiàn) config.json 的flash_relative_threshold: 0.1與flash_absolute_threshold: 0.5。四、generate_flash 全流程從圖像輸入到 50% Token 節(jié)省 ?入口是 generate_flash外層 generate 讀取配置里的flash_mode為true時(shí)走 Flash 分支否則走普通的generate_normal256 token 固定壓縮即 extract_feature 通路。完整流水線共 5 步雙份特征提取extract_feature_flashViT 先輸出每分塊 1024 token隨后同一次前向里同時(shí)算出 64-token 與 256-token 兩版特征路由器再為每個(gè)分塊輸出二分類概率逐分塊決策按上一節(jié)的雙閾值規(guī)則給每個(gè)分塊打上壓縮 / 保留標(biāo)記句級(jí)占位符壓縮compress_visual_tokens_in_sentenceprompt 中每個(gè)分塊原本是 256 個(gè)連續(xù)的IMG_CONTEXT占位符由num_image_token決定L157對(duì)需要壓縮的分塊只保留前 64 個(gè)槽位、標(biāo)記刪除其余 192 個(gè)并同步修正 attention mask 的位置索引特征回填把選中通路64 或 256的特征按分塊順序?qū)懭胝嘉环鸏LM 生成把壓縮后的 embedding 序列交給 Qwen3-8B 做自回歸生成。Token 節(jié)省的本質(zhì)LLM 的 prefill 計(jì)算量與 KV cache 占用都與序列長(zhǎng)度成正比視覺(jué) token 減半意味著這部分開(kāi)銷近似減半——這正是 Flash 版在接近 100% 性能下顯著提速的來(lái)源。 兩個(gè)進(jìn)階點(diǎn)generate_flash支持傳入visual_features參數(shù)直接接收外部算好的視覺(jué)特征配合 README 中的 Decoupled Vision-Language DeploymentDvDREADME.md可將 ViT/MLP/路由器部署在視覺(jué)服務(wù)器上、語(yǔ)言服務(wù)器只跑 LLM訓(xùn)練側(cè)的forward()L294-L371則固定走 256-token 通路路由與壓縮只作用于推理路徑。五、關(guān)鍵配置與文件索引快速定位相關(guān)代碼 核心參數(shù)速查config.json參數(shù)值含義flash_modetrue啟用generate_flash分支flash_relative_threshold0.1路由相對(duì)閾值10% 分位數(shù)flash_absolute_threshold0.5路由絕對(duì)閾值downsample_ratio0.5基礎(chǔ) pixel_shuffle 壓縮比例ps_versionv2保證空間維度順序正確min_dynamic_patch/max_dynamic_patch1/12動(dòng)態(tài)分塊數(shù)量范圍force_image_size448分塊邊長(zhǎng)像素源碼文件索引文件內(nèi)容modeling_internvl_chat.py主模型Gating路由、CrossAttentionPooling、pixel_shuffle、generate_flashmodeling_intern_vit.pyInternViT 視覺(jué)編碼器embedding、注意力、編碼器層configuration_internvl_chat.py模型配置類downsample_ratio、ps_version等默認(rèn)值config.json本模型實(shí)例化的全部推理參數(shù)conversation.py對(duì)話模板internvl2_5 模板README.md使用方式、ViCO 訓(xùn)練策略與 DvD 部署方案總結(jié)InternVL3_5-8B-Flash 的快不是靠縮水而是靠按需——pixel_shuffle提供了 256 / 64 兩檔無(wú)損的空間壓縮手段Gating路由器基于每個(gè)分塊的語(yǔ)義密度做出二選一路由generate_flash把兩者串成一條推理流水線最終在視覺(jué) token 減少約 50% 的情況下幾乎不損失回答質(zhì)量。理解了這三段源碼也基本掌握了當(dāng)前多模態(tài)大模型動(dòng)態(tài)視覺(jué)分辨率這一方向的核心實(shí)現(xiàn)范式。贊分享【免費(fèi)下載鏈接】InternVL3_5-8B-Flash項(xiàng)目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-8B-Flash點(diǎn)擊查看免費(fèi)下載相關(guān)推薦InternVL3_5-8B-Flash 架構(gòu)解析ViT–MLP–LLM 范式、Qwen3 底座與 InternViT-300M 全解InternVL3_5 8B Flash 架構(gòu)解析ViT–MLP–LLM 范式、Qwen3 底座與 InternViT 300M 全解 InternVL3_5InternVL3_5-8B-Flash推理提速秘籍DvD視覺(jué)-語(yǔ)言分離部署與4.05×加速原理InternVL3_5 8B Flash推理提速秘籍DvD視覺(jué) 語(yǔ)言分離部署與4.05×加速原理 InternVL3_5 8B Flash 是 OpenGVLInternVL3_5-8B-Flash微調(diào)實(shí)戰(zhàn)SWIFT與XTuner多模態(tài)微調(diào)全流程指南InternVL3_5 8B Flash微調(diào)實(shí)戰(zhàn)SWIFT與XTuner多模態(tài)微調(diào)全流程指南 InternVL3_5 8B Flash 是 InternVL3創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考