宅中地 - 每日更新
宅中地 - 每日更新

贊助商廣告

X

手機也能跑視覺大模型?把110億參數塞進3.7GB的秘密

2026年08月24日 首頁 » 熱門科技

你有沒有想過,為什麼手機上的AI助手大多只能處理文字,一旦涉及"看圖說話"就得聯網求助雲端伺服器?

答案很簡單:視覺語言模型太重了。以Llama 3.2 11B Vision Instruct為例,這個模型原始大小高達21.3GB,別說手機內存裝不下,就算裝下了,功耗和發熱也夠嗆。這就好比你想把一整個圖書館搬進隨身攜帶的行李箱裡,紙質書本身的重量就是硬傷。

Graphcore Research和Arm的研究團隊做了一件挺大膽的事:把這個110億參數的視覺語言模型壓縮到了3.7GB,壓縮比接近6倍,還要保證它在標準問答測試上表現依然過硬。這篇論文《Llama-Mobile: Efficient 2.7-Bit Quantization of VLMs》講的就是這件事是怎麼做成的。

**這不是簡單的"降低精度"就能解決的問題。**

事情要難在哪,得先說清楚。

壓縮模型這件事,業內早有成熟套路,叫做量化。

量化*:把模型里那些原本用32位或16位浮點數表示的參數,改用更少的比特位(比如8位、4位甚至更少)來儲存,從而減少模型體積和計算開銷的技術。

問題是,量化壓縮得越狠,模型出錯的概率往往就越高。這就像把一段高清影片轉成壓縮格式,壓縮比小的時候你幾乎看不出差別,可一旦壓縮得太狠,畫面就開始出現馬賽克,色塊糊成一團。視覺語言模型比純文本模型更嬌氣,因為它同時要處理圖像和文字兩種資訊,稍微壓縮過頭,模型就可能看錯圖、答非所問。

在這篇論文之前,業界對付低比特量化基本有兩條路子。一條是訓練後量化手機也能跑視覺大模型把110億參數塞進37GB的秘密,也就是模型訓練完之後再做壓縮處理,代表方法叫GPTQ。

GPTQ*:一種訓練後量化技術,通過分析權重矩陣的二階資訊(海森矩陣)來最小化量化帶來的誤差,不需要重新訓練模型,壓縮速度快、成本低。

另一條路是量化感知訓練手機也能跑視覺大模型把110億參數塞進37GB的秘密,簡稱QAT。

QAT(Quantization-Aware Training)*:在訓練或微調過程中就把量化操作加入進去,讓模型提前適應低精度環境,通常比訓練後量化效果更好,但需要額外的訓練數據和計算資源。

這兩條路各有各的軟肋。GPTQ省事,但壓縮到極限的時候性能掉得厲害。QAT效果好,但它高度依賴訓練數據的質量,如果拿來訓練的數據和模型原本的使用場景對不上,效果反而會打折扣。而這篇論文面對的現實是:研究者手裡根本沒有Llama 3.2原始的訓練數據和訓練配方,這些都是Meta公司內部的機密。

沒有原始數據,還想做高質量的QAT,這就是研究團隊要闖的第一道關。第二道關更硬核:即便訓練出了低比特的模型,怎麼才能讓手機的Arm處理器高效地跑起來,而不是紙上談兵。

論文最後交出的答卷分成兩塊。一塊是數據生成的流程設計,解決"沒數據怎麼辦"的問題。另一塊是一種全新的數位格式,叫S3D8手機也能跑視覺大模型把110億參數塞進37GB的秘密,專門為Arm CPU的解碼效率量身定製。接下來我們一步步拆開看。

沒有原始訓練數據,怎麼教模型"減肥"

先說第一個難題:手裡沒有原始訓練數據,怎麼讓量化後的模型不"失憶"?

研究團隊想出的辦法挺巧妙:既然拿不到原始數據,那就讓模型自己"生成"數據來教自己。

具體怎麼做?他們找來一堆圖片,這裡選用的是ImageNet數據集。

