0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Torch TensorRT是一個(gè)優(yōu)化PyTorch模型推理性能的工具

jf_pmFSk4VX ? 來(lái)源:GiantPandaCV ? 2024-01-09 16:41 ? 次閱讀

大綱

Torch TensorRT介紹

JIT編譯與AOT編譯方法

兩種方法的異同點(diǎn)

詳細(xì)要點(diǎn)

1. Torch TensorRT介紹

Torch TensorRT是一個(gè)優(yōu)化PyTorch模型推理性能的工具

它結(jié)合了PyTorch和NVIDIA的TensorRT

2. 兩種編譯方法

JIT編譯:靈活,支持動(dòng)態(tài)圖和Python代碼

AOT編譯:支持序列化,固定輸入shape

3. 編譯流程

圖轉(zhuǎn)換、優(yōu)化、劃分、TensorRT轉(zhuǎn)換

獲得高性能優(yōu)化模型

4. JIT編譯細(xì)節(jié)

通過torch.compile調(diào)用

支持動(dòng)態(tài)輸入和條件判斷

5. AOT編譯細(xì)節(jié)

通過trace和compile API實(shí)現(xiàn)

使用inputAPI支持動(dòng)態(tài)shape

支持序列化模型

6. 兩種方法的異同

核心是基于同一圖優(yōu)化機(jī)制

JIT支持動(dòng)態(tài),AOT支持序列化

大家好,我叫喬治。嗨,我是迪拉杰,我們都是NVIDIA的深度學(xué)習(xí)軟件工程師。今天我們?cè)谶@里討論使用Torch TensorRT加速PyTorch推斷。首先,我們會(huì)給大家簡(jiǎn)短介紹一下Torch TensorRT是什么,然后喬治將深入介紹我們優(yōu)化PyTorch模型的用戶工作流程。最后,我們將比較這兩種方法,并討論一些正在進(jìn)行的未來(lái)工作?,F(xiàn)在我將把話筒交給喬治。

那么,什么是Torch TensorRT呢?Torch是我們大家聚在一起的原因,它是一個(gè)端到端的機(jī)器學(xué)習(xí)框架。而TensorRT則是NVIDIA的高性能深度學(xué)習(xí)推理軟件工具包。Torch TensorRT就是這兩者的結(jié)合。我們所做的是以一種有效且易于使用的方式將這兩個(gè)框架結(jié)合起來(lái),可以適用于各種用例和模型。Torch TensorRT是優(yōu)化PyTorch模型的一種路徑。

我將在今天的用例中分享一些方法,包括Model performance和core implementation。這意味著,如果你有一個(gè)單一的模型,并且你用我們的兩種方法之一進(jìn)行優(yōu)化,你可以得到相似的性能和核心軟件實(shí)現(xiàn)?,F(xiàn)在你可能會(huì)問,為什么我要選擇其中之一?因?yàn)椴煌牟渴饒?chǎng)景需要不同的方法。

8ab6f19a-ae25-11ee-8b88-92fbcf53809c.png

今天我們將介紹的兩種方法是Flexible JIT方法和Serializable AOT方法。如果您的模型具有復(fù)雜邏輯,需要即時(shí)編譯,并且可能需要Python嚴(yán)格部署,那么靈活的JIT方法可能對(duì)您來(lái)說(shuō)是最好的選擇。如果您需要整個(gè)圖形捕獲,需要對(duì)模型進(jìn)行一些序列化,或者進(jìn)行C++部署,那么AOT方法可能更適合您的用例。所以考慮到這一點(diǎn),讓我們走一遍這兩個(gè)用戶流程共享的內(nèi)部路徑。

為了優(yōu)化PyTorch模型,從模型創(chuàng)建開始一直到優(yōu)化,所以我們只需要用戶提供一個(gè)預(yù)訓(xùn)練模型和一些編譯設(shè)置。這些傳遞給編譯器,即Torch TensorRT。現(xiàn)在,在這個(gè)綠色虛線框中的所有操作都是在幕后完成的,由編譯器來(lái)處理。但是這有助于理解我們?nèi)绾潍@得性能提升。

以下是一般的內(nèi)部構(gòu)造:

8aca5b22-ae25-11ee-8b88-92fbcf53809c.png

