0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

NVIDIA TensorRT支持矩陣中的流控制結(jié)構(gòu)層部分

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:Ken He ? 2022-05-13 16:57 ? 次閱讀

NVIDIA TensorRT 支持循環(huán)結(jié)構(gòu),這對(duì)于循環(huán)網(wǎng)絡(luò)很有用。 TensorRT 循環(huán)支持掃描輸入張量、張量的循環(huán)定義以及“掃描輸出”和“最后一個(gè)值”輸出。

10.1. Defining A Loop

循環(huán)由循環(huán)邊界層(loop boundary layers)定義。

ITripLimitLayer指定循環(huán)迭代的次數(shù)。

IIteratorLayer使循環(huán)能夠迭代張量。

IRecurrenceLayer指定一個(gè)循環(huán)定義。

ILoopOutputLayer指定循環(huán)的輸出。

每個(gè)邊界層都繼承自類ILoopBoundaryLayer ,該類有一個(gè)方法getLoop()用于獲取其關(guān)聯(lián)的ILoop 。 ILoop對(duì)象標(biāo)識(shí)循環(huán)。具有相同ILoop的所有循環(huán)邊界層都屬于該循環(huán)。

下圖描繪了循環(huán)的結(jié)構(gòu)和邊界處的數(shù)據(jù)流。循環(huán)不變張量可以直接在循環(huán)內(nèi)部使用,例如 FooLayer 所示。

一個(gè)循環(huán)可以有多個(gè)IIteratorLayer 、 IRecurrenceLayer和ILoopOutputLayer ,并且最多可以有兩個(gè)ITripLimitLayer ,如后面所述。沒(méi)有ILoopOutputLayer的循環(huán)沒(méi)有輸出,并由 TensorRT 優(yōu)化。

NVIDIA TensorRT 支持矩陣中的流控制結(jié)構(gòu)層部分描述了可用于循環(huán)內(nèi)部的 TensorRT 層。

內(nèi)部層可以自由使用在循環(huán)內(nèi)部或外部定義的張量。內(nèi)部可以包含其他循環(huán)(請(qǐng)參閱嵌套循環(huán))和其他條件構(gòu)造(請(qǐng)參閱條件嵌套)。

要定義循環(huán),首先,使用INetworkDefinition ::addLoop方法創(chuàng)建一個(gè)ILoop對(duì)象。然后添加邊界層和內(nèi)部層。本節(jié)的其余部分描述了邊界層的特征,使用loop表示INetworkDefinition ::addLoop返回的ILoop* 。

ITripLimitLayer支持計(jì)數(shù)循環(huán)和 while 循環(huán)。

loop -》addTripLimit( t ,TripLimit::kCOUNT)創(chuàng)建一個(gè)ITripLimitLayer ,其輸入t是指定循環(huán)迭代次數(shù)的 0D INT32 張量。

loop -》addTripLimit( t ,TripLimit::kWHILE)創(chuàng)建一個(gè)ITripLimitLayer ,其輸入t是一個(gè) 0D Bool 張量,用于指定是否應(yīng)該進(jìn)行迭代。通常t要么是IRecurrenceLayer的輸出,要么是基于所述輸出的計(jì)算。

一個(gè)循環(huán)最多可以有一種限制。

IIteratorLayer支持在任何軸上向前或向后迭代。

loop -》addIterator( t )添加一個(gè)IIteratorLayer ,它在張量t的軸 0 上進(jìn)行迭代。例如,如果輸入是矩陣:

2 3 5

4 6 8

第一次迭代的一維張量{2, 3, 5}和第二次迭代的{4, 6, 8} 。超出張量范圍的迭代是無(wú)效的。

loop -》addIterator( t , axis )類似,但該層在給定的軸上迭代。例如,如果 axis=1 并且輸入是矩陣,則每次迭代都會(huì)傳遞矩陣的一列。

loop -》addIterator( t , axis,reverse )類似,但如果reverse =true ,則該層以相反的順序產(chǎn)生其輸出。

ILoopOutputLayer支持三種形式的循環(huán)輸出:

loop -》addLoopOutput( t, LoopOutput::kLAST_VALUE)輸出t的最后一個(gè)值,其中t必須是IRecurrenceLayer的輸出。

