0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TPU-MLIR量化敏感層分析,提升模型推理精度

算能開發(fā)者社區(qū) ? 2023-10-10 10:17 ? 次閱讀


背景介紹

TPU-MLIR編譯器可以將機(jī)器學(xué)習(xí)模型轉(zhuǎn)換成算能芯片上運行的bmodel模型。由于浮點數(shù)的計算需要消耗更多的計算資源和存儲空間,實際應(yīng)用中往往采用量化后的模型(也稱定點模型)進(jìn)行推理。相比于浮點數(shù)模型,量化模型的推理精度會有一定程度的損失。當(dāng)精度損失較大時,需要搜索模型中對精度影響較大的層,即敏感層,將其改回浮點類型,生成混精度模型進(jìn)行推理。

以mobilenet-v2網(wǎng)絡(luò)為例,使用ILSVRC-2012數(shù)據(jù)驗證集的5萬張圖片驗證浮點數(shù)模型和量化模型(表格中分別記為FLOAT和INT8)的精度,INT8模型的Top1精度降低了3.2%,Top5精度降低了2%。

TypeTop1 (%)Top5 (%)
FLOAT70.7289.81
INT867.5387.84

敏感層搜索

TPU-MLIR的敏感層搜索功能會計算網(wǎng)絡(luò)模型中的每一層分別由浮點數(shù)類型轉(zhuǎn)成定點數(shù)類型后,對網(wǎng)絡(luò)模型輸出造成的損失。同時,由于量化threshold值也會影響定點模型的精度,敏感層搜索功能考慮了三種量化方法——KL、MAX和Percentile對精度的影響。KL方法首先統(tǒng)計FLOAT模型tensor絕對值的直方圖(2048個bin),得到參考概率分布P,隨后用INT8類型去模擬表達(dá)這個直方圖(128個bin),得到量化概率分布Q,在不同的截取位置計算P和Q的KL散度,最小散度對應(yīng)的截取位置記為KL方法得到的threshold值。MAX方法是用FLOAT模型tensor絕對值的最大值作為量化threshold。Percentile方法則是通過統(tǒng)計FLOAT模型tensor絕對值的百分位數(shù)來確定threshold。

算法流程

敏感層搜索算法的流程圖如下:

30f41e20-6713-11ee-9788-92fbcf53809c.png敏感層搜索流程圖

  1. 在搜索之前需要先判斷FLOAT模型和INT8模型的相似度,用一定數(shù)目的圖片(比如30張)進(jìn)行推理,計算兩種模型輸出結(jié)果的余弦相似度的平均值,如果平均值達(dá)到預(yù)設(shè)值,比如0.99,則認(rèn)為INT8模型與FLOAT模型的相似度較高,不需要進(jìn)行敏感層搜索。
  2. 對于該模型,生成三種量化方法對應(yīng)的量化表。
  3. 循環(huán)每個op及每種量化方法,將該op改為INT8類型,并采用對應(yīng)量化方法下的threshold,生成混精度模型,計算其與FLOAT模型網(wǎng)絡(luò)輸出的loss(1減余弦相似度),記錄最優(yōu)threshold,即最低loss值對應(yīng)的threshold,隨后將該op改回FLOAT類型。
  4. 將所有op按照loss從大到小排序,選擇排名前五的op生成qtable。

在搜索過程中,對于每個op及其每種threshold值下生成的混精度模型與FLOAT模型的loss,以及最終按照loss排序的所有op信息(包括op的名字、類型和loss),均會記錄在log日志中,用戶可以通過查看log日志,手動調(diào)整qtable文件。

使用方法

敏感層搜索需要輸入從model_transform步驟得到的mlir文件,run_calibration步驟得到的量化表,推理用的數(shù)據(jù)集等,使用命令如下:

run_sensitive_layer.pymobilenet.mlir\
--dataset../ILSVRC2012\
--input_num100\
--inference_num30\
--max_float_layers5\
--expected_cos0.99\
--post_processpostprocess.py\
--calibration_tablemobilenet_cali_table\
--chipbm1684\
-omobilenet_qtable

各項參數(shù)的含義如下表所示:

參數(shù)名稱含義
dataset用于量化和推理的數(shù)據(jù)集,推薦使用bad case
input_num用于量化的圖片數(shù)目
inference_num用于推理的圖片數(shù)目
max_float_layersqtable中的op數(shù)目
expected_cosINT8模型和FLOAT模型的余弦相似度閾值,達(dá)到閾值則不進(jìn)行敏感層搜索
post_process用戶自定義后處理文件路徑,后處理函數(shù)需要命名為PostProcess
calibration_tablerun_calibration步驟得到的量化表
chip使用的芯片類型
o生成的qtable名稱