我們使用ATEN trace將graph轉(zhuǎn)換過來(lái)。實(shí)際上,這意味著我們將torch操作符轉(zhuǎn)換成ATEN表示,這只是以一種稍微容易處理的方式來(lái)表示相同的操作符。之后,我們進(jìn)行l(wèi)owering處理,包括常數(shù)折疊和融合以提高性能。然后我們進(jìn)入劃分階段partitioning。Torch TensorRT會(huì)選擇運(yùn)行哪些操作,哪些操作在Torch中運(yùn)行,從而生成您在右側(cè)看到的分段圖形。最后是轉(zhuǎn)換階段,對(duì)于在右側(cè)看到的每個(gè)TensorRT圖形,他們從其ATEN操作轉(zhuǎn)換為等效的TensorRT layer,最后得到優(yōu)化后的模型。

所以在談到這個(gè)一般方法后,即針對(duì)兩種用例的一般路徑,我們將稍微深入了解JIT工作流程.,Dheeraj將討論提前工作流程.,JIT方法使您享受到了Torch.compile的好處.,其中包括復(fù)雜的Python代碼處理、自動(dòng)圖形分割.,.,NVIDIA的TensorRT的優(yōu)化能力.,層張量融合、內(nèi)核自動(dòng)調(diào)優(yōu),以及您選擇層精度的能力.,

8ae0d8ac-ae25-11ee-8b88-92fbcf53809c.png

在該方法的瀏覽版中,我們能夠在不到一秒鐘的時(shí)間內(nèi)對(duì)穩(wěn)定擴(kuò)散的文本到圖像進(jìn)行基準(zhǔn)測(cè)試.(4090 16fp 50epoch),那么,JIT方法背后的真正原理是什么?,嗯,從一開始就開始吧.,然后用戶只需要在該模型上調(diào)用torch.compile,并指定TensorRT作為后端.,現(xiàn)在從這里開始的一切都是在幕后進(jìn)行的,.,但有助于解釋正在發(fā)生的事情.

8afea8aa-ae25-11ee-8b88-92fbcf53809c.png

因此,在這之后,Torch.compile將會(huì)將您的模型代碼進(jìn)行拆分,然后是一個(gè)dynamo guard(什么是 dynamo guard?請(qǐng)參考:TorchDynamo 源碼剖析 04 - Guard, Cache, Executionhttps://zhuanlan.zhihu.com/p/630722214[1] ,可以簡(jiǎn)單理解為dynamo后到python代碼的中間層),再然后是另一個(gè)graph。之所以會(huì)出現(xiàn)這個(gè)guard,是因?yàn)樵诖a中有一個(gè)條件語(yǔ)句。實(shí)際上,大多數(shù)機(jī)器學(xué)習(xí)模型的跟蹤器都無(wú)法處理這樣的條件語(yǔ)句,因?yàn)檫@個(gè)條件取決于輸入的值。但是Torch Compile能夠處理它,因?yàn)檫@個(gè)guard在Python中運(yùn)行,并且會(huì)在條件的值發(fā)生變化時(shí)觸發(fā)自動(dòng)圖形重新編譯。

此外,還需注意其他因素也可能導(dǎo)致重新編譯,例如如果您傳入了不同形狀的張量或者改變了其他參數(shù)。因此,這個(gè)graph / guard / graph構(gòu)造現(xiàn)在進(jìn)入了Torch Tensorrt后端,它將按照之前幻燈片中展示的相同過程進(jìn)行處理。右上角的每個(gè)圖形都會(huì)被轉(zhuǎn)換為右下角您看到的Torch TensorRT優(yōu)化版本。有效地將其分成TensorRT組件和Torch組件。需要注意的關(guān)鍵是Dynamo Guard保持完好。因?yàn)樗峁┝藞D分區(qū)的強(qiáng)大支持。第一級(jí)是在復(fù)雜Python代碼的Python級(jí)別上。第二級(jí)是運(yùn)算符級(jí)別上分區(qū),在TensorRT中可以進(jìn)一步加速的運(yùn)算符以及可以在Torch中加速的其他運(yùn)算符。