loop-》 addLoopOutput( t ,LoopOutput::kCONCATENATE, axis )將每次迭代的輸入串聯(lián)輸出到t 。例如,如果輸入是一維張量,第一次迭代的值為{ a,b,c} ,第二次迭代的值為{d,e,f} , axis =0 ,則輸出為矩陣:

a b c

d e f

如果axis =1 ,則輸出為:

a d

b e

c f

loop-》 addLoopOutput( t ,LoopOutput::kREVERSE, axis )類似,但顛倒了順序。 kCONCATENATE和kREVERSE形式都需要第二個(gè)輸入,這是一個(gè) 0D INT32 形狀張量,用于指定新輸出維度的長(zhǎng)度。當(dāng)長(zhǎng)度大于迭代次數(shù)時(shí),額外的元素包含任意值。第二個(gè)輸入,例如u ,應(yīng)使用ILoopOutputLayer::setInput(1, u )設(shè)置。

最后,還有IRecurrenceLayer 。它的第一個(gè)輸入指定初始輸出值,第二個(gè)輸入指定下一個(gè)輸出值。第一個(gè)輸入必須來(lái)自循環(huán)外;第二個(gè)輸入通常來(lái)自循環(huán)內(nèi)部。例如,這個(gè) C++ 片段的 TensorRT 模擬

for (int32_t i = j; 。..; i += k) 。..

可以通過(guò)這些調(diào)用創(chuàng)建,其中j和k是ITensor* 。

ILoop* loop = n.addLoop();

IRecurrenceLayer* iRec = loop-》addRecurrence(j);

ITensor* i = iRec-》getOutput(0);

ITensor* iNext = addElementWise(*i, *k,

ElementWiseOperation::kADD)-》getOutput(0);

iRec-》setInput(1, *iNext);

第二個(gè)輸入是TensorRT允許后沿的唯一情況。如果刪除了這些輸入,則剩余的網(wǎng)絡(luò)必須是非循環(huán)的。

10.2. Formal Semantics

TensorRT 具有應(yīng)用語(yǔ)義,這意味著除了引擎輸入和輸出之外沒(méi)有可見(jiàn)的副作用。因?yàn)闆](méi)有副作用,命令式語(yǔ)言中關(guān)于循環(huán)的直覺(jué)并不總是有效。本節(jié)定義了 TensorRT 循環(huán)結(jié)構(gòu)的形式語(yǔ)義。

形式語(yǔ)義基于張量的惰性序列(lazy sequences)。循環(huán)的每次迭代對(duì)應(yīng)于序列中的一個(gè)元素。循環(huán)內(nèi)張量X的序列表示為? X 0, X 1, X 2, 。.. ? 。序列的元素被懶惰地評(píng)估,意思是根據(jù)需要。

IIteratorLayer(X)的輸出是? X[0], X[1], X[2], 。.. ?其中X[i]表示在IIteratorLayer指定的軸上的下標(biāo)。

IRecurrenceLayer(X,Y)的輸出是? X, Y0, Y1, Y2, 。.. ? 。 的輸入和輸出取決于LoopOutput的類型。

kLAST_VALUE :輸入是單個(gè)張量X ,對(duì)于 n-trip 循環(huán),輸出是X n 。

kCONCATENATE :第一個(gè)輸入是張量X,第二個(gè)輸入是標(biāo)量形狀張量Y。結(jié)果是X0, X1, X2, 。.. Xn-1與后填充(如有必要)連接到Y(jié)指定的長(zhǎng)度。如果Y 《 n則為運(yùn)行時(shí)錯(cuò)誤。 Y是構(gòu)建時(shí)間常數(shù)。注意與IIteratorLayer的反比關(guān)系。 IIteratorLayer將張量映射到一系列子張量;帶有kCONCATENATE的ILoopOutputLayer將一系列子張量映射到一個(gè)張量。

kREVERSE :類似于kCONCATENATE ,但輸出方向相反。

ILoopOutputLayer的輸出定義中的n值由循環(huán)的ITripLimitLayer確定:

對(duì)于計(jì)數(shù)循環(huán),它是迭代計(jì)數(shù),表示ITripLimitLayer的輸入。