ImageNet*:一個包含超過128萬張圖片的大型圖像資料庫,長期以來是電腦視覺領域訓練和測試模型的標準數據集之一。

選擇ImageNet的理由很實際:它足夠大、足夠多樣,而且和最終要測試的問答任務沒有直接關聯,不會造成"抄近道"式的過擬合。

拿到圖片之後,團隊給每張圖片配上一個隨機生成的提問,然後把圖片加提問一起丟給原始的、沒有壓縮過的Llama模型(這時候它被稱為"教師模型"),讓教師模型生成回答。這些教師模型生成的回答,就成了訓練素材,用來教那個正在被壓縮的"學生模型"儘量模仿教師的行為。

這套邏輯用了一個術語,叫知識蒸餾手機也能跑視覺大模型把110億參數塞進37GB的秘密

知識蒸餾(Knowledge Distillation)*:讓一個體積更小、精度更低的學生模型去模仿一個更大更精確的教師模型的輸出分布,從而在壓縮體積的同時儘量保留原有的能力。

這裡最關鍵的設計巧思藏在提問方式上。如果每次都用同一句提示詞,比如固定問"描述一下這張圖片",模型的輸出會變得千篇一律,句式雷同、長度相近、風格單一。這就好比你想讓一個學生學會應對各種題型的考試,結果每天只讓他做同一道例題。練一百遍這道題,他確實會對這道題爛熟於心,但換一道題他大概率還是不會。

論文裡專門做了一個實驗驗證這一點:用固定提示詞訓練出來的模型,和用隨機採樣多樣化提示詞訓練出來的模型相比,前者的下游任務表現明顯更差,差距隨著訓練步數增加越拉越大(詳見論文圖3b)。這說明模型要學的不是"記住一個標準答案",而是要學會在各種不同情境下都能生成合理的回答,這種"舉一反三"的能力,恰恰需要靠訓練數據的多樣性來餵養。

具體來說,研究團隊設計了一套隨機採樣的提示詞生成規則。

有75%的概率,會套用Llama官方的指令模板(也就是模型平時被調教成"聽指令、答問題"的那種格式),確保模型不會忘記自己作為一個"聽話的助手"該有的樣子;剩下25%的概率則用最樸素的圖片加提示詞格式,保留模型在非指令場景下的原生能力。

問題本身也是隨機生成的,從近500個不同的問題模板里抽取,涵蓋"描述主要內容""總結場景""面向數據集標註的說明"等各種角度和風格。

有70%的概率還會在問題前面加一段額外指令,比如要求用簡單語言作答、要求控制答案長短、要求遵循特定格式,這些指令又是分別按不同概率隨機組合出現的。

這套流程的核心目的只有一個:讓模型接觸到的問答場景儘可能貼近真實世界裡五花八門的提問方式,既有簡短的是非題,也有需要展開論證的長篇解釋,還有各種格式要求和語氣風格。整個過程完全不使用任何下游測試任務(比如VQAv2、ChartQA這些評測集)里的圖片或問題,避免"背題"式的作弊。

這個思路讓我聯想到應試教育和質素教育的區別。死記硬背某一套題型的學生,考試換個出題風格立刻現原形;而真正見多識廣、訓練充分的學生,面對陌生題型也能保持水準。數據的多樣性,不是數據的數量,才是這裡的勝負手。

2.7比特里塞進三個數,S3D8格式怎麼做到的

解決了"餵什麼數據"的問題,接下來是這篇論文真正的技術硬貨:怎麼設計一種數位格式,既能把參數壓縮到極致的2.7比特每個參數,又能讓手機晶片飛快地把它解壓出來用。

先說說為什麼這事不簡單。

一般的量化格式,無論是簡單粗暴的整數量化(INT),還是稍微聰明一點的非均勻量化,通常都是一個數值對應一個儲存單元,逐個處理。但研究團隊想要更進一步的壓縮率,普通格式很難壓到3比特以下還保持可用的精度。

這裡他們選擇了一種叫向量量化手機也能跑視覺大模型把110億參數塞進37GB的秘密的思路。

