在部署神經(jīng)網(wǎng)絡(luò)時(shí),考慮如何使網(wǎng)絡(luò)運(yùn)行更快或占用更少的空間是很有用的。一個(gè)更高效的網(wǎng)絡(luò)可以在有限的時(shí)間預(yù)算內(nèi)做出更好的預(yù)測(cè),對(duì)意外的輸入做出更快的反應(yīng),或者適應(yīng)受限的部署環(huán)境。
稀疏性是一種有希望達(dá)到這些目標(biāo)的優(yōu)化技術(shù)。如果網(wǎng)絡(luò)中有零,則不需要對(duì)其進(jìn)行存儲(chǔ)或操作。稀疏的好處似乎很簡(jiǎn)單。要實(shí)現(xiàn)承諾的收益,長(zhǎng)期以來(lái)存在三個(gè)挑戰(zhàn)。
Acceleration – 細(xì)粒度、非結(jié)構(gòu)化、權(quán)重稀疏缺乏結(jié)構(gòu),無(wú)法使用高效硬件中可用的向量和矩陣指令來(lái)加速常見(jiàn)的網(wǎng)絡(luò)操作。標(biāo)準(zhǔn)稀疏格式對(duì)于除高稀疏以外的所有格式都是低效的。
Accuracy – 為了實(shí)現(xiàn)具有細(xì)粒度、非結(jié)構(gòu)化稀疏性的有用加速,必須使網(wǎng)絡(luò)稀疏,這通常會(huì)導(dǎo)致精度損失。嘗試使加速更容易的替代修剪方法,例如去除權(quán)重塊、通道或整個(gè)層的粗粒度修剪,可能更快地遇到精度問(wèn)題。這限制了潛在的性能優(yōu)勢(shì)。
Workflow – 當(dāng)前在網(wǎng)絡(luò)修剪方面的許多研究都可以作為有用的存在性證明。研究表明,網(wǎng)絡(luò) A 可以實(shí)現(xiàn)稀疏性 X 。當(dāng)您嘗試將稀疏性 X 應(yīng)用于網(wǎng)絡(luò) B 時(shí),麻煩就來(lái)了。由于網(wǎng)絡(luò)、任務(wù)、優(yōu)化器或任何超參數(shù)的不同,它可能無(wú)法工作。
在本文中,我們將討論 NVIDIA 安培體系結(jié)構(gòu)如何應(yīng)對(duì)這些挑戰(zhàn)。今天, NVIDIA 發(fā)布了 TensorRT 版本 8 。 0 ,它引入了對(duì) NVIDIA 安培體系結(jié)構(gòu) GPU 上可用的稀疏張量核的支持。
TensorRT 是一個(gè)用于高性能深度學(xué)習(xí)推理的 SDK ,它包括一個(gè)優(yōu)化器和運(yùn)行時(shí),可以最大限度地減少延遲和提高生產(chǎn)中的吞吐量。稀疏張量核通過(guò)一個(gè)簡(jiǎn)單的訓(xùn)練流程和 TensorRT 8 。 0 部署,可以消除神經(jīng)網(wǎng)絡(luò)中不必要的計(jì)算,與密集網(wǎng)絡(luò)相比,可以獲得 30% 以上的性能/瓦特增益。
稀疏張量核加速了 2 : 4 細(xì)粒度結(jié)構(gòu)稀疏性
NVIDIA A100 GPU 為其張量核增加了對(duì)細(xì)粒度結(jié)構(gòu)稀疏性的支持,稀疏張量核加速了 2 : 4 的稀疏模式。在四個(gè)值的每個(gè)連續(xù)塊中,兩個(gè)值必須為零。這自然會(huì)導(dǎo)致 50% 的稀疏度,這是細(xì)粒度的。沒(méi)有矢量或塊結(jié)構(gòu)修剪在一起。這樣的規(guī)則模式易于壓縮,并且元數(shù)據(jù)開(kāi)銷(xiāo)較低(圖 1 )。
圖 1 。 2 : 4 結(jié)構(gòu)稀疏矩陣 W 及其壓縮表示
稀疏張量核通過(guò)只對(duì)壓縮矩陣中的非零值進(jìn)行運(yùn)算來(lái)加速這種格式。它們使用與非零一起存儲(chǔ)的元數(shù)據(jù)僅從另一個(gè)未壓縮的操作數(shù)中提取必要的值。因此,對(duì)于 2x 的稀疏性,它們可以在一半的時(shí)間內(nèi)完成相同的有效計(jì)算。表 1 顯示了稀疏張量核支持的各種數(shù)據(jù)類(lèi)型的詳細(xì)信息。
表 1 。稀疏張量核在 NVIDIA 安培結(jié)構(gòu)中的性能。
2 : 4 結(jié)構(gòu)化稀疏網(wǎng)絡(luò)保持精度
當(dāng)然,沒(méi)有良好的準(zhǔn)確性,性能是毫無(wú)意義的。我們開(kāi)發(fā)了一個(gè)簡(jiǎn)單的培訓(xùn)工作流程,可以輕松生成 2 : 4 結(jié)構(gòu)化稀疏網(wǎng)絡(luò),匹配密集網(wǎng)絡(luò)的精度:
從密集的網(wǎng)絡(luò)開(kāi)始。我們的目標(biāo)是從一個(gè)已知的好模型開(kāi)始,該模型的權(quán)重已經(jīng)收斂,從而得到有用的結(jié)果。
在稠密網(wǎng)絡(luò)上,對(duì)權(quán)值進(jìn)行剪枝以滿(mǎn)足 2 : 4 的結(jié)構(gòu)稀疏性準(zhǔn)則。在每四個(gè)元素中,只刪除兩個(gè)。
重復(fù)原來(lái)的培訓(xùn)程序。
此工作流在步驟 2 中使用一次修剪。在修剪階段之后,稀疏模式被修復(fù)。有很多方法可以做出修剪的決定。哪些權(quán)重應(yīng)該保留,哪些權(quán)重應(yīng)該強(qiáng)制為零?我們發(fā)現(xiàn)一個(gè)簡(jiǎn)單的答案很有效:重量大小。我們更喜歡刪減已經(jīng)接近零的值。
正如您所料,突然將網(wǎng)絡(luò)中的一半權(quán)重變?yōu)榱銜?huì)影響網(wǎng)絡(luò)的精度。第三步通過(guò)足夠多的權(quán)重更新步驟來(lái)恢復(fù)精度,讓權(quán)重收斂,并且有足夠高的學(xué)習(xí)率讓權(quán)重充分移動(dòng)。在廣泛的網(wǎng)絡(luò)中,它生成一個(gè)稀疏模型,從步驟 1 開(kāi)始保持密集網(wǎng)絡(luò)的精度。
表 2 是我們使用 PyTorch 庫(kù) 自動(dòng)稀疏( ASP ) 中實(shí)現(xiàn)的此工作流獲得的 FP16 精度結(jié)果示例。有關(guān) FP16 和 INT8 的完整結(jié)果的更多信息,請(qǐng)參閱 加速稀疏深度神經(jīng)網(wǎng)絡(luò) 白皮書(shū)。
表 2 。用我們的配方訓(xùn)練的 2 : 4 結(jié)構(gòu)化稀疏網(wǎng)絡(luò)的樣本精度。
案例研究: ResNeXt-10132x8d
以下是以 ResNeXt-10132x8d 為目標(biāo)使用工作流的簡(jiǎn)單程度。
生成稀疏模型
您使用 torchvision 預(yù)訓(xùn)練的 model ,因此步驟 1 已經(jīng)完成。因?yàn)槟褂玫氖?ASP ,所以第一個(gè)代碼更改是導(dǎo)入庫(kù):
加載此訓(xùn)練運(yùn)行的預(yù)訓(xùn)練模型。不過(guò),與其訓(xùn)練密集權(quán)重,不如在訓(xùn)練循環(huán)之前修剪模型并準(zhǔn)備優(yōu)化器(工作流的步驟 2 ):
就這樣。訓(xùn)練循環(huán)正常進(jìn)行,默認(rèn)命令從預(yù)訓(xùn)練模型開(kāi)始,該模型重用原始超參數(shù)和優(yōu)化器設(shè)置進(jìn)行再訓(xùn)練:
當(dāng)訓(xùn)練完成(第 3 步)時(shí),網(wǎng)絡(luò)精度應(yīng)恢復(fù)到與預(yù)訓(xùn)練模型的精度相匹配,如表 2 所示。通常,性能最好的檢查點(diǎn)可能不是來(lái)自最后一個(gè)歷元。
準(zhǔn)備推理
對(duì)于推理,使用 TensorRT 8 。 0 導(dǎo)入訓(xùn)練模型的稀疏檢查點(diǎn)。在導(dǎo)入 TensorRT 之前,需要將模型從本機(jī)框架格式轉(zhuǎn)換為 ONNX 格式??梢园凑?quickstart/IntroNotebooks GitHub repo 中的筆記本進(jìn)行轉(zhuǎn)換。
我們已經(jīng)將稀疏 ResNeXt-10132x8d 轉(zhuǎn)換為 ONNX 格式。你可以從 NGC 下載這個(gè)模型。如果沒(méi)有安裝 NGC ,請(qǐng)使用以下命令安裝 NGC :
安裝 NGC 后,通過(guò)運(yùn)行以下命令下載 ONNX 格式的稀疏 ResNeXt-10132x8d :
要將 ONNX 模型導(dǎo)入到 TensorRT ,請(qǐng)克隆 TensorRT repo 并設(shè)置 Docker 環(huán)境,如 NVIDIA / TensorRT 自述 中所述。
進(jìn)入 trtexec 根目錄后,使用 TensorRT 將稀疏 ONNX 模型轉(zhuǎn)換為 TensorRT 引擎。創(chuàng)建一個(gè)目錄以存儲(chǔ)模型和引擎:
將下載的 ResNext ONNX 模型復(fù)制到 /workspace/TensorRT/model 目錄,然后執(zhí)行 trtexec 命令,如下所示:
名為 resnext101 _ engine 。 trt 的新文件創(chuàng)建于/ workspace / TensorRT / model /。 resnext101 _ engine 。 trt 文件現(xiàn)在可以通過(guò)以下方法之一序列化以執(zhí)行推斷:
TensorRT 運(yùn)行時(shí)的 C ++或 Python ,如在這個(gè) 示例筆記本 中所示
NVIDIA Triton ?聲波風(fēng)廓線儀推斷服務(wù)器
TensorRT 8 。 0 中的性能
將 TensorRT 8 。 0 中的稀疏模型在 A100 GPU 上以不同批量大小進(jìn)行基準(zhǔn)測(cè)試顯示了兩個(gè)重要趨勢(shì):
性能優(yōu)勢(shì)隨著 A100 所做的工作量的增加而增加。更大的批量通常會(huì)帶來(lái)更大的改進(jìn),在高端接近 20% 。
在較小的批處理規(guī)模下, A100 時(shí)鐘速度可以保持在較低的水平,使用稀疏性可以將它們推到更低的水平,以獲得相同的性能,從而導(dǎo)致比性能本身更大的功率效率改進(jìn),從而獲得高達(dá) 36% 的性能/瓦增益。
別忘了,這個(gè)網(wǎng)絡(luò)和密集基線的精確度是一樣的。這種額外的效率和性能不需要懲罰的準(zhǔn)確性。
圖 2 。性能和能效方面的稀疏性改進(jìn)(以密集為基準(zhǔn))
概括
稀疏性是神經(jīng)網(wǎng)絡(luò)壓縮和簡(jiǎn)化研究的熱點(diǎn)。不過(guò),到目前為止,細(xì)粒度稀疏性還沒(méi)有兌現(xiàn)其性能和準(zhǔn)確性的承諾。我們開(kāi)發(fā)了 2 : 4 細(xì)粒度結(jié)構(gòu)稀疏性,并將支持直接構(gòu)建到 NVIDIA 安培結(jié)構(gòu)稀疏張量核中。通過(guò)這個(gè)簡(jiǎn)單的三步稀疏再訓(xùn)練工作流,您可以生成與基線精度匹配的稀疏神經(jīng)網(wǎng)絡(luò), TensorRT 8 。 0 在默認(rèn)情況下對(duì)其進(jìn)行加速。
關(guān)于作者
About Jeff Pool
Jeff Pool 是深入學(xué)習(xí)體系結(jié)構(gòu)團(tuán)隊(duì)的高級(jí)架構(gòu)師,負(fù)責(zé)研究高效的 DL 方法。在 2012 年加入 NVIDIA 之后,他對(duì)各種體系結(jié)構(gòu)的許多領(lǐng)域做出了貢獻(xiàn),但最近他一直在使用稀疏神經(jīng)網(wǎng)絡(luò)。 Jeff 擁有計(jì)算機(jī)科學(xué)博士學(xué)位,專(zhuān)注于高效圖形硬件。
About Abhishek Sawarkar
Abhishek Sawarkar 責(zé)在 NVIDIA Jarvis 框架上開(kāi)發(fā)和展示以深度學(xué)習(xí)為重點(diǎn)的內(nèi)容。他的背景是計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí),但目前他正致力于整個(gè) Jarvis 多模式管道,包括 ASR 、 NLP 、 TTS 和 CV 。他是卡內(nèi)基梅隆大學(xué)的一名應(yīng)屆畢業(yè)生,具有電氣和計(jì)算機(jī)工程碩士學(xué)位。
About Jay Rodge
Jay Rodge 是 NVIDIA 的產(chǎn)品營(yíng)銷(xiāo)經(jīng)理,負(fù)責(zé)深入學(xué)習(xí)和推理產(chǎn)品,推動(dòng)產(chǎn)品發(fā)布和產(chǎn)品營(yíng)銷(xiāo)計(jì)劃。杰伊在芝加哥伊利諾伊理工學(xué)院獲得計(jì)算機(jī)科學(xué)碩士學(xué)位,主攻計(jì)算機(jī)視覺(jué)和自然語(yǔ)言處理。在 NVIDIA 之前,杰伊是寶馬集團(tuán)的人工智能研究實(shí)習(xí)生,為寶馬最大的制造廠使用計(jì)算機(jī)視覺(jué)解決問(wèn)題。
審核編輯:郭婷
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103697 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5309瀏覽量
106457 -
SDK
+關(guān)注
關(guān)注
3文章
1077瀏覽量
49139
發(fā)布評(píng)論請(qǐng)先 登錄
如何在魔搭社區(qū)使用TensorRT-LLM加速優(yōu)化Qwen3系列模型推理部署
無(wú)刷電機(jī)小波神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)子位置檢測(cè)方法的研究
NVIDIA實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)渲染技術(shù)的突破性增強(qiáng)功能
BP神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)原則
BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較
BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系
BP神經(jīng)網(wǎng)絡(luò)的基本原理
深度學(xué)習(xí)入門(mén):簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的構(gòu)建與實(shí)現(xiàn)
人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較
RNN模型與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的區(qū)別
LSTM神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)與工作機(jī)制
LSTM神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)RNN的區(qū)別
Moku人工神經(jīng)網(wǎng)絡(luò)101

評(píng)論