敏感層搜索程序會生成如下文件:

  1. 用于生成混精度模型的qtable,每行記錄了需要轉(zhuǎn)回FLOAT的op及轉(zhuǎn)換類型,例如:input3.1 F32;
  2. 經(jīng)過調(diào)優(yōu)后的新量化表new_cali_table,在原始量化表的基礎(chǔ)上,更新了每個op的threshold值為三種量化方法中最優(yōu)的threshold;
  3. 搜索日志SensitiveLayerSearch,記錄整個搜索過程中,每個op在每種量化方法下,混精度模型與FLOAT模型的loss;

注意,在model_deploy步驟生成混精度模型時,需要使用qtable和新量化表。

精度測試結(jié)果

仍以前述精度測試采用的mobilenet-v2網(wǎng)絡(luò)為例,使用ILSVRC2012數(shù)據(jù)集中的100張圖片做量化,30張圖片做推理,敏感層搜索總共耗時402秒,占用內(nèi)存800M,輸出結(jié)果信息如下:

the layer input3.1 is 0 sensitive layer, loss is 0.008808857469573828, type is top.Conv
the layer input11.1 is 1 sensitive layer, loss is 0.0016958347875666302, type is top.Conv
the layer input128.1 is 2 sensitive layer, loss is 0.0015641432811860367, type is top.Conv
the layer input130.1 is 3 sensitive layer, loss is 0.0014325751094084183, type is top.Scale
the layer input127.1 is 4 sensitive layer, loss is 0.0011817314259702227, type is top.Add
the layer input13.1 is 5 sensitive layer, loss is 0.001018420214596527, type is top.Scale
the layer 787 is 6 sensitive layer, loss is 0.0008603856180608993, type is top.Scale
the layer input2.1 is 7 sensitive layer, loss is 0.0007558935451825732, type is top.Scale
the layer input119.1 is 8 sensitive layer, loss is 0.000727441637624282, type is top.Add
the layer input0.1 is 9 sensitive layer, loss is 0.0007138056757098887, type is top.Conv
the layer input110.1 is 10 sensitive layer, loss is 0.000662179506136229, type is top.Conv
......
run result:
int8 outputs_cos:0.978847 old
mix model outputs_cos:0.989741
Output mix quantization table to mobilenet_qtable
total time:402.15848112106323

觀察可知,input3.1的loss最大,且值為其他op的至少5倍。嘗試只將input3.1加進(jìn)qtable,其他層都保持INT8類型不變,生成混精度模型,在ILSVRC2012驗證集上進(jìn)行推理,精度如下:

TypeTop1 (%)Top5 (%)
FLOAT70.7289.81
INT867.5387.84
MIX(oricali)68.1988.33
MIX(newcali)69.0788.73

上表中,MIX(oricali)代表使用原始量化表的混精度模型,MIX(newcali)代表使用新量化表的混精度模型,可以看出,基于三種量化方法的threshold調(diào)優(yōu),也對模型的精度起到了正向影響。相比于INT8模型,混精度模型的Top1精度提升1.5%,Top5精度提升約1%。

對比混精度搜索

混精度搜索是TPU-MLIR中的另一個量化調(diào)優(yōu)搜索功能,它的核心思想是先尋找到layer_cos不滿足要求的層,再將該層及其下一層均從INT8轉(zhuǎn)回FLOAT,生成混精度模型,計算其與FLOAT模型輸出的余弦相似度,如果余弦相似度達(dá)到預(yù)設(shè)值,則停止搜索。注意,混精度搜索只有在op表現(xiàn)較差,即混精度模型與FLOAT模型輸出相似度低于INT8模型與FLOAT模型輸出相似度時,才會將op類型從FLOAT置回INT8,否則不會改變op的精度類型。所以混精度搜索不需要從頭進(jìn)行推理,耗時較短。這兩種方法的對比如下:

對比情況敏感層搜索混精度搜索
核心思想循環(huán)所有op,找對網(wǎng)絡(luò)輸出影響最大的層以單層layer的相似度為入口,網(wǎng)絡(luò)輸出的相似度為停止條件
考慮多種量化方法只考慮KL方法
修改量化表使用原始量化表
考慮相鄰兩層只考慮單層
考慮layer_cos暫未考慮
考慮網(wǎng)絡(luò)輸出的余弦相似度
手動修改qtable使用程序生成的qtable即可
支持用戶自定義后處理暫不支持
遍歷所有op有skip規(guī)則,并且達(dá)到預(yù)設(shè)cos后直接停止
op類型轉(zhuǎn)換規(guī)則從FLOAT變?yōu)镮NT8,算loss從INT8變回FLOAT,算cos

