日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

CUDA上的量化深度学习模型的自动化优化

發(fā)布時(shí)間:2023/11/28 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CUDA上的量化深度学习模型的自动化优化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CUDA上的量化深度學(xué)習(xí)模型的自動(dòng)化優(yōu)化
深度學(xué)習(xí)已成功應(yīng)用于各種任務(wù)。在諸如自動(dòng)駕駛汽車推理之類的實(shí)時(shí)場(chǎng)景中,模型的推理速度至關(guān)重要。網(wǎng)絡(luò)量化是加速深度學(xué)習(xí)模型的有效方法。在量化模型中,數(shù)據(jù)和模型參數(shù)都用諸如int8和的低精度數(shù)據(jù)類型表示float16。降低的數(shù)據(jù)帶寬減少了推理時(shí)間和存儲(chǔ)器/存儲(chǔ)需求,以及功耗。同時(shí),在適當(dāng)?shù)牧炕桨赶?#xff0c;可以最小化量化模型的精度下降。量化模型特別適合研究人員和開發(fā)人員,使大型模型適合在各種設(shè)備(例如GPU,CPU和移動(dòng)設(shè)備)上部署。
以前,通常通過(guò)手工微內(nèi)核針對(duì)不同的工作量來(lái)優(yōu)化量化算子,或者依靠cuDNN和TensorRT等黑盒專有解決方案。在集成中編寫高性能微內(nèi)核可能非常困難,并且通常需要大量的工程工作。此外,很難使這些臨時(shí)微內(nèi)核適應(yīng)新興的工作負(fù)載和新設(shè)備。

圖1. TVM,TensorRT和MXNet上不同模型的推斷時(shí)間
TVM通過(guò)全棧編譯器和基于機(jī)器學(xué)習(xí)的優(yōu)化器來(lái)自動(dòng)生成計(jì)算內(nèi)核,從而解決了這一難題。TVM可以通過(guò)在人為設(shè)計(jì)的搜索空間中進(jìn)行自動(dòng)搜索來(lái)生成有效的內(nèi)核。在VGG和ResNet等標(biāo)準(zhǔn)工作負(fù)載中,TVM與其它最新框架相比具有競(jìng)爭(zhēng)優(yōu)勢(shì)。在諸如ResNeXt和Deformable ConvNets之類的新興模型中,自動(dòng)優(yōu)化使TVM可以輕松適應(yīng)這些新工作負(fù)載并顯著提高性能。
本文將展示如何使用TVM在CUDA上自動(dòng)優(yōu)化量化深度學(xué)習(xí)模型。
在TVM中表達(dá)量化的CUDA內(nèi)核
通過(guò)張量化利用張量本征
許多平臺(tái)都為特殊的計(jì)算模式提供了特定于體系結(jié)構(gòu)的指令,例如x86上的SIMD指令dp4a以及hfmaCUDA上的和指令。這些內(nèi)在指令針對(duì)特定設(shè)備進(jìn)行了高度優(yōu)化。通過(guò)利用硬件內(nèi)在函數(shù),可以為量化算子帶來(lái)顯著的性能提升。
目前,dp4a已被CUDA上的TVM int8算子廣泛使用。 dp4a是Compute Capability 6.1設(shè)備上固有的CUDA。一種混合精度指令,可以高效地計(jì)算兩個(gè)4元素8位整數(shù)向量之間的點(diǎn)積,并以32位格式累加結(jié)果。使用dp4a,可以在8位整數(shù)向量之間實(shí)現(xiàn)點(diǎn)積,其元素?cái)?shù)可以被4整除。使用高效的點(diǎn)積算子,可以實(shí)現(xiàn)高級(jí)算子,例如2D卷積和密集層,因?yàn)檫@些算子通常由點(diǎn)積支持。
為了說(shuō)明這一點(diǎn),在二維卷積中,沿著內(nèi)核的通道,寬度和高度軸進(jìn)行累積。這是典型用例dp4a。TVM使用張量化來(lái)支持調(diào)用外部?jī)?nèi)在函數(shù)。不需要修改原始的計(jì)算聲明;使用調(diào)度原語(yǔ)tensorize用dp4a張量?jī)?nèi)在函數(shù)代替累加。
數(shù)據(jù)布局重排
張量化的挑戰(zhàn)之一,可能需要設(shè)計(jì)特殊的計(jì)算邏輯以適應(yīng)張量本征的要求。盡管在密集算子中沿張量的內(nèi)軸累積是很自然的,conv2d可能更具挑戰(zhàn)性。在conv2d期望采取切片在作為輸入端的通道尺寸dp4a,因?yàn)樾诺罃?shù)目通常是4的倍數(shù)(否則回落到原來(lái)conv2d在NCHW布局)。為了實(shí)現(xiàn)內(nèi)存局部性,希望首先沿最內(nèi)軸減小。考慮到這些因素,使用自定義數(shù)據(jù)布局來(lái)應(yīng)對(duì)這一挑戰(zhàn)。
在CUDA int8 2d卷積中,根據(jù)經(jīng)驗(yàn)選擇NCHW4c作為數(shù)據(jù)布局和OIHW4o4i權(quán)重布局。模板很容易地推廣到NCHW[x]c和OIHW[x]o[x]i,其中x是可以被四整除的任意正整數(shù)。在選擇的數(shù)據(jù)布局中,通道切片位于打包的最里面維度。在權(quán)重的輸入和輸出通道尺寸中打包切片,以使輸出與輸入具有一致的數(shù)據(jù)布局,從而防止了圖層之間的多余布局轉(zhuǎn)換。
圖2顯示了2d卷積輸出的一個(gè)元素的計(jì)算。超尺寸(包含打包元素的塊狀布局的外部尺寸)每個(gè)位置的元素NCHW和OIHW分別是打包的輸入和內(nèi)核。打包內(nèi)核的每一列都來(lái)自不同的過(guò)濾器。使用計(jì)算壓縮輸入和壓縮內(nèi)核中每一行之間的點(diǎn)積dp4a,并將結(jié)果累加到輸出張量。