向量量化(Vector Quantization, VQ)*:不是把每個數值單獨量化,而是把多個數值打包成一個"向量",然後在預先訓練好的"碼本"(一堆代表性的向量樣本)里找一個最接近的代表值來近似表示整個向量,從而用更少的比特儲存更多資訊。

具體到S3D8這個格式,它的核心設計是:把三個權重數值打包進一個字節(8個比特)里。

怎麼做到的?先說數值本身。這三個數各自的正負號(是正是負)各占1個比特,三個數總共3個比特用來存符號。剩下的5個比特,用來存一個"索引編號",這個編號指向一張預先訓練好的、包含32個"代表性數值組合"的查找表。也就是說,這三個數值的絕對值大小資訊,被壓縮成了這張32項表格里的其中一項。

這就是論文標題里"2.7比特"的由來:3個數值總共占用8個比特,平均下來一個數值只占用8/3約等於2.67個比特,再加上一點用來儲存縮放係數的開銷,最終落在2.68比特左右。

論文裡配了一張很直觀的圖(圖2),把這個過程畫得很清楚。左邊是原始的浮點數據,先根據每個輸出通道里數值的最大絕對值算出一個縮放係數,把數據映射到一個標準的8位整數範圍。這一步得到的中間結果叫channel-INT8,也就是按通道縮放的8位整數格式。

接著,把這個8位整數數據的絕對值部分,去匹配一張預先算好的"最優代表值表",找到最接近的那一項,記下它的編號;同時單獨記錄下這個數原本的正負號。這樣一來,原本需要完整儲存的數值,就被拆解成了"一個共享的索引編號"加"三個獨立的正負號"。

論文右邊那張圖(圖2右側)展示了這些代表值在坐標系裡的分布:32個藍色的點代表訓練出來的"代表性數值組合",圍繞原點呈現出某種密度分布,數值越集中的區域,代表點也越密集,這是因為神經網路的權重通常服從某種接近正態分布的規律,中間密集、兩頭稀疏。而正負號資訊則像是給這32個點做了"鏡像複製",讓它們能覆蓋到正負數值的八個象限組合(因為3個數各自有正負兩種可能,2的3次方等於8種組合)。

這套設計要解決的根本矛盾是什麼?

普通的量化格式如果想要非均勻分布(也就是讓數值密集的地方精度更高,稀疏的地方精度低一些,從而整體誤差更小),往往需要一張很大的查找表,比如如果每個數值單獨用8比特編碼,理論上就需要256乘以3也就是768字節的查找表。這對於追求速度的晶片硬體來說太笨重了,因為手機CPU里能高速訪問的寄存器空間是很有限的,查找表越大,每次查找的開銷也越大。

論文這裡用了一個很聰明的技巧:既然神經網路的權重分布通常是對稱的(正負兩邊鏡像對稱),那就沒必要把正負號也塞進這張大表里,單獨拎出來用符號位處理,查找表就能從256項直接壓縮到32項。這就好比你要給全班同學編花名冊,如果男生女生的名字其實是成對出現的雙胞胎(一個叫"張三"一個叫"張三反"),那你完全沒必要把兩個人的名字都完整記錄一遍,只需要記一個"張三"再加一個"性別標記"就夠了,花名冊厚度直接減半還不止。

**如果不做這種對稱性拆分,直接用256項的完整查找表,那麼這張表的大小會超出晶片高速緩存能夠舒服放下的範圍,每次查找都可能要付出額外的內存訪問延遲,速度反而慢下來。**

S3D8還做了兩個特別針對Arm晶片硬體特性的優化。

第一個是數據的排列方式。晶片處理數據講究"連續"和"對齊",如果把三個權重按照它們在計算里"輸入維度"上的位置連續排列,會導致做矩陣乘法運算時需要額外的操作去交錯、拆分這些數據。研究團隊選擇反過來,讓打包進同一個字節的三個數值對應的是"輸出通道",這樣在做點積運算的時候,不需要額外的對齊補邊操作,效率更高。