混精度搜索從網(wǎng)絡(luò)輸入開始,不斷搜索對網(wǎng)絡(luò)輸出相似度有提升的層加入qtable,直到網(wǎng)絡(luò)輸出相似度達(dá)到預(yù)設(shè)值后終止搜索。該方法可能會漏掉靠近網(wǎng)絡(luò)輸出部分的敏感層,而敏感層搜索方法會遍歷所有op,不會出現(xiàn)這種遺漏,這也是敏感層搜索的優(yōu)勢之處。在實際應(yīng)用中,用戶可以先使用速度較快的混精度搜索,如果沒能達(dá)到預(yù)期效果,再使用敏感層搜索功能進(jìn)行全局遍歷。

結(jié)語

敏感層搜索功能旨在尋找模型量化時對精度影響較大的層,它會遍歷模型中的所有op及三種量化方法,選擇最優(yōu)的量化threshold,記錄所有op的loss。將搜索到的敏感層設(shè)定為浮點數(shù)類型,其余層設(shè)定為定點數(shù)類型,生成混合精度模型,可以提升模型推理的精度。目前的敏感層搜索功能在mobilenet-v2網(wǎng)絡(luò)中表現(xiàn)優(yōu)異,只需要將loss最大的一層置為FLOAT,就可以獲得1.5%的精度提升。與混精度搜索方法相比,敏感層搜索雖然耗時更久,但它考慮了所有op和三種量化方法,不會遺漏靠近網(wǎng)絡(luò)輸出部分的敏感層。未來可以考慮從三個方面對敏感層搜索功能進(jìn)行優(yōu)化:1) 結(jié)合混精度搜索的優(yōu)點,在搜索時考慮每層及其鄰近層對網(wǎng)絡(luò)輸出的綜合影響;2) 在生成qtable時,不是根據(jù)用戶設(shè)定的數(shù)目,選擇loss最大的前N層,而是通過計算,將能讓網(wǎng)絡(luò)輸出相似度達(dá)到預(yù)設(shè)值的op均加入qtable;3) 在遍歷op的過程中考慮并行,縮短搜索時間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3032

    瀏覽量

    48346
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131838
  • TPU
    TPU
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    20646
收藏 人收藏

    評論

    相關(guān)推薦

    深度神經(jīng)網(wǎng)絡(luò)模型量化的基本方法

    深度神經(jīng)網(wǎng)絡(luò)模型量化是深度學(xué)習(xí)領(lǐng)域中的一種重要優(yōu)化技術(shù),旨在通過減少模型參數(shù)的精度(即從高精度浮點數(shù)如32位浮點數(shù)FP32降低到低
    的頭像 發(fā)表于 07-15 11:26 ?448次閱讀

    深度學(xué)習(xí)模型量化方法

    深度學(xué)習(xí)模型量化是一種重要的模型量化技術(shù),旨在通過減少網(wǎng)絡(luò)參數(shù)的比特寬度來減小模型大小和加速推理
    的頭像 發(fā)表于 07-15 11:01 ?342次閱讀
    深度學(xué)習(xí)<b class='flag-5'>模型</b><b class='flag-5'>量化</b>方法

    【算能RADXA微服務(wù)器試用體驗】+ GPT語音與視覺交互:2,圖像識別

    BModel混合精度量化 ├── yolov8s_qtable_fp32 # TPU-MLIR編譯時,用于BM1684的INT8 BModel混合精度量化
    發(fā)表于 07-14 23:36

    esp-dl int8量化模型數(shù)據(jù)集評估精度下降的疑問求解?

    一 試著將模型進(jìn)行了esp-dl上int16和int8的量化,并在測試數(shù)據(jù)集上進(jìn)行精度評估,其中int16的模型精度基本沒有下降,但是int
    發(fā)表于 06-28 15:10

    Groq推出大模型推理芯片 超越了傳統(tǒng)GPU和谷歌TPU

    Groq推出了大模型推理芯片,以每秒500tokens的速度引起轟動,超越了傳統(tǒng)GPU和谷歌TPU。
    的頭像 發(fā)表于 02-26 10:24 ?820次閱讀
    Groq推出大<b class='flag-5'>模型</b><b class='flag-5'>推理</b>芯片 超越了傳統(tǒng)GPU和谷歌<b class='flag-5'>TPU</b>

    如何高效處理LMEM中的數(shù)據(jù)?這篇文章帶你學(xué)會!

    WeightReorder是TPU-MLIR的一個pass(參考TPU-MLIR編譯流程圖),其完成了對部分常量數(shù)據(jù)的Layout變化和合并。本文介紹其中ConvlotionKernel
    的頭像 發(fā)表于 01-19 08:33 ?636次閱讀
    如何高效處理LMEM中的數(shù)據(jù)?這篇文章帶你學(xué)會!

    TPU-MLIR開發(fā)環(huán)境配置時出現(xiàn)的各種問題求解

    想要的容器的名字注意TPU-MLIR工程在docker中的路徑應(yīng)該是/workspace/tpu-mlir 2.3. ModelZoo(可選)? TPU-MLIR中自帶yolov5s模型
    發(fā)表于 01-10 08:02

    yolov5量化INT8出錯怎么處理?

    [Success]: tpuc-opt yolov5l_bm1684_int8_sym_tpu.mlir --mlir-disable-threading --strip-io-quant=\"
    發(fā)表于 01-10 06:40

    深入學(xué)習(xí)和掌握TPU硬件架構(gòu)有困難?TDB助力你快速上手!

    快速定位BModel與原始模型推理結(jié)果不一致的問題,進(jìn)而修復(fù)TPU-MLIR的編譯或模型出錯點。下圖是TDB工具集的框架。TDB主要是基于Python開發(fā)的,其核心功能
    的頭像 發(fā)表于 12-22 08:33 ?506次閱讀
    深入學(xué)習(xí)和掌握<b class='flag-5'>TPU</b>硬件架構(gòu)有困難?TDB助力你快速上手!

    HarmonyOS:使用MindSpore Lite引擎進(jìn)行模型推理

    場景介紹 MindSpore Lite 是一款 AI 引擎,它提供了面向不同硬件設(shè)備 AI 模型推理的功能,目前已經(jīng)在圖像分類、目標(biāo)識別、人臉識別、文字識別等應(yīng)用中廣泛使用。 本文介紹
    發(fā)表于 12-14 11:41

    解讀大模型FP量化的解決方案

    在 LLaMA, BERT 以及 ViTs 模型上,4-bit 量化皆取得了遠(yuǎn)超 SOTA 的結(jié)果。特別是,這篇文章展示了 4-bit 量化的 LLaMA-13B 模型,在零樣本
    發(fā)表于 11-24 11:15 ?773次閱讀
    解讀大<b class='flag-5'>模型</b>FP<b class='flag-5'>量化</b>的解決方案

    Google的第五代TPU,推理性能提升2.5倍

     Gridspace 機(jī)器學(xué)習(xí)主管Wonkyum Lee表示:“我們的速度基準(zhǔn)測試表明,在 Google Cloud TPU v5e 上訓(xùn)練和運行時,AI 模型的速度提高了 5 倍。我們還看到推理
    發(fā)表于 11-24 10:27 ?457次閱讀
    Google的第五代<b class='flag-5'>TPU</b>,<b class='flag-5'>推理</b>性能<b class='flag-5'>提升</b>2.5倍

    Yolo系列模型的部署、精度對齊與int8量化加速

    在基于PytorchQuantization導(dǎo)出的含有QDQ節(jié)點的onnx時,我們發(fā)現(xiàn)盡管量化版本的torch模型精度很高,但是在TensorRT部署時精度卻很低,TRT部署收
    的頭像 發(fā)表于 11-23 16:40 ?1030次閱讀

    如何適配新架構(gòu)?TPU-MLIR代碼生成CodeGen全解析!

    背景介紹TPU-MLIR的CodeGen是BModel生成的最后一步,該過程目的是將MLIR文件轉(zhuǎn)換成最終的Bmodel。本文介紹了CodeGen的基本原理和流程,并記錄了針對BM1684X等新架構(gòu)
    的頭像 發(fā)表于 11-02 08:34 ?1414次閱讀
    如何適配新架構(gòu)?<b class='flag-5'>TPU-MLIR</b>代碼生成CodeGen全解析!

    探索ChatGLM2在算能BM1684X上INT8量化部署,加速大模型商業(yè)落地

    |探索ChatGLM2-6B模型TPU部署》。為了進(jìn)一步提升模型推理效率與降低存儲空間,我們對模型
    的頭像 發(fā)表于 10-10 10:18 ?3277次閱讀
    探索ChatGLM2在算能BM1684X上INT8<b class='flag-5'>量化</b>部署,加速大<b class='flag-5'>模型</b>商業(yè)落地