圖2. NCHW4c中的數(shù)據(jù)布局和OIHW4o4i中的權(quán)重布局的二維卷積。左:NCHW4c布局中的輸入張量。內(nèi)核的一個(gè)移動(dòng)的過(guò)濾器被染成藍(lán)色。輸入和內(nèi)核的一個(gè)元素以灰色顯示。 中:灰色塊中的打包輸入和內(nèi)核。右:NCHW4c布局中的輸出。在所示的一個(gè)元素內(nèi),通道子維度中有四個(gè)壓縮元素。
在指定卷積層的布局之后,其它算子(例如add和激活)可以在Relay中的AlterOpLayout傳遞期間自動(dòng)適應(yīng)所選的布局。權(quán)重的布局轉(zhuǎn)換可以離線進(jìn)行預(yù)先計(jì)算。可以在相同的布局中運(yùn)行整個(gè)模型而無(wú)需額外的開銷。
設(shè)計(jì)搜索空間以進(jìn)行自動(dòng)優(yōu)化
在量化算子中獲得良好性能的關(guān)鍵是與基于機(jī)器學(xué)習(xí)的自動(dòng)優(yōu)化相集成。一個(gè)問(wèn)題是如何設(shè)計(jì)有效的調(diào)度表搜索空間。有效的計(jì)劃模板意味著在自動(dòng)調(diào)整中,可以通過(guò)合理的迭代次數(shù)獲得良好的性能。定義一個(gè)靈活的模板以覆蓋搜索空間中的不同配置。利用性能優(yōu)化方面的先驗(yàn)知識(shí)。例如,一種常見的做法是,在CUDA編程中將數(shù)據(jù)緩存在共享內(nèi)存中,因此利用共享內(nèi)存,使用機(jī)器學(xué)習(xí)來(lái)選擇最佳的圖塊大小。還進(jìn)行了一些手動(dòng)平鋪,例如將軸分割為4或16,以方便進(jìn)行向量化內(nèi)存訪問(wèn)。
在量化的2d卷積中,設(shè)計(jì)了一個(gè)搜索空間,其中包括一組可調(diào)選項(xiàng),例如圖塊大小,要融合的軸,循環(huán)展開和雙緩沖的配置。在CUDA上注冊(cè)了量化模板conv2d和denseCUDA模板int8。在自動(dòng)調(diào)整期間,可以通過(guò)設(shè)置template_key參數(shù),為這些量化算子創(chuàng)建調(diào)整任務(wù)。有關(guān)如何啟動(dòng)自動(dòng)優(yōu)化的詳細(xì)信息,請(qǐng)參見AutoTVM教程。
一般工作流程