對(duì)于 while 循環(huán),它是最小的 n 使得$X_n$為假,其中X是ITripLimitLayer的輸入張量的序列。

非循環(huán)層的輸出是層功能的順序應(yīng)用。例如,對(duì)于一個(gè)二輸入非循環(huán)層F(X,Y) = ? f(X 0 , Y 0 ), f(X 1 , Y 1 ), f(X 2 , Y 2 )。.. ? 。如果一個(gè)張量來(lái)自循環(huán)之外,即是循環(huán)不變的,那么它的序列是通過(guò)復(fù)制張量來(lái)創(chuàng)建的。

10.3. Nested Loops

TensorRT 從數(shù)據(jù)流中推斷出循環(huán)的嵌套。例如,如果循環(huán) B 使用在循環(huán) A 中定義的值,則 B 被認(rèn)為嵌套在 A 中。

TensorRT 拒絕循環(huán)沒(méi)有干凈嵌套的網(wǎng)絡(luò),例如如果循環(huán) A 使用循環(huán) B 內(nèi)部定義的值,反之亦然。

10.4. Limitations

引用多個(gè)動(dòng)態(tài)維度的循環(huán)可能會(huì)占用意外的內(nèi)存量。 在一個(gè)循環(huán)中,內(nèi)存的分配就像所有動(dòng)態(tài)維度都取任何這些維度的最大值一樣。例如,如果一個(gè)循環(huán)引用兩個(gè)維度為[4,x,y]和[6,y]的張量,則這些張量的內(nèi)存分配就像它們的維度是[4,max(x,y),max(x ,y)]和[6,max(x,y)] 。

帶有kLAST_VALUE的LoopOutputLayer的輸入必須是IRecurrenceLayer的輸出。 循環(huán) API 僅支持 FP32 和 FP16 精度。

10.5. Replacing IRNNv2Layer With Loops

IRNNv2Layer在 TensorRT 7.2.1 中已棄用,并將在 TensorRT 9.0 中刪除。使用循環(huán) API 合成循環(huán)子網(wǎng)絡(luò)。例如,請(qǐng)參閱sampleCharRNN方法SampleCharRNNLoop::addLSTMCell 。循環(huán) API 讓您可以表達(dá)一般的循環(huán)網(wǎng)絡(luò),而不是局限于IRNNLayer和IRNNv2Layer中的預(yù)制單元。

關(guān)于作者

Ken He 是 NVIDIA 企業(yè)級(jí)開(kāi)發(fā)者社區(qū)經(jīng)理 & 高級(jí)講師,擁有多年的 GPU人工智能開(kāi)發(fā)經(jīng)驗(yàn)。自 2017 年加入 NVIDIA 開(kāi)發(fā)者社區(qū)以來(lái),完成過(guò)上百場(chǎng)培訓(xùn),幫助上萬(wàn)個(gè)開(kāi)發(fā)者了解人工智能和 GPU 編程開(kāi)發(fā)。在計(jì)算機(jī)視覺(jué),高性能計(jì)算領(lǐng)域完成過(guò)多個(gè)獨(dú)立項(xiàng)目。并且,在機(jī)器人無(wú)人機(jī)領(lǐng)域,有過(guò)豐富的研發(fā)經(jīng)驗(yàn)。對(duì)于圖像識(shí)別,目標(biāo)的檢測(cè)與跟蹤完成過(guò)多種解決方案。曾經(jīng)參與 GPU 版氣象模式GRAPES,是其主要研發(fā)者。