第二個優化更細緻,是關於符號位怎麼和索引編號組合,才能用最少的晶片指令完成解碼。論文提到,Arm處理器有一種叫TBL的向量化查找表指令,可以直接支持帶符號數值的查找。

TBL(Table Lookup)*:Arm處理器SIMD指令集裡的一種向量化查表指令,能夠一次性對多個數據並行執行查表操作,是這裡加速解碼的關鍵硬體特性。

研究團隊巧妙設計了比特的排列順序,讓符號資訊和索引資訊可以通過簡單的位運算("與"運算、"移位"運算、"異或"運算這類邏輯運算)快速拼接出三個查表用的索引,總共只需要5條邏輯指令,就能同時解碼出48個數值。這個細節雖然聽起來很技術,但它直接決定了這個格式在真實手機晶片上跑起來是快還是慢。

這裡其實藏著一種"軟硬體協同設計"的思路,格式設計不是數學家在紙上算出最優壓縮率就完事了,而是要真正摸清楚目標晶片的指令集能做什麼、不能做什麼,然後把算法削足適履地嵌進硬體的能力邊界裡。這就像給運動員定製跑鞋,不是找一雙"理論上最結實"的鞋,而是要摸清這位運動員的腳型、跑步姿勢、賽道材質,做出真正貼合的那一雙。

壓縮之後,模型表現到底掉了多少

說了這麼多方法,最終效果到底怎樣?這是所有讀者最關心的問題。

論文用Llama 3.2 11B Vision Instruct模型做了系統性對比實驗,測試集選用了四個視覺問答基準:VQAv2(通用圖片問答)、ChartQA(圖表理解)、DocVQA(文檔理解)、AI2D(科學示意圖理解)。

先看數字對比。原始的bfloat16模型(也就是沒有壓縮過的版本)體積高達21340MB(約21.3GB),四項任務的平均得分是0.744。

**S3D8格式配合QAT訓練之後,模型體積壓縮到3569MB(約3.5GB),平均得分是0.661,只比原始模型下降了0.083。**

對比一下同等體積下其他量化格式的表現就更有說服力了。同樣壓縮到3600MB左右的體積,普通的均勻整數量化格式(INT)平均得分只有0.347,幾乎腰斬;用了非均勻量化優化的student-t格式能到0.565;另一種非均勻量化方法lloyd-max只有0.436。相比之下,S3D8的0.661可以說是斷層式領先。

這組數字意味著什麼?意味著在同樣的體積預算下,其他格式壓縮過頭的地方,模型可能連圖表上的柱狀圖數值都讀不准,答案錯得離譜;而S3D8能把這種損耗控制在一個相對溫和的範圍內,四個任務里表現最差的AI2D(科學圖示理解)也還能保持0.554的準確率,遠好於其他格式在這項任務上不到0.35甚至0.15的表現。

再看量化方法本身的對比。論文用了一張圖(圖1)把三種量化路徑,直接強制轉換(不做任何訓練調整)、GPTQ訓練後量化、以及本文的QAT方法,放在同一張圖里對比模型體積和任務表現的關係。結論很直觀:直接強制轉換在體積壓縮到3.5比特以下時性能會斷崖式下跌;GPTQ整體表現優於直接轉換,但在極低比特率下依然力不從心;而QAT方法在低比特區間明顯更穩健。

論文還專門做了個對照實驗,把量化方法和數位格式兩個變量拆開單獨測試。在約2.7比特每參數的壓縮率下,如果只用GPTQ(不做QAT),S3D8格式能拿到0.340的平均分,而用同樣的GPTQ方法但換成普通INT格式,得分只有0.018,幾乎等於瞎猜。這組對比把"格式設計的貢獻"單獨拎了出來:即便都不用QAT精細調教,光是S3D8這套"三合一打包加符號分離"的設計,就已經比傳統整數量化強了將近20倍的表現。而進一步用QAT去訓練S3D8,得分又從0.340躍升到0.661,這說明格式設計和訓練方法這兩個變量都很重要,缺一不可。

跑起來到底快不快,手機實測數據說話