總結(jié)用法,用戶只需對(duì)模型調(diào)用torch compile,指定后端tensorRT,并可選擇一些選項(xiàng),然后傳遞一些輸入,它將實(shí)時(shí)進(jìn)行編譯。這種編譯方法對(duì)用戶來(lái)說(shuō)非??啥ㄖ?。您可以通過精度關(guān)鍵字參數(shù)選擇層精度。您可以指定在TensorRT引擎塊中所需的最小運(yùn)算符數(shù)量,等等。

8b19b5a0-ae25-11ee-8b88-92fbcf53809c.png

就這些,接下來(lái)就交給Dheeraj討論AOT方法?,F(xiàn)在讓我們來(lái)看看Torch TensorRT的AOT方法。

給定一個(gè)nn module的PyTorch圖形,我們首先將其轉(zhuǎn)換為Exported program。Exported program是在PyTorch 2.1中引入的一種新表示形式,它包含了Torch FX圖形和狀態(tài)字典兩部分。其中,Torch FX圖形包含了模型的張量計(jì)算,狀態(tài)字典用于存儲(chǔ)參數(shù)和緩沖區(qū)。這個(gè)轉(zhuǎn)換是通過使用Dynamo.trace API來(lái)完成的。此API是對(duì)Torch.export的封裝,并且除此之外,它還支持靜態(tài)和動(dòng)態(tài)輸入。我們的追蹤器API還執(zhí)行一些附加的分解操作,以便將您的模型優(yōu)化轉(zhuǎn)換為TensorRT格式。

一旦我們獲得了Exported program,我們AOT方法的主要API就是Dynamo.compile。這個(gè)API將這些Exported program轉(zhuǎn)換為優(yōu)化的TensorRT圖形模塊。在幕后,這個(gè)API執(zhí)行l(wèi)owering、分區(qū)和轉(zhuǎn)換為TensorRT的操作,這些都是我們編譯器的核心組件,正如您在演示的開頭所看到的。一旦編譯完成,輸出的結(jié)果是一個(gè)包含TensorRT圖形模塊的TorchFX模塊。

下面的代碼段列出了該API的簡(jiǎn)單用法。一旦您聲明了您的模型,只需將其傳遞給dynamo.trace,然后是dynamo.compile,該函數(shù)將返回優(yōu)化后的TensorRT圖模塊。

8b44ac2e-ae25-11ee-8b88-92fbcf53809c.png

TensorRT期望圖中每個(gè)動(dòng)態(tài)輸入都有一系列形狀。

8b6bcfac-ae25-11ee-8b88-92fbcf53809c.png

在右邊的圖中,您可以看到我們可以使用torch_tensorrt.input API提供這些形狀范圍。與剛剛看到的jit流程的區(qū)別是您可以提供這個(gè)形狀范圍。這樣做的好處是,如果輸入形狀在提供的范圍內(nèi)發(fā)生更改,您無(wú)需重新編譯即可進(jìn)行推理。靜態(tài)是序列化的主要好處之一。

為了總結(jié)我們到目前為止所見到的內(nèi)容,根據(jù)您的PyTorch圖形,我們使用我們的trace API生成導(dǎo)出的程序,然后使用Dynamo.compile API進(jìn)行編譯。最后,您將獲得一個(gè)TorchFX圖模塊,其中包含TensorRT優(yōu)化的引擎?,F(xiàn)在,您可以使用Dynamo.Serialize API,將這些圖形模塊對(duì)象轉(zhuǎn)換為編程腳本或?qū)С龀绦虻谋硎拘问剑㈦S后保存到磁盤上。同樣,右側(cè)的代碼片段非常易于使用。一旦您從Dynamo.compile中獲得了TensorRT模型,只需使用模型及其輸入調(diào)用serialize API即可。

8b87371a-ae25-11ee-8b88-92fbcf53809c.png

以下是我們目前所見的內(nèi)容的概述。我們能夠處理復(fù)雜的Python代碼。通過重新編譯支持動(dòng)態(tài)形狀,將已編譯的模塊序列化。此外,我們還能夠通過我們的輸入API支持動(dòng)態(tài)形狀,并且將它們序列化為.script或?qū)С龅某绦颍鼰o(wú)法處理任何圖形斷點(diǎn)。

