戰(zhàn):大模型功耗直降27%的完整指南)
先聊一個我最近經(jīng)常被問到的問題大模型越跑越重芯片功耗一路飆升到底有沒有一種“不換硬件、不改代碼只動模型本身”就能把功耗壓下來的辦法我的答案很簡單有。量化就是其中見效最快的一條路。而昇思MindSpore生態(tài)里的 msModelSlim 量化工具做的就是這件事——它不追求把模型變“小”到極致而是抓住“降低芯片硬件功耗”這個更本質(zhì)的目標(biāo)把模型從高精度浮點(diǎn)運(yùn)算搬進(jìn)低比特整數(shù)運(yùn)算讓同一塊芯片在推理時跑得更省電、發(fā)熱更低、吞吐更高。這篇文章我想把我實(shí)際使用 msModelSlim 做模型量化的完整過程、功耗實(shí)測數(shù)據(jù)以及踩過的幾個真坑一次性講清楚。內(nèi)容偏實(shí)操適合正在做大模型部署、端側(cè)推理或者被“GPU 電費(fèi)賬單”困擾的工程師參考。1. 算一筆賬大模型推理時電都燒在哪很多人在做模型優(yōu)化時第一反應(yīng)是“顯存不夠”“吞吐不高”不太會第一時間想到功耗。但我建議所有做部署的人都認(rèn)真算一筆電費(fèi)賬。因?yàn)楣暮惋@存、吞吐是強(qiáng)耦合的把功耗降下來其他兩項(xiàng)幾乎必然跟著改善。1.1 計(jì)算功耗與訪存功耗推理的“兩大電老虎”一次大模型推理芯片的功耗主要花在兩個地方。第一個是計(jì)算單元也就是 GPU 或 NPU 里的矩陣乘、卷積這類密集運(yùn)算單元。第二個是數(shù)據(jù)搬運(yùn)也就是權(quán)重和中間特征從顯存/緩存里反復(fù)讀進(jìn)讀出的過程。馬斯克說過一個很經(jīng)典的觀察在計(jì)算機(jī)里搬數(shù)據(jù)比算數(shù)據(jù)更貴。放到大模型推理里尤其明顯。一個 7B 參數(shù)的模型權(quán)重動輒十幾個 GB每生成一個 Token所有權(quán)重都要從 HBM 里掃一遍。內(nèi)存帶寬越大的芯片越省電因?yàn)閿?shù)據(jù)搬運(yùn)更快、等待時間更短但不管怎樣搬運(yùn)這么多數(shù)據(jù)本身就是巨大的能量開銷。第二個大頭是計(jì)算單元本身的能耗。FP32 乘法運(yùn)算單元和 INT8 乘法運(yùn)算單元在芯片設(shè)計(jì)上的晶體管數(shù)量、單次操作消耗的能量差別非常大。同一塊芯片跑 FP32 的峰值功耗和跑 INT8 的峰值功耗完全不是一個量級。1.2 為什么說“位寬就是功耗”這里有張我整理了很久的參考對照表是硬件圈相對公認(rèn)的相對能效比數(shù)據(jù)拿來理解“位寬和功耗的關(guān)系”非常直觀運(yùn)算精度單次乘法相對能耗占用內(nèi)存/權(quán)重體積典型用途FP32約 10x4 字節(jié)/參數(shù)訓(xùn)練、高精度計(jì)算FP16/BF16約 1x2 字節(jié)/參數(shù)常規(guī)推理INT8約 0.1x~0.2x1 字節(jié)/參數(shù)高效推理、端側(cè)部署INT4約 0.05x 以下0.5 字節(jié)/參數(shù)極端壓縮場景看表里的數(shù)量級道理就很直白了同樣是做一次乘法INT8 消耗的能量大約是 FP16 的 1/5 甚至更低INT4 更夸張。也就是說把模型從 FP16 量化到 INT8光是計(jì)算單元這一塊的能耗就能降到原來的兩成左右。當(dāng)然實(shí)際功耗不會只有五分之一因?yàn)檫€有訪存、緩存、外圍電路等多方面的開銷。但方向是對的位寬就是功耗把位寬降下來硬件的工作“強(qiáng)度”就降下來了。這時候 msModelSlim 做的事情就是把原來跑在 FP16 甚至 FP32 上的模型用一套系統(tǒng)化的流程“降檔”到 INT8 或更低比特。它不是在模型外面套一層殼而是真的把模型里的權(quán)重、激活值從浮點(diǎn)數(shù)換成整數(shù)再配好縮放參數(shù)讓硬件能夠用低精度模式去跑原始任務(wù)。這也是為什么我特別喜歡用這個工具做功耗優(yōu)化它直接作用在模型最底層的數(shù)據(jù)表示上效果立竿見影。2. msModelSlim 從哪些層面壓功耗原理拆解先說我理解的產(chǎn)品定位msModelSlim 是昇思生態(tài)里的模型壓縮與加速工具套件核心能力集中在量化、剪枝、蒸餾這幾類模型瘦身手段上。我們今天只聊它最拿手的量化重點(diǎn)回答一個問題量化憑什么能降功耗2.1 量化不是“壓畫質(zhì)”是給模型換精度檔位很多人一聽“量化”下意識覺得是給模型降質(zhì)量、砍精度就像把高清圖片壓成模糊縮略圖。這個類比只對了一半。量化的準(zhǔn)確理解是把連續(xù)分布的浮點(diǎn)數(shù)值映射到一組離散的整數(shù)上。比如一個權(quán)重原來是 0.12345FP32量化之后可能變成了整數(shù) 12再加一個縮放系數(shù) scale0.01恢復(fù)出來就是 0.12。這個映射過程會帶來一些誤差但模型本身有冗余適當(dāng)量化后精度損失通常很小。msModelSlim 在做量化時核心有這幾個要素量化位寬常見有 W8A8權(quán)重 8bit、激活 8bit、W4A16權(quán)重 4bit、激活 16bit等模式。位寬越低壓縮率越高但精度風(fēng)險(xiǎn)越大??s放因子scale和零點(diǎn)zero point負(fù)責(zé)把浮點(diǎn)數(shù)值映射到整數(shù)范圍每個張量或每個通道都可以有自己的一套參數(shù)。校準(zhǔn)過程calibration讓一小批真實(shí)數(shù)據(jù)通過模型統(tǒng)計(jì)各層激活值的分布范圍從而確定最合理的縮放因子。整個量化的過程看起來是數(shù)學(xué)上的數(shù)值映射但落到芯片上它直接改變了硬件的計(jì)算模式。芯片不必再做大范圍浮點(diǎn)乘加而是做定點(diǎn)整數(shù)乘加速度和能耗都顯著改善。2.2 從 HBM 到算術(shù)單元每一環(huán)都在省電這一小節(jié)我們拆開看量化之后功耗是在哪些環(huán)節(jié)被“摳”出來的第一訪存省電。INT8 的權(quán)重體積只有 FP16 的一半FP32 的四分之一。同樣一個 7B 模型FP16 權(quán)重占約 14GBINT8 只要約 7GBINT4 更是只要約 4GB。數(shù)據(jù)搬運(yùn)量直接減半甚至更多HBM 和片上緩存的讀寫次數(shù)少了這部分功耗自然下降。對大模型這種“訪存密集型”推理場景來說這一項(xiàng)的收益比計(jì)算單元還大。第二計(jì)算省電。前面那張相對能耗表已經(jīng)說明問題。INT8 乘加單元在芯片上占的面積更小單次操作能耗更低同樣一次矩陣乘法低精度模式的總耗電量明顯少于高精度模式。第三緩存利用率提升帶來的間接省電。權(quán)重變小后同樣大小的 L2 緩存能裝下更多權(quán)重cache 命中率提高反復(fù)從顯存拉數(shù)據(jù)的次數(shù)減少。這部分收益雖然不好直接量化但實(shí)測中非常明顯后面我會用數(shù)據(jù)說明。第四吞吐提升任務(wù)總時間縮短。量化后單次推理更快單位時間能處理的請求更多。如果目標(biāo)是完成固定數(shù)量的任務(wù)量化后的芯片能以更低功耗運(yùn)行更短時間總能量消耗自然下降。這就是為什么我說量化是“從底層硬件特性出發(fā)”的功耗優(yōu)化手段。它不是靠調(diào)度策略去“省著用”硬件而是讓硬件本身工作在更省電的模式上。2.3 它跟“剪枝”“蒸餾”這些工具怎么分工用 msModelSlim 做模型優(yōu)化時你會發(fā)現(xiàn)它不是一個孤立的工具而是一個組合拳。這里簡單講一下量化、剪枝、蒸餾的定位差異剪枝把不重要的參數(shù)直接刪掉讓模型變“稀疏”。相當(dāng)于把一本厚書里無關(guān)緊要的章節(jié)撕掉書變薄了但剩下內(nèi)容還是原來的格式。蒸餾用一個大的“教師模型”指導(dǎo)一個小“學(xué)生模型”學(xué)習(xí)學(xué)生模型結(jié)構(gòu)和大小都完全不同。相當(dāng)于讓一個新人跟著老師傅學(xué)本事最后新人獨(dú)立上崗但方式和老師傅不完全一樣。量化模型結(jié)構(gòu)不變、參數(shù)量不變只是把每個參數(shù)的“存儲格式”從浮點(diǎn)換成整數(shù)。相當(dāng)于把一本書從精裝硬殼換成軟皮口袋本字小了一點(diǎn)但內(nèi)容一字不少。三個手段并不互斥。我的習(xí)慣是先用剪枝或者蒸餾把模型壓到合理的結(jié)構(gòu)規(guī)模最后再用量化做終極壓縮。尤其是當(dāng)你盯著的目標(biāo)是“功耗”而不是單純“體積”的時候量化是收尾的那一步直接決定模型在芯片上的運(yùn)行能效。3. 實(shí)操用 msModelSlim 把模型功耗按下去理論講太多沒用直接上實(shí)操。下面這整套流程是我在一臺裝有單張 NVIDIA A10 的服務(wù)器上對一個大語言模型做 INT8 量化的完整記錄。A10 不是最新最強(qiáng)的卡但很能說明問題因?yàn)樗娘@存24GB和功耗150W都處于“大模型能跑但不太寬?!钡牡湫蛥^(qū)段很多做私有化部署和邊緣方案的團(tuán)隊(duì)用的就是這類卡。3.1 準(zhǔn)備階段模型、校準(zhǔn)數(shù)據(jù)、部署目標(biāo)對齊動手量化前先把三件事確認(rèn)清楚否則后面容易白干第一確認(rèn)模型格式。msModelSlim 主要面向昇思 MindSpore 生態(tài)但也能通過模型轉(zhuǎn)換接口讀取其他框架導(dǎo)出的模型。實(shí)際操作中我習(xí)慣先把 PyTorch 的權(quán)重轉(zhuǎn)換成 MindSpore 格式再進(jìn)量化流程。這一步一次搞定避免中途反復(fù)切換框架。第二準(zhǔn)備校準(zhǔn)集。這是量化成敗的關(guān)鍵后面我會專門講。簡單說校準(zhǔn)集就是從真實(shí)業(yè)務(wù)數(shù)據(jù)里抽出來的一小批樣本用于統(tǒng)計(jì)激活值的分布。我這次選的是 500 條領(lǐng)域問答樣本覆蓋了模型日常處理的典型輸入。第三明確硬件目標(biāo)。在量化之前先想清楚量化后的模型要部署到哪塊芯片上是 A10、A100 這種數(shù)據(jù)中心 GPU還是昇騰 310、開發(fā)板這類端側(cè) NPU不同芯片對量化算子的支持程度不同這會影響你是做統(tǒng)一量化還是混合精度。3.2 校準(zhǔn)環(huán)節(jié)選對校準(zhǔn)集比選對算法更關(guān)鍵msModelSlim 的量化流程里校準(zhǔn)算法有幾個選項(xiàng)比如 MinMax、Percentile、MSE 等。我實(shí)測下來的經(jīng)驗(yàn)是MinMax直接用張量最大值和最小值定縮放區(qū)間速度快但容易受離群值干擾。Percentile忽略極端的 0.01% 或 0.001% 離群值用分位數(shù)確定區(qū)間穩(wěn)健性更好是默認(rèn)推薦。MSE通過最小化量化前后張量的均方誤差來選 scale精度表現(xiàn)好但校準(zhǔn)耗時略長。這一階段給我的最大教訓(xùn)是校準(zhǔn)集比算法更關(guān)鍵。算法選得再高級如果校準(zhǔn)集和真實(shí)業(yè)務(wù)分布不一致量化后的模型照樣崩。舉個例子我之前有個模型在校準(zhǔn)時用的是通用對話數(shù)據(jù)量化后測試集精度看著不錯。一上生產(chǎn)就露餡了——模型輸出的格式混亂、數(shù)字計(jì)算錯誤頻出。后來才發(fā)現(xiàn)生產(chǎn)環(huán)境里大量輸入是帶有特定格式的日志文本跟校準(zhǔn)集完全兩個分布。重新用日志數(shù)據(jù)做校準(zhǔn)集后問題立刻消失。所以校準(zhǔn)集的核心要求是貼近真實(shí)推理時的輸入分布。至少準(zhǔn)備幾百條有代表性的樣本覆蓋主要業(yè)務(wù)場景寧多勿少。3.3 量化執(zhí)行與精度回歸校準(zhǔn)做完接下來就是正式量化。整個流程可以分為四步加載模型與校準(zhǔn)數(shù)據(jù)。把準(zhǔn)備階段的 MindSpore 模型加載進(jìn)來同時掛載校準(zhǔn)數(shù)據(jù)迭代器。選擇量化配置。我這次的配置是 W8A8也就是權(quán)重和激活都量化為 INT8使用 Percentile 校準(zhǔn)算法按通道計(jì)算縮放因子。執(zhí)行量化。msModelSlim 會自動遍歷模型中的算子把支持量化的算子替換為 INT8 版本并依據(jù)校準(zhǔn)統(tǒng)計(jì)結(jié)果固化縮放參數(shù)。精度回歸。量化完成后不要急著部署先用一組不參與校準(zhǔn)的測試數(shù)據(jù)跑一遍精度對比。我通常關(guān)注兩個指標(biāo)任務(wù)相關(guān)的核心指標(biāo)如準(zhǔn)確率、BLEU 等和輸出分布的穩(wěn)定性。這里要特別強(qiáng)調(diào)精度回歸的重要性。量化不是零成本精度掉 0.1% 可能無所謂掉 5% 就說明某些敏感算子被“誤傷”了。我的經(jīng)驗(yàn)是如果精度損失超過 1%~2%先不要盲目調(diào)低目標(biāo)位寬而是找出來是哪些層貢獻(xiàn)了主要誤差對它們做混合精度處理留 FP16其他層繼續(xù) INT8。這個思路后面講坑的時候會再展開。3.4 導(dǎo)出與目標(biāo)芯片部署鏈路量化完成并驗(yàn)證精度沒問題后最后一步是導(dǎo)出。msModelSlim 支持導(dǎo)出多種中間格式方便對接 MindSpore Lite 或者其他推理引擎。我這次選擇導(dǎo)出為 MindSpore Lite 的模型格式在目標(biāo)設(shè)備上用 MindSpore Lite 推理框架加載運(yùn)行。有一個細(xì)節(jié)值得注意導(dǎo)出的模型要在目標(biāo)芯片上做一次完整的推理驗(yàn)證不要只在量化所在的主機(jī)上測。因?yàn)椴煌酒瑢λ阕拥闹С植灰粯又鳈C(jī)上跑通的流程換到端側(cè)芯片上可能因?yàn)槟承┧阕硬恢С侄赝说礁↑c(diǎn)實(shí)現(xiàn)導(dǎo)致功耗優(yōu)化效果大打折扣。到這里一個完整的 msModelSlim 量化流程就走通了。但量化只是第一步真正的重點(diǎn)是驗(yàn)證“功耗到底降了多少”。4. 實(shí)際效果同一模型量化前后的功耗與性能對照接下來是大家最關(guān)心的部分量化之后功耗到底降了多少性能有沒有犧牲我用一組實(shí)際測得的數(shù)據(jù)來說明。4.1 測試機(jī)與測試方法先交代測試環(huán)境方便你對照自己的設(shè)備項(xiàng)目配置GPUNVIDIA A10 24GB模型7B 參數(shù)大語言模型原始精度FP16量化精度W8A8 INT8推理引擎MindSpore Lite測試負(fù)載連續(xù)處理 1000 條推理請求每條請求生成長度約 128 token功耗采集nvidia-smi 以 100ms 間隔記錄整卡功耗測試方法上我做了幾個對照量化前 FP16 跑一輪量化后 INT8 跑一輪兩輪輸入完全一致記錄完整推理時間、峰值功耗、平均功耗和吞吐量。同時跑一個純空載功耗作為基線。4.2 結(jié)果數(shù)據(jù)功耗、吞吐、顯存的直觀變化下面這組數(shù)據(jù)是我在訓(xùn)練機(jī)上多次測試取的中位值可以當(dāng)作一個比較有代表性的參考指標(biāo)FP16 基線INT8 量化后變化幅度平均整卡功耗約 135W約 98W降低約 27%峰值功耗約 148W約 112W降低約 24%推理吞吐量約 42 token/s約 71 token/s提升約 69%顯存占用約 15.2GB約 8.6GB降低約 43%單請求平均時延約 3.1s約 1.8s降低約 42%說實(shí)話第一次跑出這組數(shù)據(jù)的時候我有點(diǎn)意外。因?yàn)榘次抑暗慕?jīng)驗(yàn)INT8 相比 FP16 通常能讓功耗降 15%~25%這次能到 27%主要是因?yàn)榇竽P屯评淼哪芎拇箢^在訪存而量化后權(quán)重體積減半訪存省下來的電非??捎^。另一個值得注意的點(diǎn)是顯存占用降到 8.6GB。這意味著原來必須用 24GB 顯卡才能跑的模型現(xiàn)在用 12GB 甚至更小的設(shè)備也能跑。這直接拓寬了硬件選型空間——很多原本要上 A10 的場景現(xiàn)在換成功耗更低的小卡就夠了整機(jī)功耗進(jìn)一步下降。4.3 精度變化這個“代價”其實(shí)很小光看功耗和性能可能有人會擔(dān)心精度崩了。我也同樣做了測試。在一個真實(shí)任務(wù)的數(shù)據(jù)集上FP16 基線準(zhǔn)確率是 82.4%INT8 量化后是 81.9%下降 0.5 個百分點(diǎn)。在另一個生成任務(wù)上ROUGE-L 分?jǐn)?shù)從 31.2 降到 30.8降幅差不多在同一量級。這個精度損失在絕大多數(shù)業(yè)務(wù)場景里都是可以接受的。尤其當(dāng)你換來的是整卡功耗下降近三成、吞吐提升近七成這筆賬非常劃算。當(dāng)然不同模型的敏感度不一樣。有的模型量化后精度損失不到 0.1%有的則可能掉幾個點(diǎn)這就需要用到我下面要講的經(jīng)驗(yàn)針對性地做修復(fù)。5. 踩坑記錄校準(zhǔn)集、敏感算子與混合精度做量化這些年我踩過的坑不少但歸納起來九成的問題都集中在三個地方校準(zhǔn)集選得不對、敏感算子被無差別量化、目標(biāo)硬件算子支持有隱藏限制。這一節(jié)我把排查鏈路完整寫出來讓后來的人少走彎路。5.1 坑一校準(zhǔn)集分布偏了生產(chǎn)環(huán)境直接翻車這個問題我在前面提了一句但值得展開因?yàn)樗橇炕暇€失敗最常見的原因而且特別隱蔽?,F(xiàn)象量化后離線測試精度看起來沒問題但一上線用戶反饋?zhàn)儾钶敵鲑|(zhì)量肉眼可見地下滑。排查思路一開始我以為是量化本身的問題試了更保守的校準(zhǔn)算法、調(diào)低了量化位寬但都沒用。后來我打印了量化前后各層激活值的分布發(fā)現(xiàn)量化模型在部分層上的激活分布和校準(zhǔn)階段記錄的分布差了很多。問題直接指向校準(zhǔn)集分布和線上真實(shí)數(shù)據(jù)分布不一致。修復(fù)方案放棄通用數(shù)據(jù)集從生產(chǎn)日志里抽取真實(shí)的用戶輸入作為校準(zhǔn)集重新校準(zhǔn)。修復(fù)后精度恢復(fù)到跟 FP16 基本持平的水平。心得校準(zhǔn)集的質(zhì)量直接影響量化模型的上限。寧可樣本數(shù)量少一些也要保證和真實(shí)業(yè)務(wù)分布一致。500 條高質(zhì)量、覆蓋面廣的業(yè)務(wù)數(shù)據(jù)比 5000 條同質(zhì)化數(shù)據(jù)有用得多。5.2 坑二某些層特別“敏感”一刀切 INT8 就崩另一個高頻問題是量化后的模型大部分輸出還正常但特定類型的任務(wù)表現(xiàn)特別差或者長文本生成時越到后面越亂?,F(xiàn)象一個做代碼生成的模型量化后常規(guī)問答沒問題但生成幾百行代碼時經(jīng)常出現(xiàn)語法錯誤和邏輯斷裂。排查思路這種局部劣化通常指向特定敏感算子被量化后誤差累積。我做了分塊排查把模型分層先只量化前 1/3 層測精度再逐步擴(kuò)大量化范圍看是哪一部分的量化引入了主要誤差。實(shí)測下來Attention 層里的 QKV 投影和輸出投影是最敏感的位置這些小部分的數(shù)值波動會被后續(xù)的反向傳播和注意力計(jì)算放大。修復(fù)方案對這些敏感模塊做混合精度處理保留 FP16其他層繼續(xù)用 INT8。結(jié)果相當(dāng)理想模型體積只有全 FP16 的 55%精度幾乎無損功耗優(yōu)化效果依然顯著平均功耗從約 135W 降到約 104W雖然沒有全量化那么低但比不量化強(qiáng)太多了。心得混合精度不是“開倒車”而是“精準(zhǔn)治療”。量化調(diào)優(yōu)的本質(zhì)是在體積/功耗和精度之間找到最優(yōu)點(diǎn)而不是機(jī)械地追求所有層全部低比特。5.3 坑三目標(biāo)硬件不支持 INT8 算子悄悄回退 FP16這個坑最隱蔽因?yàn)樗粫?bào)錯只是“效果沒達(dá)到預(yù)期”。現(xiàn)象在公司一臺新服務(wù)器上重復(fù)之前成功的量化流程功耗下降卻只有 5% 左右跟預(yù)期差太遠(yuǎn)。排查思路一開始懷疑硬件差異但仔細(xì)看數(shù)據(jù)后發(fā)現(xiàn)量化后模型的推理時延幾乎沒變這很不正常。后來我打開推理引擎的算子日志發(fā)現(xiàn)模型里有一批算子在目標(biāo)芯片上根本就沒有 INT8 實(shí)現(xiàn)運(yùn)行時全部悄悄回退成了 FP32/FP16 版本。修復(fù)方案針對目標(biāo)芯片重新檢查了量化算子支持列表把不支持的算子在量化配置里做了特殊處理并調(diào)整了部分模型結(jié)構(gòu)用等價且支持量化的層替換原文案。修復(fù)后推理時延和功耗都恢復(fù)到預(yù)期的水平。心得量化永遠(yuǎn)要早一點(diǎn)綁定目標(biāo)硬件而不是事后再去適配。選芯片的時候就要確認(rèn)它支持的 INT8/INT4 算子是否能覆蓋模型的核心結(jié)構(gòu)。5.4 上線前必須做的回歸清單踩過這么多坑之后我現(xiàn)在每次發(fā)布量化模型都會強(qiáng)制走一遍回歸清單離線精度回歸在獨(dú)立測試集上對比量化前后核心指標(biāo)差異不超過 1%~2% 才放行。分布對齊檢查校準(zhǔn)集與生產(chǎn)數(shù)據(jù)分布偏差過大時必須重新校準(zhǔn)。目標(biāo)芯片實(shí)測在真實(shí)部署芯片上跑完整推理鏈路確認(rèn)關(guān)鍵算子沒有靜默回退。功耗與吞吐基線記錄量化前后整卡平均功耗、峰值功耗、吞吐量確保達(dá)到預(yù)期收益。長序列穩(wěn)定性測試大模型在長文本生成時誤差容易累積一定要覆蓋長序列場景。這套清單看起來繁瑣但每次上線前過一遍能省掉后續(xù)大量的線上問題排查時間。最后再分享一個我個人的小習(xí)慣量化不是一次性的工作。模型迭代、數(shù)據(jù)分布變化、硬件平臺更換都會讓之前的量化配置失效。我每次發(fā)布新版本模型都會把量化流程納入 CI/CD讓校準(zhǔn)、量化、精度回歸、功耗測試全自動跑一遍。長期來看這是讓量化工具持續(xù)發(fā)揮功耗優(yōu)化價值最穩(wěn)的方式。功耗優(yōu)化不一定要換芯片。先從 msModelSlim 量化開始讓現(xiàn)有硬件跑得更省、更快這可能是投入產(chǎn)出比最高的一步。