壓縮率和精度都談完了,還剩最後一個現實問題:這套格式在真實的手機晶片上跑起來,速度到底行不行?

論文在兩個平台上做了測試。一個是消費級的Google Pixel 8a手機,另一個是伺服器級的Graviton4晶片(96核的Arm伺服器晶片,用作性能上限參考)。

先看純粹的"解碼速度",也就是把S3D8格式的壓縮數據還原成可以直接計算的INT8格式需要多長時間。以視覺編碼器里一個多層感知機的上投影層為例,在Pixel 8a手機上用5個CPU核心,S3D8格式的解碼只需要133微秒(相當於16.5GB每秒的讀取頻寬),而作為參照的INT8直接拷貝操作需要310微秒。這說明S3D8雖然多了一步"解壓"的動作,但因為它本身要讀取的數據量只有INT8格式的三分之一,綜合算下來反而比直接讀取INT8數據還要快。

再看真正跑矩陣乘法運算(也就是神經網路推理里最核心、最耗時的計算環節)的速度對比。這裡有個挺有意思的現象:在生成文字這種"每次只處理一個詞"的場景下(論文裡叫batch size等於1,也就是矩陣乘法運算里的m=1情況),S3D8的速度優勢非常明顯。比如在Graviton4晶片上,處理一個形狀為(1, 4096, 14336)的矩陣運算,bfloat16格式的速度是每秒236億次乘加運算(GMAC/s),INT8格式是461億次,而S3D8達到了1031億次,幾乎是INT8的兩倍多。

但如果是處理長文本或圖像這種"批量處理"場景(比如一次要處理1601個圖像塊,對應m=1601的情況),S3D8的優勢就不明顯了,甚至會比INT8稍慢一點點。這背後的道理不難理解:生成文字這種場景,瓶頸在於"把參數從內存里搬到計算單元"這個過程,專業說法叫內存頻寬受限,這時候數據體積越小,搬運越快,S3D8體積小的優勢就能充分發揮。而批量處理場景,瓶頸變成了"計算單元本身算得夠不夠快",專業說法叫計算受限,這時候S3D8因為多了一步解壓縮的額外運算,反而占了一點點小便宜的手機也能跑視覺大模型把110億參數塞進37GB的秘密代價。

**這個現象揭示了一個很樸素的道理:手機上跑AI助手,用戶體驗最敏感的就是"逐字蹦出回答"的這個生成階段,而這恰恰是S3D8最擅長的場景。**

反過來說,如果一個應用場景更偏向批量處理大量圖片(比如相冊批量打標籤),S3D8的收益可能沒那麼可觀,這時候直接用INT8可能是更簡單也更合適的選擇。這也提醒我們,沒有一種壓縮格式是萬能的,得看具體用在什麼場景。

最後論文團隊還做了一個端到端的完整測試:用C++搭建了一套完整的推理程序,真的在Pixel 8a手機上跑完整的Llama 3.2 11B Vision模型,模型文件大小壓縮到3.73GB(這個數字比前面提到的3.57GB稍大,是因為算上了詞表和一些元數據)。測試結果是,在生成階段能達到每秒3.8個詞(token)的速度,對應12.5GB每秒的參數讀取頻寬,這已經是這台手機理論最大讀取頻寬(約25GB每秒)的一半左右了。作為對比,如果用INT8格式儲存,模型壓根裝不進手機內存,這也側面說明了極致壓縮不是錦上添花,而是能不能在手機上跑起來的生死線。

而在Graviton4伺服器晶片上,S3D8能跑到每秒36.8個詞,速度比INT8格式的每秒26.4個詞還要快,這對於需要伺候大量用戶請求的伺服器場景來說也是一個實打實的效率提升。

這項研究目前也有一些明確的邊界

論文作者也很坦誠地列出了幾個局限。

整套實驗只在一個模型(Llama 3.2 11B Vision Instruct)上做了驗證,沒有測試其他視覺語言模型是否也能獲得同樣的收益。S3D8這套解碼邏輯高度依賴Arm晶片特有的64項查找表指令,換到其他晶片架構(比如高通、蘋果自研晶片如果指令集設計不同)上可能需要重新設計解碼邏輯,不能簡單照搬。