審核編輯:郭婷

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

    關(guān)注

    14

    文章

    4793

    瀏覽量

    102427
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    27

    文章

    4591

    瀏覽量

    128144
  • 人工智能
    +關(guān)注

    關(guān)注

    1787

    文章

    46061

    瀏覽量

    234988
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    NVIDIA Nemotron-4 340B模型幫助開(kāi)發(fā)者生成合成訓(xùn)練數(shù)據(jù)

    Nemotron-4 340B 是針對(duì) NVIDIA NeMo 和 NVIDIA TensorRT-LLM 優(yōu)化的模型系列,該系列包含最先進(jìn)的指導(dǎo)和獎(jiǎng)勵(lì)模型,以及一個(gè)用于生成式 AI 訓(xùn)練的數(shù)據(jù)集。
    的頭像 發(fā)表于 09-06 14:59 ?138次閱讀
    <b class='flag-5'>NVIDIA</b> Nemotron-4 340B模型幫助開(kāi)發(fā)者生成合成訓(xùn)練數(shù)據(jù)

    MATLAB矩陣索引

    對(duì)矩陣進(jìn)行索引是從矩陣中選擇或修改部分元素的一種方式。MATLAB 有幾種索引樣式,它們不僅功能強(qiáng)大、靈活,而且可讀性強(qiáng)、表現(xiàn)力強(qiáng)。矩陣是 MATLAB 用來(lái)組織和分析數(shù)據(jù)的一個(gè)核心組
    的頭像 發(fā)表于 09-05 09:28 ?192次閱讀
    MATLAB<b class='flag-5'>中</b>的<b class='flag-5'>矩陣</b>索引

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

    “魔搭社區(qū)是中國(guó)最具影響力的模型開(kāi)源社區(qū),致力給開(kāi)發(fā)者提供模型即服務(wù)的體驗(yàn)。魔搭社區(qū)利用NVIDIA TensorRT-LLM,大大提高了大語(yǔ)言模型的推理性能,方便了模型應(yīng)用部署,提高了大模型產(chǎn)業(yè)應(yīng)用效率,更大規(guī)模地釋放大模型的應(yīng)用價(jià)值?!?/div>
    的頭像 發(fā)表于 08-23 15:48 ?233次閱讀

    NVIDIA 通過(guò) Holoscan 為 NVIDIA IGX 提供企業(yè)軟件支持

    Enterprise-IGX軟件現(xiàn)已在NVIDIA IGX平臺(tái)上正式可用,以滿足工業(yè)邊緣對(duì)實(shí)時(shí) AI 計(jì)算日益增長(zhǎng)的需求。它們將共同幫助醫(yī)療、工業(yè)和科學(xué)計(jì)算領(lǐng)域的解決方案提供商利用企業(yè)級(jí)軟件和支持來(lái)加快開(kāi)發(fā)
    的頭像 發(fā)表于 06-04 10:21 ?389次閱讀

    NVIDIA加速微軟最新的Phi-3 Mini開(kāi)源語(yǔ)言模型

    NVIDIA 宣布使用 NVIDIA TensorRT-LLM 加速微軟最新的 Phi-3 Mini 開(kāi)源語(yǔ)言模型。TensorRT-LLM 是一個(gè)開(kāi)源庫(kù),用于優(yōu)化從 PC 到云端的
    的頭像 發(fā)表于 04-28 10:36 ?393次閱讀

    利用NVIDIA組件提升GPU推理的吞吐

    本實(shí)踐,唯品會(huì) AI 平臺(tái)與 NVIDIA 團(tuán)隊(duì)合作,結(jié)合 NVIDIA TensorRTNVIDIA Merlin Hierarc
    的頭像 發(fā)表于 04-20 09:39 ?504次閱讀

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

    那么,什么是Torch TensorRT呢?Torch是我們大家聚在一起的原因,它是一個(gè)端到端的機(jī)器學(xué)習(xí)框架。而TensorRT則是NVIDIA的高性能深度學(xué)習(xí)推理軟件工具包。Torch Te
    的頭像 發(fā)表于 01-09 16:41 ?1042次閱讀
    Torch <b class='flag-5'>TensorRT</b>是一個(gè)優(yōu)化PyTorch模型推理性能的工具

    半導(dǎo)體芯片結(jié)構(gòu)分析

    SEM+EDS 可以實(shí)現(xiàn)對(duì)芯片結(jié)構(gòu)層的測(cè)量和元素分析。 機(jī)械研磨和氬離子研磨測(cè)試對(duì)比:離子研磨制樣可避免機(jī)械研磨制樣會(huì)造成劃痕和軟質(zhì)金屬的延展性形變問(wèn)題的影響,離子研磨CP(氬離子拋光切割)可以避免在研磨過(guò)程
    發(fā)表于 01-02 17:08

    NVIDIA DOCA 2.5 長(zhǎng)期支持版本發(fā)布

    正值 NVIDIA DOCA 面世三周年之際,NVIDIA 于近日發(fā)布了適用于 NVIDIA BlueField-3 網(wǎng)絡(luò)平臺(tái)的 NVIDIA DOCA 2.5 長(zhǎng)期
    的頭像 發(fā)表于 12-26 18:25 ?317次閱讀
    <b class='flag-5'>NVIDIA</b> DOCA 2.5 長(zhǎng)期<b class='flag-5'>支持</b>版本發(fā)布

    矩陣式變換器的拓?fù)?b class='flag-5'>結(jié)構(gòu)和工作原理 矩陣式變換器的控制策略和仿真分析

    在目前各領(lǐng)域?qū)τ陔娔苻D(zhuǎn)換特別是高效變頻裝置存在迫切需求的背景下,在詳細(xì)分析模塊化的矩陣式變流器的拓?fù)?b class='flag-5'>結(jié)構(gòu)、開(kāi)關(guān)狀態(tài)和工作原理的基礎(chǔ)上,設(shè)計(jì)了一套矩陣式變流器的控制策略。采用編程實(shí)現(xiàn)了數(shù)
    的頭像 發(fā)表于 12-26 14:07 ?2755次閱讀
    <b class='flag-5'>矩陣</b>式變換器的拓?fù)?b class='flag-5'>結(jié)構(gòu)</b>和工作原理 <b class='flag-5'>矩陣</b>式變換器的<b class='flag-5'>控制</b>策略和仿真分析

    如何在 NVIDIA TensorRT-LLM 中支持 Qwen 模型

    背景介紹 大語(yǔ)言模型正以其驚人的新能力推動(dòng)人工智能的發(fā)展,擴(kuò)大其應(yīng)用范圍。然而,由于這類模型具有龐大的參數(shù)規(guī)模,部署和推理的難度和成本極高,這一挑戰(zhàn)一直困擾著 AI 領(lǐng)域。此外,當(dāng)前存在大量支持模型
    的頭像 發(fā)表于 12-04 20:25 ?793次閱讀
    如何在 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b>-LLM 中<b class='flag-5'>支持</b> Qwen 模型

    4進(jìn)4出HDMI矩陣的都支持哪幾種控制切換方式?

    4進(jìn)4出HDMI矩陣的都支持哪幾種控制切換方式? 4進(jìn)4出HDMI矩陣是一種多功能視頻切換設(shè)備,它可以將多個(gè)HDMI輸入信號(hào)切換到不同的HDMI輸出,或?qū)⒁粋€(gè)HDMI輸入信號(hào)切換到多個(gè)
    的頭像 發(fā)表于 12-04 15:13 ?646次閱讀

    控制電纜組成部分

    控制電纜主要由以下幾部分組成: 導(dǎo)體:導(dǎo)體是控制電纜的基本組成部分,由單根或多根線芯組成。 絕緣:絕緣
    的頭像 發(fā)表于 11-07 11:30 ?917次閱讀

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

    能。該開(kāi)源程序庫(kù)現(xiàn)已作為 NVIDIA NeMo 框架的一部分,在 /NVIDIA/TensorRT-LLM GitHub 資源庫(kù)免費(fèi)提供
    的頭像 發(fā)表于 10-27 20:05 ?800次閱讀
    現(xiàn)已公開(kāi)發(fā)布!歡迎使用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b>-LLM 優(yōu)化大語(yǔ)言模型推理

    阿里云 &amp; NVIDIA TensorRT Hackathon 2023 決賽圓滿收官,26 支 AI 團(tuán)隊(duì)嶄露頭角

    2023 年 9 月 29 日,由阿里云、NVIDIA 聯(lián)合主辦,阿里云天池平臺(tái)承辦的 “NVIDIA TensorRT Hackathon 2023 生成式 AI 模型優(yōu)化賽” 圓滿落幕。該賽事自
    的頭像 發(fā)表于 10-17 03:20 ?443次閱讀
    阿里云 &amp; <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b> Hackathon 2023 決賽圓滿收官,26 支 AI 團(tuán)隊(duì)嶄露頭角