chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

TensorRT條件用于實(shí)現(xiàn)網(wǎng)絡(luò)子圖的條件執(zhí)行

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:NVIDIA ? 2022-05-18 10:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

11.1. Defining A Conditional

if-conditional 由條件邊界層定義:

  • IConditionLayer表示predicate 并指定條件是應(yīng)該執(zhí)行真分支(then-branch)還是假分支(else-branch)。
  • IIfConditionalInputLayer指定兩個(gè)條件分支之一的輸入。
  • IIfConditionalOutputLayer指定條件的輸出。

每個(gè)邊界層都繼承自IIfConditionalBoundaryLayer類(lèi),該類(lèi)具有獲取其關(guān)聯(lián)IIfConditional的方法getConditional()IIfConditional實(shí)例標(biāo)識(shí)條件。所有具有相同IIfConditional的條件邊界層都屬于該條件。

條件必須恰好有一個(gè)IConditionLayer實(shí)例、零個(gè)或多個(gè)IIfConditionalInputLayer實(shí)例,以及至少一個(gè)IIfConditionalOutputLayer實(shí)例。

IIfConditional實(shí)現(xiàn)了一個(gè)if-then-else流控制結(jié)構(gòu),該結(jié)構(gòu)提供基于動(dòng)態(tài)布爾輸入的網(wǎng)絡(luò)子圖的條件執(zhí)行。它由一個(gè)布爾標(biāo)量predicate condition和兩個(gè)分支子圖定義:一個(gè)trueSubgraphcondition評(píng)估為true時(shí)執(zhí)行,一個(gè)falseSubgraphcondition評(píng)估為false時(shí)執(zhí)行

If condition is true then: 
	output = trueSubgraph(trueInputs);
Else
	output = falseSubgraph(falseInputs);
Emit output

真分支和假分支都必須定義,類(lèi)似于許多編程語(yǔ)言中的三元運(yùn)算符。

要定義if-conditional,使用方法INetworkDefinition::addIfConditional創(chuàng)建一個(gè)IIfConditional實(shí)例,然后添加邊界層和分支層。

IIfConditional* simpleIf = network->addIfConditional();

IIfConditional ::setCondition方法接受一個(gè)參數(shù):條件張量。這個(gè) 0D 布爾張量(標(biāo)量)可以由網(wǎng)絡(luò)中的早期層動(dòng)態(tài)計(jì)算。它用于決定執(zhí)行哪個(gè)分支。IConditionLayer有一個(gè)輸入(條件)并且沒(méi)有輸出,因?yàn)樗蓷l件實(shí)現(xiàn)在內(nèi)部使用。

// Create a condition predicate that is also a network input.
auto cond = network->addInput("cond", DataType::kBOOL, Dims{0});
IConditionLayer* condition = simpleIf->setCondition(*cond);

TensorRT 不支持實(shí)現(xiàn)條件分支的子圖抽象,而是使用IIfConditionalInputLayerIIfConditionalOutputLayer來(lái)定義條件的邊界。

  • IIfConditionalInputLayer將單個(gè)輸入抽象為IIfConditional的一個(gè)或兩個(gè)分支子圖。特定IIfConditionalInputLayer的輸出可以同時(shí)提供兩個(gè)分支。then-branchelse-branch的輸入不需要是相同的類(lèi)型和形狀,每個(gè)分支可以獨(dú)立地包含零個(gè)或多個(gè)輸入。IIfConditionalInputLayer是可選的,用于控制哪些層將成為分支的一部分(請(qǐng)參閱條件執(zhí)行)。如果分支的所有輸出都不依賴(lài)于IIfConditionalInputLayer實(shí)例,則該分支為空。當(dāng)條件為false時(shí)沒(méi)有要評(píng)估的層時(shí),空的else-branch可能很有用,并且網(wǎng)絡(luò)評(píng)估應(yīng)按照條件進(jìn)行(請(qǐng)參閱條件示例)。