測試用的四個視覺問答基準數據集,本身規模有限(論文裡用的都是固定的1024條樣本子集),覆蓋面未必能代表所有真實應用場景。研究團隊還嘗試過一種折中方案:把模型里某些特別重要的層(比如語言模型的輸出投影層,或者整個視覺編碼器)保留成精度更高的INT8格式,其餘層繼續用S3D8壓縮,指望能用一點體積換來更好的效果。但實驗顯示這個思路收效甚微,即便把輸出投影層和視覺編碼器都換成INT8,模型體積從3569MB漲到4513MB,平均得分卻只提升了0.006,幾乎可以忽略不計。這說明S3D8這套格式本身已經相當均衡,靠"局部妥協"很難再榨出明顯的額外收益。

寫在後面

讀完這篇論文,最讓我意外的一點是,研究團隊解決"沒有原始訓練數據"這個問題的方式,不是去想辦法搞到數據,而是讓模型自己給自己當老師。這個思路乍一看有點"左腳踩右腳"的意味,教師模型本身就是要被壓縮的那個模型的完整版,用它自己生成的數據來訓練它自己的壓縮版本,聽起來像是循環論證。但仔細想想,這其實是把"模型原本的行為模式"當作了一種可以被反覆採樣、反覆提煉的資源,教師模型見過的世界,壓縮成了它能生成的答案風格,學生模型再從這些答案里學回來。這種"自我蒸餾"的思路,可能比強行找外部數據集去湊更加貼合模型原本的語氣和習慣。

論文裡那個"固定提示詞vs隨機提示詞"的對比實驗也讓我印象很深,兩組實驗用的是完全相同的訓練數據規模和步數,唯一的差別就是提示詞是否多樣化,結果表現差距巨大。這提醒我一個更普遍的道理:很多時候"餵給AI多少數據"不是決定效果的關鍵變量,"餵的數據夠不夠多樣"才是。

還有一個細節值得琢磨。論文附錄里展示了幾個具體的問答案例,壓縮後的模型在DocVQA那道題上,把"這是什麼類型的報告"答成了"營養調查",而正確答案應該是"初步報告",這是一份關於巴西東北部營養狀況的初步調查報告,模型抓住了"營養調查"這個內容主題,卻漏掉了"初步(preliminary)"這個封面上明確寫著的關鍵詞。這種錯誤挺有意思,它不是那種"看圖看瞎了"的低級錯誤,而是一種"抓大放小"式的資訊丟失,壓縮帶來的損耗,有時候表現得很像人類粗心大意時犯的錯,而不是隨機的亂碼。這會不會是低比特量化損耗的一種普遍特徵?值得再深挖。

Q&A

Q1:Llama-Mobile的S3D8格式是什麼?

A:S3D8是論文提出的一種2.7比特每參數的量化格式,把三個權重數值打包進一個字節,通過共享的5比特索引查表加3比特符號位實現壓縮,專門針對Arm CPU的解碼效率做了硬體層面的優化設計。

Q2:這項研究把Llama 3.2 11B Vision Instruct模型壓縮到多大?

A:壓縮後的模型體積是3.7GB,配合8比特激活值,相比原始bfloat16版本21.3GB的體積,壓縮比接近6倍,同時在四項視覺問答基準測試上平均只損失了0.083的準確率。

Q3:沒有原始訓練數據怎麼做量化感知訓練?

A:研究團隊讓教師模型(未壓縮的原始模型)針對ImageNet圖片生成隨機採樣提示詞對應的回答,把這些生成結果當作訓練素材去教量化後的學生模型模仿教師的行為,從而繞開了需要訪問原始訓練數據的限制。

宅中地 - Facebook 分享 宅中地 - Twitter 分享 宅中地 - Whatsapp 分享 宅中地 - Line 分享
相關內容
Copyright ©2026 | 服務條款 | DMCA | 聯絡我們
宅中地 - 每日更新