圖3.運(yùn)行量化模型的工作流程
TVM提供了一個(gè)簡(jiǎn)單的工作流程,可以量化其它框架中訓(xùn)練有素的模型,自動(dòng)優(yōu)化算子(使用AutoTVM)并部署到其它設(shè)備。
首先,使用Relay前端導(dǎo)入現(xiàn)有模型。在這里,以帶有(1, 3, 224, 224)輸入形狀的MXNet模型為例。
sym, arg_params, aux_params = mxnet.model.load_checkpoint(model_path, epoch)
net, params = relay.from_mxnet(sym, shape={‘data’: (1, 3, 224, 224)}, arg_params=arg_params, aux_params=aux_params)
接下來(lái),使用中繼量化API將其轉(zhuǎn)換為量化模型。
net = relay.quantize.quantize(net, params=params)
然后,使用AutoTVM為模型中的算子提取調(diào)整任務(wù),并執(zhí)行自動(dòng)優(yōu)化。
最后,建立模型并以量化模式運(yùn)行推理。
with relay.build_config(opt_level=3):
graph, lib, params = relay.build(net, target)
結(jié)果relay.build是可部署的庫(kù)。可以直接在GPU上運(yùn)行推理,也可以通過(guò)RPC部署在遠(yuǎn)程設(shè)備上。
基準(zhǔn)
為了驗(yàn)證TVM中量化算子的性能,對(duì)幾種流行的網(wǎng)絡(luò)模型(包括VGG-19,ResNet-50和Inception V3)的性能進(jìn)行了基準(zhǔn)測(cè)試。還對(duì)來(lái)自可變形卷積網(wǎng)絡(luò)的DRN-C-26,ResNeXt-50和DCN-ResNet-101進(jìn)行基準(zhǔn)測(cè)試,以顯示新興模型的性能,其中包含較少的常規(guī)算子,例如膨脹卷積,組卷積和可變形卷積。選擇NVIDIA TensorRT作為基準(zhǔn)。據(jù)報(bào)道,在float32模式下MXNet 1.4 + cuDNN 7.3的結(jié)果顯示了量化的加快。實(shí)驗(yàn)是在NVIDIA GTX 1080上進(jìn)行的。當(dāng)以批處理大小= 1和16運(yùn)行時(shí),輸出每個(gè)圖像的推理時(shí)間。
如圖1所示,TVM使用量化實(shí)現(xiàn)了高達(dá)8倍的加速。在VNG和ResNet等標(biāo)準(zhǔn)CNN模型中,TVM與TensorRT的最新結(jié)果保持一致。
在對(duì)新興模型進(jìn)行基準(zhǔn)測(cè)試時(shí),TVM取得了令人印象深刻的結(jié)果。在ResNeXt和DCN-ResNet-101上獲得了可觀的性能提升。TensorRT的DCN-ResNet-101的結(jié)果不可用,因?yàn)樯袩o(wú)可變形卷積的正式實(shí)現(xiàn)。TVM中的自動(dòng)優(yōu)化可以輕松靈活地支持和優(yōu)化新興的工作負(fù)載。

總結(jié)

以上是生活随笔為你收集整理的CUDA上的量化深度学习模型的自动化优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。