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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TPU-MLIR之量化感知訓練

jf_pJlTbmA9 ? 來源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-08-21 10:47 ? 次閱讀

Hello大家好,在之前的視頻中我們的講解主要集中在訓練后量化,也就是PTQ,那么這期視頻我們就再來講一下另一種主要的量化類型,量化感知訓練,我們暫且不會涉及到QAT在TPU-MLIR中的應用,只是先停留在理論層面進行一個介紹。

我們在學習PTQ的時候知道了量化其實就是一個尋找合適的量化參數(shù),將高位數(shù)據流映射為低位數(shù)據流的過程,實現(xiàn)模型輕量化并且提高推理效率,但在這個過程中模型的精度不可避免地會下降。

wKgaomTeygOAOMSWAAIpcf5KceA393.jpg

造成精度下降的原因有很多,其中主要有:

量化誤差的引入,就像右邊這張信號圖所示,我們在量化時做的取整操作其實就是用有限的離散取值去近似無限的連續(xù)取值,會不可避免的導致量化后的信號與量化前的信號有一定的偏差,當這種偏差越大時量化誤差往往也就越大。

而且Weight 與activation tensor用INT8來表示則不可避免地也會出現(xiàn)一定的信息損失,例如我們之前提到的截斷誤差,并且模型在進行Multiply-Accumulate操作中會采用INT32來接收累加的結果,然后將累加的結果再轉換回INT8,這個過程可能也會導致一定的截斷誤差。上一期視頻中我們介紹的校準方法只能在截斷誤差與量化誤差之間做一個權衡,而不能完全消除它們。

還有就是我們量化推導那期視頻中提到過的用Multiplier與rShift代替Scale的表示也會產生些許誤差

wKgaomTeygWATqy0AAMmYISJkLs868.jpg

QAT就是通過end-to-end training微調訓練后的模型參數(shù),讓模型對量化的魯棒性更強,從而緩和造成的精度下降問題,而且通過QAT,我們也能夠達成更低位,例如INT4的量化,從而進一步輕量化模型與提高推理效率

實現(xiàn)方式就是在訓練過程中進行模擬量化,或者說是插入FakeQuant偽量化算子,對weight與activation tensor進行量化,然后再做反量化引入量化誤差進行訓練,所以在fine-tune的過程中模型還是以FP32精度進行運算的,并不是像推理過程中的低位運算。之后我們通過反向傳播與梯度下降的方式微調模型權重。

對于量化參數(shù)的確定,weight tensor的量化參數(shù)通常采用絕對最大值除以127的方式確定,而activation tensor量化參數(shù)則根據QAT算法的不同可能也有所不同。早期的QAT算法采用滑動平均的方式在訓練過程中對量化取值范圍進行統(tǒng)計更新,而近些年來主流的QAT算法直接將量化參數(shù)定位可學習參數(shù)在反向傳播過程中通過梯度下降進行更新。

這樣的做法在實際實現(xiàn)過程中我們主要會遇到一個問題,就是偽量化算子中的round函數(shù)梯度要怎么計算,我們既然在原模型插入了偽量化算子,又要對模型進行重新訓練,就不得不考慮反向傳播時怎么計算它的梯度。

首先我們之前有看過量化后的信號波形圖其實是一個離散的階梯函數(shù),這樣的函數(shù)是不可導的,或者說它們的梯度是處處為0的,這就導致權重無法得到更新。所以我們需要想辦法去對它做近似操作。

一種傳統(tǒng)的方式是用Straight-Through Estimator在反向傳播過程中讓偽量化算子輸入的梯度等于輸出的梯度,或者說使他梯度為1。

