出身背景
加速深層神經(jīng)網(wǎng)絡(luò)( DNN )推理是實現(xiàn)實時應(yīng)用(如圖像分類、圖像分割、自然語言處理等)延遲關(guān)鍵部署的重要步驟。
改進(jìn) DNN 推理延遲的需要引發(fā)了人們對以較低精度運行這些模型的興趣,如 FP16 和 INT8 。在 INT8 精度下運行 DNN 可以提供比其浮點對應(yīng)項更快的推理速度和更低的內(nèi)存占用。 NVIDIA TensorRT 支持訓(xùn)練后量化( PTQ )和 QAT 技術(shù),將浮點 DNN 模型轉(zhuǎn)換為 INT8 精度。
在這篇文章中,我們討論了這些技術(shù),介紹了用于 TensorFlow 的 NVIDIA QAT 工具包,并演示了一個端到端工作流,以設(shè)計最適合 TensorRT 部署的量化網(wǎng)絡(luò)。
量化感知訓(xùn)練
QAT 背后的主要思想是通過最小化訓(xùn)練期間的量化誤差來模擬低精度行為。為此,可以通過在所需層周圍添加量化和去量化( QDQ )節(jié)點來修改 DNN 圖。這使得量化網(wǎng)絡(luò)能夠?qū)⒂捎谀P土炕统瑓?shù)的微調(diào)而導(dǎo)致的 PTQ 精度損失降至最低。
另一方面, PTQ 在模型已經(jīng)訓(xùn)練之后,使用校準(zhǔn)數(shù)據(jù)集執(zhí)行模型量化。由于量化沒有反映在訓(xùn)練過程中,這可能導(dǎo)致精度下降。圖 1 顯示了這兩個過程。
圖 1 通過 PTQ 和 QAT 的量化工作流
用于 TensorFlow 的 NVIDIA QAT 工具包
該工具包的目標(biāo)是使您能夠以最適合于 TensorRT 部署的方式輕松量化網(wǎng)絡(luò)。
目前, TensorFlow 在其開源軟件 模型優(yōu)化工具包 中提供非對稱量化。他們的量化方法包括在所需層的輸出和權(quán)重(如果適用)處插入 QDQ 節(jié)點,并提供完整模型或部分層類類型的量化。這是為 TFLite 部署而優(yōu)化的,而不是 TensorRT 部署。
需要此工具包來獲得一個量化模型,該模型非常適合 TensorRT 部署。 TensorRT optimizer 傳播 Q 和 DQ 節(jié)點,并通過網(wǎng)絡(luò)上的浮點操作將它們?nèi)诤显谝黄穑宰畲蠡?INT8 中可以處理的圖形比例。這將導(dǎo)致 NVIDIA GPU 上的最佳模型加速。我們的量化方法包括在所需層的輸入和權(quán)重(如果適用)處插入 QDQ 節(jié)點。
我們還執(zhí)行對稱量化( TensorRT 使用),并通過層名稱和 基于模式的層量化 的部分量化提供擴展量化支持。
表 1 總結(jié)了 TFMOT 和用于 TensorFlow 的 NVIDIA QAT 工具包之間的差異。
圖2顯示了一個簡單模型的前/后示例,用 Netron 可視化。QDQ節(jié)點放置在所需層的輸入和權(quán)重(如適用)中,即卷積(Conv)和完全連接(MatMul)。
圖 2 量化前后的模型示例(分別為基線和 QAT 模型)
TensorRT 中部署 QAT 模型的工作流
圖 3 顯示了在 TensorRT 中部署 QAT 模型的完整工作流,該模型是通過 QAT 工具包獲得的。
圖 3 TensorRT 使用 QAT 工具包獲得的 QAT 模型的部署工作流
假設(shè)預(yù)訓(xùn)練的 TensorFlow 2 模型為 SavedModel 格式,也稱為基線模型。
使用quantize_model功能對該模型進(jìn)行量化,該功能使用 QDQ 節(jié)點克隆并包裝每個所需的層。
微調(diào)獲得的量化模型,在訓(xùn)練期間模擬量化,并將其保存為SavedModel格式。
將其轉(zhuǎn)換為 ONNX 。
然后, TensorRT 使用 ONNX 圖來執(zhí)行層融合和其他圖優(yōu)化,如 專用 QDQ 優(yōu)化 ,并生成一個用于更快推理的引擎。
ResNet-50v1 示例
在本例中,我們將向您展示如何使用 TensorFlow 2 工具包量化和微調(diào) QAT 模型,以及如何在 TensorRT 中部署該量化模型。有關(guān)更多信息,請參閱完整的 example_resnet50v1.ipynb Jupyter 筆記本。
要求
要跟進(jìn),您需要以下資源:
Python 3.8
TensorFlow 2.8
NVIDIA TF-QAT 工具包
TensorRT 8.4
準(zhǔn)備數(shù)據(jù)
對于本例,使用 ImageNet 2012 數(shù)據(jù)集 進(jìn)行圖像分類(任務(wù) 1 ),由于訪問協(xié)議的條款,需要手動下載。 QAT 模型微調(diào)需要此數(shù)據(jù)集,它還用于評估基線和 QAT 模型。
登錄或注冊鏈接網(wǎng)站,下載列車/驗證數(shù)據(jù)。您應(yīng)該至少有 155 GB 的可用空間。
工作流支持 TFRecord 格式,因此請使用以下說明(從 TensorFlow 說明 ) 轉(zhuǎn)換下載的。將 ImageNet 文件轉(zhuǎn)換為所需格式:
set IMAGENET_HOME=/path/to/imagenet/tar/files in data/imagenet_data_setup.sh 。
將 imagenet_to_gcs.py 下載到$IMAGENET_HOME。
Run 。/data/imagenet_data_setup.sh.
您現(xiàn)在應(yīng)該可以在$IMAGENET_HOME中看到兼容的數(shù)據(jù)集。
量化和微調(diào)模型
from tensorflow_quantization import quantize_model from tensorflow_quantization.custom_qdq_cases import ResNetV1QDQCase # Create baseline model model = tf.keras.applications.ResNet50(weights="imagenet", classifier_activation="softmax") # Quantize model q_model = quantize_model(model, custom_qdq_cases=[ResNetV1QDQCase()]) # Fine-tune q_model.compile( optimizer="sgd", loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=["accuracy"] ) q_model.fit( train_batches, validation_data=val_batches, batch_size=64, steps_per_epoch=500, epochs=2 ) # Save as TF 2 SavedModel q_model.save(“saved_model_qat”)
將 SavedModel 轉(zhuǎn)換為 ONNX
$ python -m tf2onnx.convert --saved-model=--output= --opset 13
部署 TensorRT 發(fā)動機
將 ONNX 模型轉(zhuǎn)換為 TensorRT 引擎(還可以獲得延遲測量):
$ trtexec --onnx=--int8 --saveEngine= -v
獲取驗證數(shù)據(jù)集的準(zhǔn)確性結(jié)果:
$ python infer_engine.py --engine=--data_dir= -b=
后果
在本節(jié)中,我們報告了 ResNet 和 EfficientNet 系列中各種型號的準(zhǔn)確性和延遲性能數(shù)字:
ResNet-50v1
ResNet-50v2
ResNet-101v1
ResNet-101v2
效率網(wǎng) -B0
效率網(wǎng) -B3
所有結(jié)果都是在 NVIDIA A100 GPU 上獲得的,批次大小為 1 ,使用 TensorRT 8.4 ( EA 用于 ResNet , GA 用于 EfficientNet )。
圖 4 顯示了基線 FP32 模型與其量化等效模型( PTQ 和 QAT )之間的精度比較。正如您所見,基線模型和 QAT 模型之間的準(zhǔn)確性幾乎沒有損失。有時,由于模型的進(jìn)一步整體微調(diào),精度甚至更高。由于 QAT 中模型參數(shù)的微調(diào), QAT 的精度總體上高于 PTQ 。
圖 4 FP32 (基線)、帶 PTQ 的 INT8 和帶 QAT 的 INT8 中 ResNet 和 EfficientNet 數(shù)據(jù)集的準(zhǔn)確性
ResNet 作為一種網(wǎng)絡(luò)結(jié)構(gòu),一般量化穩(wěn)定,因此 PTQ 和 QAT 之間的差距很小。然而, EfficientNet 從 QAT 中獲益匪淺,與 PTQ 相比,基線模型的準(zhǔn)確度損失有所減少。
有關(guān)不同模型如何從 QAT 中受益的更多信息,請參見 深度學(xué)習(xí)推理的整數(shù)量化:原理與實證評價 (量化白皮書)中的表 7 。
圖 5 顯示了 PTQ 和 QAT 具有相似的時間,與各自的基線模型相比,它們引入了高達(dá) 19 倍的加速。
圖 5 ResNet 和 EfficientNet 系列中各種模型的延遲性能評估
PTQ 有時可能比 QAT 略快,因為它試圖量化模型中的所有層,這通常會導(dǎo)致更快的推斷,而 QAT 僅量化用 QDQ 節(jié)點包裹的層。
有關(guān) TensorRT 如何使用 QDQ 節(jié)點的更多信息,請參閱 TensorRT 文檔中的 使用 INT8 和 走向 INT8 推理:使用 TensorRT 部署量化感知訓(xùn)練網(wǎng)絡(luò)的端到端工作流 GTC 會話。
有關(guān)各種受支持型號的性能數(shù)字的更多信息,請參閱 model zoo 。
結(jié)論
在本文中,我們介紹了 TensorFlow 2 的 NVIDIA QAT 工具包 。 我們討論了在 TensorRT 推理加速環(huán)境中使用該工具包的優(yōu)勢。然后,我們演示了如何將該工具包與 ResNet50 結(jié)合使用,并對 ResNet 和 EfficientNet 數(shù)據(jù)集執(zhí)行準(zhǔn)確性和延遲評估。
實驗結(jié)果表明,與 FP32 模型相比,用 QAT 訓(xùn)練的 INT8 模型的精度相差約 1% ,實現(xiàn)了 19 倍的延遲加速。
關(guān)于作者
Gwena Cunha Sergio 在 NVIDIA 擔(dān)任深度學(xué)習(xí)軟件工程師。在此之前,她是韓國京浦國立大學(xué)的一名博士生,致力于研究基于深度學(xué)習(xí)的方法,用于嘈雜的自然語言處理任務(wù)和從多模態(tài)數(shù)據(jù)生成序列。
Sagar Shelke 是 NVIDIA 的深度學(xué)習(xí)軟件工程師,專注于自主駕駛應(yīng)用程序。他的興趣包括用于部署和機器學(xué)習(xí)系統(tǒng)的神經(jīng)網(wǎng)絡(luò)優(yōu)化。薩加爾擁有圣地亞哥州立大學(xué)電氣和計算機工程碩士學(xué)位。
Dheeraj Peri 在 NVIDIA 擔(dān)任深度學(xué)習(xí)軟件工程師。在此之前,他是紐約羅切斯特理工學(xué)院的研究生,致力于基于深度學(xué)習(xí)的內(nèi)容檢索和手寫識別方法。 Dheeraj 的研究興趣包括信息檢索、圖像生成和對抗性機器學(xué)習(xí)。他獲得了印度皮拉尼 Birla 理工學(xué)院的學(xué)士學(xué)位。
Josh Park 是 NVIDIA 的汽車解決方案架構(gòu)師經(jīng)理。到目前為止,他一直在研究使用 DL 框架的深度學(xué)習(xí)解決方案,例如在 multi-GPUs /多節(jié)點服務(wù)器和嵌入式系統(tǒng)上的 TensorFlow 。此外,他一直在評估和改進(jìn)各種 GPUs + x86 _ 64 / aarch64 的訓(xùn)練和推理性能。他在韓國大學(xué)獲得理學(xué)學(xué)士和碩士學(xué)位,并在德克薩斯農(nóng)工大學(xué)獲得計算機科學(xué)博士學(xué)位
審核編輯:郭婷
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4798瀏覽量
102480 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5199瀏覽量
105558
發(fā)布評論請先 登錄
構(gòu)建開源OpenVINO?工具包后,使用MYRIAD插件成功運行演示時報錯怎么解決?
云計算開發(fā)工具包的功能
在NVIDIA TensorRT-LLM中啟用ReDrafter的一些變化

最新Simplicity SDK軟件開發(fā)工具包發(fā)布
解鎖NVIDIA TensorRT-LLM的卓越性能
NVIDIA TensorRT-LLM Roadmap現(xiàn)已在GitHub上公開發(fā)布

基于EasyGo Vs工具包和Nl veristand軟件進(jìn)行的永磁同步電機實時仿真

TensorRT-LLM低精度推理優(yōu)化

FPGA仿真工具包軟件EasyGo Vs Addon介紹

采用德州儀器 (TI) 工具包進(jìn)行模擬前端設(shè)計應(yīng)用說明

英國公司實現(xiàn)英偉達(dá)CUDA軟件在AMD GPU上的無縫運行
使用freeRTOS開發(fā)工具包時,在哪里可以找到freeRTOS的版本?
MediaTek與NVIDIA TAO加速物聯(lián)網(wǎng)邊緣AI應(yīng)用發(fā)展
存內(nèi)計算技術(shù)工具鏈——量化篇

評論