// Create an if-conditional input.
// x is some arbitrary Network tensor.
IIfConditionalInputLayer* inputX = simpleIf->addInput(*x);
  • IIfConditionalOutputLayer抽象了if條件的單個(gè)輸出。它有兩個(gè)輸入:來(lái)自真子圖的輸出(輸入索引 0)和來(lái)自假子圖的輸出(輸入索引 1)。IIfConditionalOutputLayer的輸出可以被認(rèn)為是最終輸出的占位符,最終輸出將在運(yùn)行時(shí)確定。IIfConditionalOutputLayer的作用類(lèi)似于傳統(tǒng) SSA 控制流圖中的 $Φ(Phi)$ 函數(shù)節(jié)點(diǎn)。它的語(yǔ)義是:選擇真子圖或假子圖的輸出。IIfConditional的所有輸出都必須源自IIfConditionalOutputLayer實(shí)例。沒(méi)有輸出的 if 條件對(duì)網(wǎng)絡(luò)的其余部分沒(méi)有影響,因此,它被認(rèn)為是病態(tài)的。兩個(gè)分支(子圖)中的每一個(gè)也必須至少有一個(gè)輸出。if-conditional的輸出可以標(biāo)記為網(wǎng)絡(luò)的輸出,除非if-conditional嵌套在另一個(gè)if-conditional或循環(huán)中。
// trueSubgraph and falseSubgraph represent network subgraphs
IIfConditionalOutputLayer* outputLayer = simpleIf->addOutput(
    *trueSubgraph->getOutput(0), 
    *falseSubgraph->getOutput(0));

下圖提供了 if 條件抽象模型的圖形表示。綠色矩形表示條件的內(nèi)部,僅限于NVIDIA TensorRT 支持矩陣中的LayersFor Flow-Control Constructs部分中列出的層類(lèi)型。

11.2. Conditional Execution

網(wǎng)絡(luò)層的條件執(zhí)行是一種網(wǎng)絡(luò)評(píng)估策略,其中僅在需要分支輸出的值時(shí)才執(zhí)行分支層(屬于條件子圖的層)。在條件執(zhí)行中,無(wú)論是真分支還是假分支都被執(zhí)行并允許改變網(wǎng)絡(luò)狀態(tài)。

相反,在斷定執(zhí)行中,真分支和假分支都被執(zhí)行,并且只允許其中之一改變網(wǎng)絡(luò)評(píng)估狀態(tài),具體取決于條件斷定的值(即僅其中一個(gè)的輸出)子圖被饋送到以下層。

條件執(zhí)行有時(shí)稱(chēng)為惰性求值,斷定執(zhí)行有時(shí)稱(chēng)為急切求值。IIfConditionalInputLayer的實(shí)例可用于指定急切調(diào)用哪些層以及延遲調(diào)用哪些層。這是通過(guò)從每個(gè)條件輸出開(kāi)始向后跟蹤網(wǎng)絡(luò)層來(lái)完成的。依賴(lài)于至少一個(gè)IIfConditionalInputLayer輸出的數(shù)據(jù)層被認(rèn)為是條件內(nèi)部的,因此被延遲評(píng)估。在沒(méi)有IIfConditionalInputLayer實(shí)例添加到條件條件的極端情況下,所有層都被急切地執(zhí)行,類(lèi)似于ISelectLayer

下面的三個(gè)圖表描述了IIfConditionalInputLayer放置的選擇如何控制執(zhí)行調(diào)度。

在圖 A 中,真分支由 3 層(T1、T2、T3)組成。當(dāng)條件評(píng)估為true時(shí),這些層會(huì)延遲執(zhí)行。

在圖 B 中,輸入層 I1 放置在層 T1 之后,它將 T1 移出真實(shí)分支。在評(píng)估 if 結(jié)構(gòu)之前,T1 層急切地執(zhí)行。

在圖表 C 中,輸入層 I1 被完全移除,這將 T3 移到條件之外。 T2 的輸入被重新配置以創(chuàng)建合法網(wǎng)絡(luò),并且 T2 也移出真實(shí)分支。當(dāng)條件評(píng)估為true時(shí),條件不計(jì)算任何內(nèi)容,因?yàn)檩敵鲆呀?jīng)被急切地計(jì)算(但它確實(shí)將條件相關(guān)輸入復(fù)制到其輸出)。

11.3. Nesting and Loops

條件分支可以嵌套其他條件,也可以嵌套循環(huán)。循環(huán)可以嵌套條件。與循環(huán)嵌套一樣,TensorRT 從數(shù)據(jù)流中推斷條件和循環(huán)的嵌套。例如,如果條件 B 使用在循環(huán) A 內(nèi)定義的值,則 B 被認(rèn)為嵌套在 A 內(nèi)。

