NVIDIA 第九屆Sky Hackathon 大賽旨在通過(guò) NVIDIA Jetson 平臺(tái)和 Microsoft Azure OpenAI 平臺(tái),由 NVIDIA 和 Microsoft 導(dǎo)師精心設(shè)計(jì)的大模型應(yīng)用場(chǎng)景,引領(lǐng)參與者領(lǐng)略大模型的應(yīng)用潛力,以及如何運(yùn)用人工智能技術(shù)構(gòu)建智能化解決方案。
本次 Hackathon 聚焦在如何在物聯(lián)網(wǎng)設(shè)備上構(gòu)建基于大模型的應(yīng)用解決方案。參與者通過(guò)使用 NVIDIA Jetson 平臺(tái),親身體驗(yàn)了大模型在圖像識(shí)別和生成式模型調(diào)用方面的應(yīng)用。從 Resnet50 模型的優(yōu)化到 TensorRT 推理引擎的生成,每一步都呈現(xiàn)了 NVIDIA Jetson 在深度學(xué)習(xí)加速方面的卓越性能。
下文供稿自 NVIDIA 第九屆 Sky Hackathon 大賽的冠軍團(tuán)隊(duì),通過(guò)本官方微信公眾號(hào)推薦給開(kāi)發(fā)者朋友們,希望開(kāi)發(fā)者朋友們能夠積極交流,碰撞出更多創(chuàng)新的火花!
在當(dāng)前時(shí)代,數(shù)字化與人工智能正不斷推動(dòng)藝術(shù)與技術(shù)的深度融合,開(kāi)創(chuàng)了全新的創(chuàng)作與體驗(yàn)方式。來(lái)自山東科技大學(xué)的團(tuán)隊(duì)(指導(dǎo)老師:王魯昆老師,團(tuán)隊(duì)成員:許金浩、李振宇、王俊豐、紀(jì)中華)在最近的NVIDIA 第九屆 Sky Hackathon中以其杰出的作品 Narrative Canvas 奪得冠軍,成為這一趨勢(shì)的杰出代表。本文旨在深入分析這個(gè)項(xiàng)目的核心理念、技術(shù)創(chuàng)新之處,以及它為藝術(shù)體驗(yàn)帶來(lái)的革命性改變,展示了這個(gè)團(tuán)隊(duì)如何在藝術(shù)與技術(shù)交匯的邊界上探索新領(lǐng)域。
項(xiàng)目倉(cāng)庫(kù):https://github.com/1438802682/NarrativeCanvas
演示視頻:https://www.bilibili.com/video/BV1rc411D7pP/
項(xiàng)目概覽:圖文互動(dòng)的新紀(jì)元
項(xiàng)目介紹
Narrative Canvas 項(xiàng)目的核心,在于“圖生文,文生圖”的相互作用。畫(huà)作激發(fā)文字的創(chuàng)作,文字又給畫(huà)作賦予了新的生命。這種互動(dòng)不僅增強(qiáng)了藝術(shù)作品的表現(xiàn)力,也為觀者提供了一種全新的藝術(shù)體驗(yàn)。在這個(gè)過(guò)程中,觀者可以看到一個(gè)故事從視覺(jué)形象轉(zhuǎn)化為文字?jǐn)⑹觯購(gòu)奈淖种兄匦孪胂蟪鲆曈X(jué)畫(huà)面,這是一場(chǎng)視覺(jué)與文字的雙重旅行。
項(xiàng)目流程簡(jiǎn)述
-
圖像推理:用戶上傳圖片、選擇模型和精度、執(zhí)行推斷,推斷完成后得到處理過(guò)的圖片。
-
生成故事:基于處理過(guò)的圖片,用戶選擇模型、風(fēng)格、主題和輸入自定義提示詞,完成故事生成。
-
生成圖片:根據(jù)故事內(nèi)容,用戶再次選擇模型、風(fēng)格并輸入自定義提示詞,完成圖像生成。
這個(gè)循環(huán)過(guò)程創(chuàng)造了一個(gè)從視覺(jué)到文本再回到視覺(jué)的獨(dú)特旅程。
技術(shù)創(chuàng)新點(diǎn)
使用 NVIDIA Polygraphy
對(duì) ONNX 模型預(yù)處理優(yōu)化
該項(xiàng)目的圖片推理部分基于 mmlab 算法庫(kù)中的 mmpretrain 預(yù)訓(xùn)練模型,精選了25 個(gè)經(jīng)典主干網(wǎng)絡(luò)進(jìn)行圖像分類任務(wù)。
(2014)VGG 11
(2015)Inception v3
(2015)ResNet 50
(2017)ResNeXt 50
(2018)SE-ResNet 50
(2018)ShuffleNet v1
(2018)ShuffleNet v2
(2019)Res2Net 50
(2018)MobileNet v2
(2019)MobileNet v3
(2020)RegNet
(2019)EfficientNet
(2021)EfficientNet v2
(2021)Vision Transformer
(2021)Swin Transformer
(2021)Conformer
(2021)Twins
(2021)MobileViT
(2021)CLIP
(2021)DeiT
(2022)DeiT3
(2022)MViT V2
(2022)MobileOne
(2022)EdgeNeXt
(2023)EfficientVit
上下滑動(dòng)查看更多↑↓
項(xiàng)目團(tuán)隊(duì)使用了 NVIDIA 的 Polygraphy 工具對(duì) ONNX 模型進(jìn)行了優(yōu)化,移除和合并了多余節(jié)點(diǎn),如多余的 Transpose 節(jié)點(diǎn)等,這些節(jié)點(diǎn)原本阻礙了 TensorRT 的優(yōu)化。這使得 TensorRT 引擎構(gòu)建更加高效。該團(tuán)隊(duì)將優(yōu)化前后的 ONNX 模型和原始的 pt 權(quán)重都上傳到 Hugging Face。
ONNX 模型優(yōu)化文件下載地址:https://huggingface.co/CtrlX/ModelReady-pretrain/tree/main
優(yōu)化過(guò)程包括:
-
移除無(wú)用節(jié)點(diǎn):刪除對(duì)輸出無(wú)影響的節(jié)點(diǎn)。
-
合并冗余節(jié)點(diǎn):將執(zhí)行相似功能的節(jié)點(diǎn)合并。
-
優(yōu)化圖結(jié)構(gòu):通過(guò)節(jié)點(diǎn)合并和折疊,簡(jiǎn)化模型結(jié)構(gòu)。
-
提高 TensorRT 兼容性:轉(zhuǎn)換或減少特殊處理的節(jié)點(diǎn)。
-
加速推理性能:優(yōu)化后的模型在 TensorRT 中運(yùn)行更高效。
示例:以 2023 年的最新工作 EfficientVit 為例:
優(yōu)化前的 ONNX 模型:
優(yōu)化后的 ONNX 模型:
通過(guò)優(yōu)化的日志文件可以看出優(yōu)化后的模型去除了一半以上的冗余節(jié)點(diǎn),節(jié)點(diǎn)數(shù)量由原來(lái)的 1440 減少到了 673,經(jīng)過(guò)測(cè)試后沒(méi)有發(fā)現(xiàn)明顯的精度損失,但是大大提高了引擎的構(gòu)建速度:
Note:提供 Jetson Xavier NX 平臺(tái)的 TensorRT 引擎序列化文件
該項(xiàng)目團(tuán)隊(duì)提供了針對(duì) Jetson Xavier NX 8G 平臺(tái)的 TensorRT 引擎序列化文件,以便用戶能夠一鍵下載并在 Jetson Xavier NX 上直接進(jìn)行推理,從而快速啟動(dòng)項(xiàng)目。
Jetson Xavier NX 平臺(tái)序列化引擎文件下載地址:https://huggingface.co/CtrlX/ModelReady-TRT/tree/main/Jetson-Xavier-NX-8G/engine
NVIDIA TensorRT Dynamic Shape
模式在多圖推理中的應(yīng)用
在構(gòu)建引擎過(guò)程中,該團(tuán)隊(duì)在項(xiàng)目中利用 NVIDIA 的 TensorRT 工具啟用了 Dynamic Shape 功能于批處理維度,支持一次最多處理 8 張圖片,顯著提升了推理效率。
NVIDIA TensorRT實(shí)現(xiàn)
推理精度多元選擇機(jī)制:fp32/fp16/int8
該項(xiàng)目提供了構(gòu)建不同精度引擎的代碼,允許用戶根據(jù)需要在精度和速度之間做出選擇。
默認(rèn)情況下,TensorRT 以 32 位精度 (fp32) 工作,但也支持 16 位浮點(diǎn) (fp16) 和 8 位量化浮點(diǎn) (int8) 執(zhí)行操作。使用較低精度能減少內(nèi)存需求并加快計(jì)算速度。盡管 fp16 和 fp32 的使用相對(duì)簡(jiǎn)單,使用 int8 則涉及更多復(fù)雜性。有關(guān) int8 的更多詳情,請(qǐng)參見(jiàn) INT8 章節(jié)。
NVIDIA TensorRT:
啟用 INT8 PTQ 量化加速推理機(jī)制
該項(xiàng)目通過(guò)使用 NVIDIA TensorRT 實(shí)現(xiàn)了 INT8 精度量化 (Post-Training Quantization, PTQ) 來(lái)加速推理。構(gòu)建 INT8 引擎的步驟包括:
-
構(gòu)建 32 位引擎,運(yùn)行校準(zhǔn)集,記錄每個(gè)張量激活值分布的直方圖。
-
根據(jù)直方圖創(chuàng)建校準(zhǔn)表,為每個(gè)張量提供標(biāo)度值。
-
使用校準(zhǔn)表和網(wǎng)絡(luò)定義構(gòu)建 INT8 引擎。
校準(zhǔn)過(guò)程可能較慢,因此校準(zhǔn)表的輸出可以被緩存并重復(fù)使用,尤其適用于同一平臺(tái)上重復(fù)構(gòu)建相同網(wǎng)絡(luò)的情況。
該項(xiàng)目提供了基于 ImageNet 1K val 數(shù)據(jù)集中 510 張圖片的 INT8 Cache(校準(zhǔn)表),使用 dynamic shape([batch, 3, 224, 224],batch 維度 1-8,opt=4)模式迭代 120 次。
針對(duì) Xavier NX8G 平臺(tái),該團(tuán)隊(duì)測(cè)試了 10 種主流模型的 INT8 Cache 文件,由于時(shí)間限制未能覆蓋全部 25 個(gè)模型,但提供了優(yōu)化后的 ONNX 模型文件,可供后續(xù)測(cè)試。
ImageNet1k INT8 Cache 文件下載地址:https://huggingface.co/CtrlX/ModelReady-TRT/tree/main/Jetson-Xavier-NX-8G/int8Cache
Note:Dynamic Shape 模式與 INT8 PTQ
要在具有動(dòng)態(tài)形狀的網(wǎng)絡(luò)上運(yùn)行 INT8 校準(zhǔn),需設(shè)置校準(zhǔn)優(yōu)化配置文件,使用配置文件的 kOPT 值進(jìn)行校準(zhǔn),且校準(zhǔn)輸入數(shù)據(jù)大小必須與配置文件匹配。
創(chuàng)建校準(zhǔn)優(yōu)化配置文件的示例代碼如下:
Note:雙模式 INT8 量化策略
該項(xiàng)目為不同類型的主干網(wǎng)絡(luò)提供了兩種 INT8 量化策略:
-
trt.IInt8MinMaxCalibrator
這種方法選擇張量的比例因子以優(yōu)化量化張量的信息論內(nèi)容,通常會(huì)抑制分布中的異常值。這是目前推薦的熵校準(zhǔn)器,也是 DLA 所必需的。校準(zhǔn)通常在層融合之前進(jìn)行,校準(zhǔn)批量大小可能會(huì)影響結(jié)果。推薦用于基于 CNN 的網(wǎng)絡(luò)。
-
trt.IInt8EntropyCalibrator2
這個(gè)校準(zhǔn)器使用激活分布的整個(gè)范圍來(lái)確定比例因子,似乎更適合于 NLP 任務(wù)。校準(zhǔn)一般在層融合之前進(jìn)行。推薦用于 NVIDIA BERT(Google 官方實(shí)現(xiàn)的優(yōu)化版本)等網(wǎng)絡(luò)。
NVIDIA TensorRT:
Timing Cache 優(yōu)化加速引擎構(gòu)建
項(xiàng)目團(tuán)隊(duì)通過(guò)在 NVIDIA TensorRT 中開(kāi)啟 Timing Cache 優(yōu)化了神經(jīng)網(wǎng)絡(luò)模型的引擎構(gòu)建過(guò)程。這種方法利用了模型中重復(fù)的 layer,記錄下算子的優(yōu)化結(jié)果。當(dāng)再次遇到相同的算子時(shí),系統(tǒng)會(huì)直接使用優(yōu)選結(jié)果,而非重新評(píng)估所有可行的 kernel,從而加速構(gòu)建過(guò)程。
Timing Cache 文件下載地址:
https://huggingface.co/CtrlX/ModelReady-TRT/tree/main/Jetson-Xavier-NX-8G/int8Cache
下面借用了 TensorRT cookbook 中的一個(gè)示例展示 Timing Cache 的加速效果:
開(kāi)啟了 Timing Cache 前的日志信息:
開(kāi)啟了 Timing Cache 后的日志信息:
日志信息顯示,通過(guò) Timing Cache,多次測(cè)試被跳過(guò),TensorRT 直接在 Cache 中找到了最快的算法。經(jīng)過(guò)測(cè)試的時(shí)間顯示:
-
未啟用 Timing Cache:1707.987785 ms
-
初次啟用 Timing Cache:774.889298 ms
-
后續(xù)使用 Timing Cache:32.098293 ms
以下是該項(xiàng)目中與 Timing Cache 相關(guān)的 Build 代碼(models/Build.py)部分,團(tuán)隊(duì)還提供了 Timing Cache 融合接口的多種優(yōu)化方式:
NVIDIA NeMo Guardrails:
增強(qiáng) LLM 應(yīng)用的可編程護(hù)欄工具
項(xiàng)目在生成故事部分使用了 NeMo Guardrails,以防止大模型輸出的敏感內(nèi)容被用戶接收。這為 LLM 服務(wù)提供了多種護(hù)欄類型,如輸入護(hù)欄、對(duì)話護(hù)欄、檢索護(hù)欄等。同時(shí),項(xiàng)目提供了使用 Colang 編寫的 NeMo Guardrails 示例。
(位于 models/configurations.py )
NeMo Guardrails 為 LLM 服務(wù)提供五種主要護(hù)欄類型:
-
輸入護(hù)欄(Input Rails):應(yīng)用于用戶輸入,可能拒絕或更改輸入。
-
對(duì)話護(hù)欄(Dialog Rails):影響 LLM 的提示方式,操作規(guī)范消息并決定是否執(zhí)行某些操作。
-
檢索護(hù)欄(Retrieval Rails):應(yīng)用于 RAG 場(chǎng)景下檢索的內(nèi)容,可能拒絕或更改相關(guān)塊。
-
執(zhí)行護(hù)欄(Execution Rails):應(yīng)用于需要自定義操作的輸入/輸出。
-
輸出護(hù)欄(Output Rails):應(yīng)用于 LLM 生成的輸出,可能拒絕或更改輸出。
示例 Colang 配置:
在項(xiàng)目的 models/Generater 中的 AzureChatBot 類中,護(hù)欄被用作 Azure OpenAI gpt-3.5-turbo 服務(wù)的一部分。
項(xiàng)目架構(gòu)
UI 設(shè)計(jì)原型圖
項(xiàng)目結(jié)構(gòu)圖
項(xiàng)目流程圖
*本文中圖片來(lái)源于山東科技大學(xué)的團(tuán)隊(duì),若您有任何疑問(wèn)或需要使用本文中圖片,請(qǐng)聯(lián)系山東科技大學(xué)的團(tuán)隊(duì)。
點(diǎn)擊“閱讀原文”或掃描海報(bào)二維碼,鎖定北京時(shí)間 1 月 9 日 (星期二) 凌晨 0 點(diǎn)舉行的線上 NVIDIA CES 2024 特別演講。
原文標(biāo)題:NVIDIA 第九屆 Sky Hackathon 優(yōu)秀作品展示 | 靜語(yǔ)畫(huà)韻:藝術(shù)中的無(wú)聲詩(shī)篇
文章出處:【微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
英偉達(dá)
+關(guān)注
關(guān)注
22文章
3795瀏覽量
91316
原文標(biāo)題:NVIDIA 第九屆 Sky Hackathon 優(yōu)秀作品展示 | 靜語(yǔ)畫(huà)韻:藝術(shù)中的無(wú)聲詩(shī)篇
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論