由這種方法延伸出了一系列的QAT算法,例如DoReFaNet,這個算法將activation和weight都壓縮在0,1之間進行量化,后面會繼續(xù)講解基于STE的QAT算法,敬請期待。
審核編輯:彭菁

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

    關注

    3

    文章

    4260

    瀏覽量

    62232
  • 模型
    +關注

    關注

    1

    文章

    3062

    瀏覽量

    48575
  • 數(shù)據流
    +關注

    關注

    0

    文章

    118

    瀏覽量

    14308
收藏 人收藏

    評論

    相關推薦

    yolov5量化INT8出錯怎么處理?

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

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

    按照 TPU-MLIR 開發(fā)指南進行環(huán)境配置: 2.1. 代碼下載? 代碼路徑: https://github.com/sophgo/tpu-mlir 克隆該代碼后, 需要在Docker中編譯
    發(fā)表于 01-10 08:02

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

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

    YOLOv6中的用Channel-wise Distillation進行的量化感知訓練

    1、YOLOv6中的用Channel-wise Distillation進行的量化感知訓練來自哪里  知識蒸餾 (KD)已被證明是一種用于訓練緊湊密集預測模型的簡單有效的工具。輕量級學
    發(fā)表于 10-09 16:25

    在“model_transform.py”添加參數(shù)“--resize_dims 640,640”是否表示tpu會自動resize的?

    resize和letterbox的處理,在“TPU-MLIR入門快速指南.pdf”里的“使用TPU做前處理”里提到了“圖像裁剪”,沒看明白,能詳細解釋下的嗎?
    發(fā)表于 09-18 07:56

    Pytorch量化感知訓練的詳解

    量化感知訓練(Quantization Aware Training )是在模型中插入偽量化模塊(fake\_quant module)模擬量化
    的頭像 發(fā)表于 12-08 22:57 ?2304次閱讀

    適配PyTorch FX讓量化感知訓練更簡單

    近年來,量化感知訓練是一個較為熱點的問題,可以大大優(yōu)化量化訓練造成精度損失的問題,使得訓練過程
    的頭像 發(fā)表于 03-08 09:45 ?1102次閱讀

    如何給TPU-MLIR添加新的算子

    如何給TPU-MLIR添加新的算子
    的頭像 發(fā)表于 08-18 11:29 ?626次閱讀
    如何給<b class='flag-5'>TPU-MLIR</b>添加新的算子

    TPU-MLIR中的融合處理

    TPU-MLIR中的融合處理
    的頭像 發(fā)表于 08-18 11:29 ?450次閱讀
    <b class='flag-5'>TPU-MLIR</b>中的融合處理

    如何使用TPU-MLIR進行模型轉換

    TPU-MLIR精度驗證
    的頭像 發(fā)表于 08-21 10:41 ?654次閱讀
    如何使用<b class='flag-5'>TPU-MLIR</b>進行模型轉換

    基于STE的QAT算法

    TPU-MLIR量化感知訓練(下)
    的頭像 發(fā)表于 08-21 10:46 ?585次閱讀
    基于STE的QAT算法

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

    背景介紹TPU-MLIR編譯器可以將機器學習模型轉換成算能芯片上運行的bmodel模型。由于浮點數(shù)的計算需要消耗更多的計算資源和存儲空間,實際應用中往往采用量化后的模型(也稱定點模型)進行推理。相比
    的頭像 發(fā)表于 10-10 10:17 ?1196次閱讀
    <b class='flag-5'>TPU-MLIR</b><b class='flag-5'>量化</b>敏感層分析,提升模型推理精度

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

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

    深入學習和掌握TPU硬件架構有困難?TDB助力你快速上手!

    TDB介紹TDB(TPUDeBugger)是針對TPU-MLIR編譯出來的BModel設計的一系列調試工具集合,可以支持對BModel反匯編、結構可視化、單步執(zhí)行仿真等功能,使用方法靈活。能夠
    的頭像 發(fā)表于 12-22 08:33 ?573次閱讀
    深入學習和掌握<b class='flag-5'>TPU</b>硬件架構有困難?TDB助力你快速上手!

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

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