真分支中的層與假分支中的層之間不能有交叉邊,反之亦然。換句話(huà)說(shuō),一個(gè)分支的輸出不能依賴(lài)于另一個(gè)分支中的層。

例如,請(qǐng)參閱條件示例以了解如何指定嵌套。

11.4. Limitations

兩個(gè)真/假子圖分支中的輸出張量數(shù)必須相同。來(lái)自分支的每個(gè)輸出張量的類(lèi)型和形狀必須相同。

請(qǐng)注意,這比 ONNX 規(guī)范更受限制,ONNX 規(guī)范要求真/假子圖具有相同數(shù)量的輸出并使用相同的輸出數(shù)據(jù)類(lèi)型,但允許不同的輸出形狀。

11.5. Conditional Examples

11.5.1. Simple If-Conditional

下面的例子展示了如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的條件,它有條件地對(duì)兩個(gè)張量執(zhí)行算術(shù)運(yùn)算。Conditional

condition = true
If condition is true:
        output = x + y
Else:
        output = x - y

Example

ITensor* addCondition(INetworkDefinition& n, bool predicate)
{
    // The condition value is a constant int32 input that is cast to boolean because TensorRT doesn't support boolean constant layers.

    static const Dims scalarDims = Dims{0, {}};
    static float constexpr zero{0};
    static float constexpr one{1};

    float* const val = predicate ? &one : &zero;

    ITensor* cond = 
        n.addConstant(scalarDims, DataType::kINT32, val, 1})->getOutput(0);

    auto* cast = n.addIdentity(cond);
    cast->setOutputType(0, DataType::kBOOL);
    cast->getOutput(0)->setType(DataType::kBOOL);

    return cast->getOutput(0);
}

IBuilder* builder = createInferBuilder(gLogger);
INetworkDefinition& n = *builder->createNetworkV2(0U);
auto x = n.addInput("x", DataType::kFLOAT, Dims{1, {5}});
auto y = n.addInput("y", DataType::kFLOAT, Dims{1, {5}});
ITensor* cond = addCondition(n, true);

auto* simpleIf = n.addIfConditional();
simpleIf->setCondition(*cond);

// Add input layers to demarcate entry into true/false branches.
x = simpleIf->addInput(*x)->getOutput(0);
y = simpleIf->addInput(*y)->getOutput(0);

auto* trueSubgraph = n.addElementWise(*x, *y, ElementWiseOperation::kSUM)->getOutput(0);
auto* falseSubgraph = n.addElementWise(*x, *y, ElementWiseOperation::kSUB)->getOutput(0);

auto* output = simpleIf->addOutput(*trueSubgraph, *falseSubgraph)->getOutput(0);
n.markOutput(*output);

11.5.2. Exporting from PyTorch

以下示例展示了如何將腳本化的 PyTorch 代碼導(dǎo)出到 ONNX。函數(shù)sum_even中的代碼執(zhí)行嵌套在循環(huán)中的 if 條件。

import torch.onnx
import torch
import tensorrt as trt
import numpy as np

TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
EXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)

@torch.jit.script
def sum_even(items):
    s = torch.zeros(1, dtype=torch.float)
    for c in items:
        if c % 2 == 0:
            s += c
    return s

class ExampleModel(torch.nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self, items):
        return sum_even(items)

def build_engine(model_file):
    builder = trt.Builder(TRT_LOGGER)
    network = builder.create_network(EXPLICIT_BATCH)
    config = builder.create_builder_config()
    parser = trt.OnnxParser(network, TRT_LOGGER)

    with open(model_file, 'rb') as model:
        assert parser.parse(model.read())
        return builder.build_engine(network, config)

def export_to_onnx():
    items = torch.zeros(4, dtype=torch.float)
    example = ExampleModel()
    torch.onnx.export(example, (items), "example.onnx", verbose=False, opset_version=13, enable_onnx_checker=False, do_constant_folding=True)