然而,這兩者之間存在一些重要的相似之處。它們都經(jīng)歷類似的圖形優(yōu)化以進(jìn)行高性能推斷。Torch TensorRT在PyTorch框架中以兩個(gè)關(guān)鍵路徑提供了優(yōu)化的推理方式。

8b9f5fe8-ae25-11ee-8b88-92fbcf53809c.png

結(jié)論和未來(lái)工作
Torch-TensorRT通過兩個(gè)關(guān)鍵路徑在PyTorch中提供了優(yōu)化的推理:

對(duì)于JIT工作流和復(fù)雜模型,采用基于torch.compile的方法

對(duì)于AoT工作流和序列化,采用強(qiáng)大的基于Exported program的方法

未來(lái)的工作:

在兩個(gè)路徑上提供對(duì)動(dòng)態(tài)形狀的全面支持

改進(jìn)對(duì)編譯Exported program的序列化支持

通過支持額外的精度和優(yōu)化,提高模型性能

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3459

    瀏覽量

    49767
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8478

    瀏覽量

    133803
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    808

    瀏覽量

    13668

原文標(biāo)題:9- Accelerated Inference in PyTorch 2.X with Torch tensorrt

文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    英特爾FPGA 助力Microsoft Azure機(jī)器學(xué)習(xí)提供AI推理性能

    Machine Learning SDK 相集成以供預(yù)覽??蛻艨梢允褂?Azure 大規(guī)模部署的英特爾? FPGA(現(xiàn)場(chǎng)可編程邏輯門陣列)技術(shù),為其模型提供行業(yè)領(lǐng)先的人工智能 (AI) 推理性能。
    的頭像 發(fā)表于 05-16 17:25 ?6521次閱讀

    NVIDIA打破AI推理性能記錄

     NVIDIA憑借A100進(jìn)步擴(kuò)大了在MLPerf基準(zhǔn)測(cè)試中的領(lǐng)先優(yōu)勢(shì),實(shí)現(xiàn)了比CPU快237倍的AI推理性能,助力企業(yè)將AI研究轉(zhuǎn)化為生產(chǎn)力。
    發(fā)表于 10-22 14:07 ?865次閱讀

    怎樣使用PyTorch Hub去加載YOLOv5模型

    PyTorch Hub 加載預(yù)訓(xùn)練的 YOLOv5s 模型,model并傳遞圖像進(jìn)行推理。'yolov5s'是最輕最快的 YOLOv5 型號(hào)。有關(guān)所有可用模型的詳細(xì)信息,請(qǐng)參閱自述文
    發(fā)表于 07-22 16:02

    求助,為什么將不同的權(quán)重應(yīng)用于模型會(huì)影響推理性能?

    生成兩個(gè) IR文件(相同的 .xml 文件,但不同的 .bin 文件) 具有不同重量的類似模型,以不同的 fps (27fps 和 6fps) 運(yùn)行 更多樣化的權(quán)重是否會(huì)影響 Myriad X 上的推理性能
    發(fā)表于 08-15 07:00

    如何提高YOLOv4模型推理性能?

    使用 PyTorch 對(duì)具有非方形圖像的 YOLOv4 模型進(jìn)行了訓(xùn)練。 將 權(quán)重轉(zhuǎn)換為 ONNX 文件,然后轉(zhuǎn)換為中間表示 (IR)。 無(wú)法確定如何獲得更好的推理性能
    發(fā)表于 08-15 06:58

    pytorch模型轉(zhuǎn)換需要注意的事項(xiàng)有哪些?

    什么是JIT(torch.jit)? 答:JIT(Just-In-Time)是組編譯工具,用于彌合PyTorch研究與生產(chǎn)之間的差距。它允許創(chuàng)建可以在不依賴Python解釋器的情況
    發(fā)表于 09-18 08:05

    Xavier的硬件架構(gòu)特性!Xavier推理性能評(píng)測(cè)

    Xavier主要用于邊緣計(jì)算的深度神經(jīng)網(wǎng)絡(luò)推理,其支持Caffe、Tensorflow、PyTorch等多種深度學(xué)習(xí)框架導(dǎo)出的模型。為進(jìn)步提高計(jì)算效率,還可以使用
    的頭像 發(fā)表于 04-17 16:55 ?1.9w次閱讀
    Xavier的硬件架構(gòu)特性!Xavier<b class='flag-5'>推理性能</b>評(píng)測(cè)

    使用NVIDIA TensorRT優(yōu)化T5和GPT-2

    在這篇文章中,我們向您介紹了如何將擁抱臉 PyTorch T5 和 GPT-2 模型轉(zhuǎn)換為優(yōu)化TensorRT 推理引擎。
    的頭像 發(fā)表于 03-31 17:25 ?3944次閱讀
    使用NVIDIA <b class='flag-5'>TensorRT</b><b class='flag-5'>優(yōu)化</b>T5和GPT-2

    Nvidia 通過開源庫(kù)提升 LLM 推理性能

    加利福尼亞州圣克拉拉——Nvidia通過個(gè)名為TensorRT LLM的新開源軟件庫(kù),將其H100、A100和L4 GPU的大型語(yǔ)言模型(LLM)
    的頭像 發(fā)表于 10-23 16:10 ?855次閱讀

    現(xiàn)已公開發(fā)布!歡迎使用 NVIDIA TensorRT-LLM 優(yōu)化大語(yǔ)言模型推理

    NVIDIA 于 2023 年 10 月 19 日公開發(fā)布 TensorRT-LLM ,可在 NVIDIA GPU 上加速和優(yōu)化最新的大語(yǔ)言模型(Large Language Models)的
    的頭像 發(fā)表于 10-27 20:05 ?1286次閱讀
    現(xiàn)已公開發(fā)布!歡迎使用 NVIDIA <b class='flag-5'>TensorRT</b>-LLM <b class='flag-5'>優(yōu)化</b>大語(yǔ)言<b class='flag-5'>模型</b><b class='flag-5'>推理</b>

    用上這個(gè)工具包,大模型推理性能加速達(dá)40倍

    作者: 英特爾公司 沈海豪、羅嶼、孟恒宇、董波、林俊 編者按: 只需不到9行代碼, 就能在CPU上實(shí)現(xiàn)出色的LLM推理性能。 英特爾 ?Extension for Transformer 創(chuàng)新工具
    的頭像 發(fā)表于 12-01 20:40 ?1454次閱讀
    用上這個(gè)<b class='flag-5'>工具</b>包,大<b class='flag-5'>模型</b><b class='flag-5'>推理性能</b>加速達(dá)40倍

    魔搭社區(qū)借助NVIDIA TensorRT-LLM提升LLM推理效率

    “魔搭社區(qū)是中國(guó)最具影響力的模型開源社區(qū),致力給開發(fā)者提供模型即服務(wù)的體驗(yàn)。魔搭社區(qū)利用NVIDIA TensorRT-LLM,大大提高了大語(yǔ)言模型
    的頭像 發(fā)表于 08-23 15:48 ?740次閱讀

    解鎖NVIDIA TensorRT-LLM的卓越性能

    NVIDIA TensorRT-LLM 是個(gè)專為優(yōu)化大語(yǔ)言模型 (LLM) 推理而設(shè)計(jì)的庫(kù)。它
    的頭像 發(fā)表于 12-17 17:47 ?567次閱讀

    利用Arm Kleidi技術(shù)實(shí)現(xiàn)PyTorch優(yōu)化

    PyTorch個(gè)廣泛應(yīng)用的開源機(jī)器學(xué)習(xí) (ML) 庫(kù)。近年來(lái),Arm 與合作伙伴通力協(xié)作,持續(xù)改進(jìn) PyTorch推理性能。本文將
    的頭像 發(fā)表于 12-23 09:19 ?716次閱讀
    利用Arm Kleidi技術(shù)實(shí)現(xiàn)<b class='flag-5'>PyTorch</b><b class='flag-5'>優(yōu)化</b>

    使用NVIDIA推理平臺(tái)提高AI推理性能

    NVIDIA推理平臺(tái)提高了 AI 推理性能,為零售、電信等行業(yè)節(jié)省了數(shù)百萬(wàn)美元。
    的頭像 發(fā)表于 02-08 09:59 ?506次閱讀
    使用NVIDIA<b class='flag-5'>推理</b>平臺(tái)提高AI<b class='flag-5'>推理性能</b>

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品