export_to_onnx()
build_engine("example.onnx")

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guā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

    文章

    5444

    瀏覽量

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

    關(guān)注

    28

    文章

    5054

    瀏覽量

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

    關(guān)注

    1813

    文章

    49542

    瀏覽量

    259432
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    提高條件分支指令預(yù)測(cè)正確率的方法

    寄存器,分別用于記錄條件分支指令個(gè)數(shù)branch_num和預(yù)測(cè)失敗次數(shù)prmiss_num。 上圖為運(yùn)行coremark測(cè)試程序的波形,最后預(yù)測(cè)成功率超過(guò)百分之九十。而初始版本的E203處理器預(yù)測(cè)成功率僅46%。 可見(jiàn)采用基于
    發(fā)表于 10-22 08:22

    訂單多條件篩選接口設(shè)計(jì)與實(shí)現(xiàn)

    :$u = u_{text{specified}}$ 接口設(shè)計(jì)原則 RESTful風(fēng)格 GET /orders?param1=value1?m2=value2 參數(shù)動(dòng)態(tài)組合 支持任意條件自由組合,未傳參數(shù)視為不篩選 分頁(yè)機(jī)制 需包含page和size參數(shù),避免全量查詢(xún) 核心實(shí)現(xiàn)
    的頭像 發(fā)表于 10-16 14:14 ?99次閱讀
    訂單多<b class='flag-5'>條件</b>篩選接口設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    TensorRT-LLM的大規(guī)模專(zhuān)家并行架構(gòu)設(shè)計(jì)

    之前文章已介紹引入大規(guī)模 EP 的初衷,本篇將繼續(xù)深入介紹 TensorRT-LLM 的大規(guī)模專(zhuān)家并行架構(gòu)設(shè)計(jì)與創(chuàng)新實(shí)現(xiàn)。
    的頭像 發(fā)表于 09-23 14:42 ?441次閱讀
    <b class='flag-5'>TensorRT</b>-LLM的大規(guī)模專(zhuān)家并行架構(gòu)設(shè)計(jì)

    DeepSeek R1 MTP在TensorRT-LLM中的實(shí)現(xiàn)與優(yōu)化

    TensorRT-LLM 在 NVIDIA Blackwell GPU 上創(chuàng)下了 DeepSeek-R1 推理性能的世界紀(jì)錄,Multi-Token Prediction (MTP) 實(shí)現(xiàn)了大幅提速
    的頭像 發(fā)表于 08-30 15:47 ?3587次閱讀
    DeepSeek R1 MTP在<b class='flag-5'>TensorRT</b>-LLM中的<b class='flag-5'>實(shí)現(xiàn)</b>與優(yōu)化

    NTP網(wǎng)絡(luò)子母時(shí)鐘的特點(diǎn)優(yōu)勢(shì)及應(yīng)用場(chǎng)景介紹

    在數(shù)字化基礎(chǔ)設(shè)施高速發(fā)展的今天,時(shí)間同步已成為金融、醫(yī)療、交通等關(guān)鍵領(lǐng)域的核心需求。作為時(shí)間頻率領(lǐng)域的專(zhuān)業(yè)廠(chǎng)商,“同步天下”品牌旗下的SYN6109型NTP網(wǎng)絡(luò)子鐘,以卓越的技術(shù)性能和靈活的應(yīng)用能力
    的頭像 發(fā)表于 08-09 15:12 ?960次閱讀

    光耦的導(dǎo)通條件

    光耦的導(dǎo)通條件主要包括以下幾點(diǎn): 一、輸入電流達(dá)到閾值 光耦的導(dǎo)通條件之一是輸入電流(通常是指發(fā)光二極管LED的電流If)需要達(dá)到一定的閾值。當(dāng)輸入電流小于該閾值時(shí),光耦處于關(guān)斷狀態(tài);當(dāng)輸入電流大于
    的頭像 發(fā)表于 07-31 09:59 ?694次閱讀
    光耦的導(dǎo)通<b class='flag-5'>條件</b>

    基礎(chǔ)篇3:掌握Python中的條件語(yǔ)句與循環(huán)

    : # 條件為真時(shí)執(zhí)行的代碼塊 如果條件表達(dá)式為真(即結(jié)果為T(mén)rue),則執(zhí)行緊隨其后的代碼塊。 elif和else語(yǔ)句 當(dāng)有多個(gè)條件
    發(fā)表于 07-03 16:13

    NTP網(wǎng)絡(luò)子鐘的技術(shù)架構(gòu)與行業(yè)應(yīng)用解析

    基準(zhǔn)如同數(shù)字化時(shí)代的 “隱形基礎(chǔ)設(shè)施”,支撐著各領(lǐng)域的穩(wěn)定運(yùn)行。 作為深耕時(shí)間頻率領(lǐng)域多年的廠(chǎng)家,西安同步電子科技有限公司憑借 “同步天下” 品牌旗下的時(shí)間同步設(shè)備,包括 NTP 網(wǎng)絡(luò)子鐘系列產(chǎn)品,以卓越的技術(shù)實(shí)力和
    的頭像 發(fā)表于 06-06 13:48 ?260次閱讀

    在任何平臺(tái)上使用PetaLinux的先決條件

    本篇文章介紹了在任何平臺(tái)上使用 PetaLinux 的先決條件。PetaLinux 是一種嵌入式 Linux 軟件開(kāi)發(fā)套件 (SDK),主要用于基于 FPGA 的系統(tǒng)級(jí)芯片 (SoC) 設(shè)計(jì)或 FPGA 設(shè)計(jì)。
    的頭像 發(fā)表于 04-24 10:40 ?1123次閱讀
    在任何平臺(tái)上使用PetaLinux的先決<b class='flag-5'>條件</b>

    測(cè)量?jī)x器的有哪些工作條件?

    一、什么是測(cè)量?jī)x器的 參考工作條件 ? 參考工作條件簡(jiǎn)稱(chēng)參考條件,是指“為測(cè)量?jī)x器或測(cè)量系統(tǒng)的性能評(píng)價(jià)或測(cè)量結(jié)果的相互比較而規(guī)定的工作條件”。為了使對(duì)不同測(cè)量?jī)x器的性能評(píng)價(jià)或?qū)Σ煌瑴y(cè)量
    的頭像 發(fā)表于 03-04 17:28 ?1173次閱讀
    測(cè)量?jī)x器的有哪些工作<b class='flag-5'>條件</b>?

    請(qǐng)問(wèn)什么是同步采樣ADC?要實(shí)現(xiàn)同步采樣要滿(mǎn)足什么條件?

    請(qǐng)問(wèn)什么是同步采樣ADC?要實(shí)現(xiàn)同步采樣要滿(mǎn)足什么條件? 謝謝!
    發(fā)表于 01-17 07:49

    什么是云計(jì)算平臺(tái)?搭建云計(jì)算平臺(tái)需要什么條件

    云計(jì)算平臺(tái)是一種以云計(jì)算技術(shù)為基礎(chǔ)的計(jì)算服務(wù)平臺(tái),用于提供靈活、可擴(kuò)展、可共享的計(jì)算資源和系統(tǒng)服務(wù)。它允許用戶(hù)在網(wǎng)絡(luò)上分布式處理數(shù)據(jù)和應(yīng)用程序,具有更高的可用性、更低的成本、更快的響應(yīng)時(shí)間。以下是UU云小編對(duì)云計(jì)算平臺(tái)及其搭建所需條件
    的頭像 發(fā)表于 01-09 10:43 ?736次閱讀

    IC烘烤條件

    芯片烘烤條件
    發(fā)表于 12-30 15:04 ?0次下載

    半導(dǎo)體雷射震蕩條件

    共振腔中雷射光來(lái)回(round trip)振蕩后保持光學(xué)自再現(xiàn)(self-consistency)的邊界條件,讓我們可以求得雷射要穩(wěn)定存在于共振腔必須符合兩條件,第一部分為振幅條件,第二則為相位
    的頭像 發(fā)表于 12-19 10:52 ?815次閱讀
    半導(dǎo)體雷射震蕩<b class='flag-5'>條件</b>

    MEID號(hào)是什么?申請(qǐng)條件是什么?

    終端標(biāo)識(shí)號(hào),可能是基于不同表述或版本產(chǎn)生的差異),用于設(shè)備的身份識(shí)別和跟蹤。以下是英利檢測(cè)收集的關(guān)于MEID號(hào)的詳細(xì)解釋以及申請(qǐng)條件,供大家參考:MEID號(hào)的作用身
    的頭像 發(fā)表于 11-11 17:12 ?3231次閱讀
    MEID號(hào)是什么?申請(qǐng)<b class='flag-5'>條件</b>是什么?