TensorRT 3:更快的TensorFlow推理和Volta支持
TensorRT 3:更快的TensorFlow推理和Volta支持
TensorRT 3: Faster TensorFlow Inference and Volta Support
英偉達(dá)TensorRT ?是一個(gè)高性能的深度學(xué)習(xí)推理優(yōu)化器和運(yùn)行時(shí),為深度學(xué)習(xí)應(yīng)用程序提供低延遲、高吞吐量的推理。NVIDIA去年發(fā)布了TensorRT,其目標(biāo)是加速產(chǎn)品部署的深度學(xué)習(xí)推理。
Figure 1. TensorRT optimizes trained neural network models to produce adeployment-ready runtime inference engine.
在這篇文章中,我們將介紹TensorRT 3,它比以前的版本提高了性能,并且包含了新的特性,使其更易于使用。TensorRT 3的主要亮點(diǎn)包括:
TensorFlow模型導(dǎo)入器:從TensorFlow訓(xùn)練的模型導(dǎo)入、優(yōu)化和生成推理運(yùn)行時(shí)引擎的方便API;
Python API:一個(gè)易于使用的Python接口,用于提高生產(chǎn)率;
Volta Tensor核心支持:與Tesla P100 GPU相比,在Tesla V100上提供高達(dá)3.7倍的更快推理性能。
讓我們使用一個(gè)代碼示例深入了解TensorRT工作流。我們將介紹如何將經(jīng)過訓(xùn)練的模型導(dǎo)入TensorRT,優(yōu)化它們并生成運(yùn)行時(shí)推理引擎,這些引擎可以序列化到磁盤進(jìn)行部署。最后,我們將看到如何加載序列化的運(yùn)行時(shí)引擎并在生產(chǎn)應(yīng)用程序中運(yùn)行快速高效的推理。但首先,讓我們回顧一下部署推理的一些挑戰(zhàn),看看為什么推理需要一個(gè)專用的解決方案。
Why Does Inference Need a Dedicated Solution?
作為數(shù)字產(chǎn)品和服務(wù)的消費(fèi)者,我們每天都與一些人工智能服務(wù)進(jìn)行交互,例如語音識(shí)別、語言翻譯、圖像識(shí)別和視頻字幕生成等。在幕后,神經(jīng)網(wǎng)絡(luò)計(jì)算每個(gè)查詢的結(jié)果。這個(gè)步驟通常被稱為“推斷”:新數(shù)據(jù)通過經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)來生成結(jié)果。在傳統(tǒng)的機(jī)器學(xué)習(xí)文獻(xiàn)中,它有時(shí)也被稱為“預(yù)測(cè)”或“評(píng)分”。
這種神經(jīng)網(wǎng)絡(luò)通常運(yùn)行在云中的web服務(wù)中,它同時(shí)接收來自數(shù)千或數(shù)百萬用戶的新請(qǐng)求,計(jì)算每個(gè)請(qǐng)求的推理計(jì)算,并將結(jié)果返回給用戶。為了提供良好的用戶體驗(yàn),所有這些都必須在較小的延遲預(yù)算下實(shí)現(xiàn),包括網(wǎng)絡(luò)延遲、神經(jīng)網(wǎng)絡(luò)執(zhí)行和基于生產(chǎn)環(huán)境的其他延遲。
類似地,如果AI應(yīng)用程序運(yùn)行在設(shè)備上,例如在執(zhí)行實(shí)時(shí)避免碰撞的自主車輛中或在進(jìn)行實(shí)時(shí)路徑規(guī)劃決策的無人機(jī)中,則延遲對(duì)于車輛安全而言變得至關(guān)重要。功率效率同樣重要,因?yàn)檫@些車輛在充電或加油之間可能需要幾天、幾周或幾個(gè)月。
今天,應(yīng)用程序開發(fā)人員和領(lǐng)域?qū)<沂褂肎PU加速的深度學(xué)習(xí)框架,如Caffe、TensorFlow或PyTorch來訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)來解決特定于應(yīng)用程序的任務(wù)。這些框架通過探索網(wǎng)絡(luò)設(shè)計(jì)、執(zhí)行模型評(píng)估和診斷以及使用新數(shù)據(jù)重新訓(xùn)練模型,為他們提供了原型解決方案的靈活性。
一旦對(duì)模型進(jìn)行了訓(xùn)練,開發(fā)人員通常會(huì)遵循以下部署方法之一。
使用諸如Caffe、TensorFlow或其他的訓(xùn)練框架進(jìn)行生產(chǎn)推理。
直接使用GPU加速的cuDNN和cuBLAS庫在內(nèi)部構(gòu)建自定義部署解決方案,以最小化框架開銷。
使用訓(xùn)練框架或構(gòu)建自定義部署解決方案以進(jìn)行僅限CPU的推斷。
這些部署選項(xiàng)通常無法滿足關(guān)鍵的推斷需求,例如數(shù)百萬用戶的可伸縮性、同時(shí)處理多個(gè)輸入的能力,或者快速高效地交付結(jié)果的能力。
更正式地說,關(guān)鍵要求包括:
高吞吐量:部署的模型必須處理大量數(shù)據(jù)才能為大量用戶服務(wù)。對(duì)可用資源的低效使用導(dǎo)致云或數(shù)據(jù)中心成本增加,以及與服務(wù)較少用戶相關(guān)的機(jī)會(huì)成本。
低響應(yīng)時(shí)間:移動(dòng)設(shè)備上的語音識(shí)別和汽車碰撞檢測(cè)系統(tǒng)等應(yīng)用要求在嚴(yán)格的低延遲閾值下獲得結(jié)果。無法在這些閾值下交付結(jié)果會(huì)對(duì)應(yīng)用程序的用戶體驗(yàn)產(chǎn)生負(fù)面影響,或者可能會(huì)危及汽車駕駛員的安全。
節(jié)能:對(duì)于部署在數(shù)據(jù)中心和低功耗嵌入式設(shè)備,節(jié)能至關(guān)重要。高功耗會(huì)增加成本,并可能使嵌入式部署解決方案變得棘手。
部署級(jí)解決方案:部署環(huán)境要求部署的軟件以最小的依賴性實(shí)現(xiàn)可靠和輕量級(jí)。為模型構(gòu)建、訓(xùn)練和原型設(shè)計(jì)的深度學(xué)習(xí)框架包括額外的包和依賴項(xiàng),這些包和依賴項(xiàng)會(huì)帶來不必要的開銷。
如果你是人工智能應(yīng)用程序的開發(fā)人員,你可能會(huì)涉及到一些或所有這些挑戰(zhàn)與深入學(xué)習(xí)部署。NVIDIA TensorRT通過優(yōu)化經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)來生成部署就緒的推理引擎,從而最大限度地提高GPU推理性能和功耗效率,從而解決了這些部署難題。TensorRT以最小的依賴性運(yùn)行在每個(gè)GPU平臺(tái)上,從數(shù)據(jù)中心GPU(如P4和V100)到自主驅(qū)動(dòng)和嵌入式平臺(tái)(如驅(qū)動(dòng)器PX2和Jetson TX2)。
有關(guān)TensorRT和NVIDIA GPU如何提供高性能和高效的推理,從而顯著節(jié)省數(shù)據(jù)中心的成本和邊緣的功耗的更多信息,請(qǐng)參閱以下技術(shù)白皮書:NVIDIA AI推理技術(shù)概述。
Example: Deploying a TensorFlow model with TensorRT
雖然為了完整起見,本文涵蓋了TensorRT的許多基礎(chǔ)知識(shí),但是您可以回顧前面的文章,使用NVIDIA TensorRT部署深層神經(jīng)網(wǎng)絡(luò),了解更多細(xì)節(jié)。
TensorRT 3更快、更容易使用,并且引入了一些新特性,我們將在下面的代碼示例中回顧這些特性。GitHub上提供了本例中的Jupyter(iPython)筆記本。
這個(gè)簡(jiǎn)單的例子演示了導(dǎo)入和優(yōu)化一個(gè)經(jīng)過訓(xùn)練的TensorFlow神經(jīng)網(wǎng)絡(luò)并將其部署為TensorRT運(yùn)行時(shí)引擎所需的步驟。該示例包括兩個(gè)不同的步驟:
Import and optimize trained models to generate inference engines導(dǎo)入和優(yōu)化訓(xùn)練模型生成推理機(jī)
在部署之前,我們只執(zhí)行此步驟一次。我們使用TensorRT解析一個(gè)經(jīng)過訓(xùn)練的模型,并對(duì)目標(biāo)部署GPU的批大小、精度和工作區(qū)內(nèi)存等指定參數(shù)執(zhí)行優(yōu)化。這個(gè)步驟的輸出是一個(gè)優(yōu)化的推理執(zhí)行引擎,我們將磁盤上的一個(gè)名為計(jì)劃文件的文件序列化。
Deploy generated runtime inference engine for inference
這是部署步驟。我們加載并反序列化保存的計(jì)劃文件以創(chuàng)建TensorRT引擎對(duì)象,并使用它在目標(biāo)部署平臺(tái)上對(duì)新數(shù)據(jù)運(yùn)行推斷。
Importing a trained model
有幾個(gè)深度學(xué)習(xí)框架,每個(gè)框架都有自己的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)定義和訓(xùn)練的模型文件格式。對(duì)于CAFE和TunSoFrices用戶,TunSRRT提供簡(jiǎn)單方便的Python和C++ API來導(dǎo)入模型進(jìn)行優(yōu)化。
Figure 2. TensorRT provides model importers for Caffe and TensorFlow. Other framework models can be imported using the
Network Definition API.
然而,一些開源和商業(yè)框架,以及專有的內(nèi)部開發(fā)工具,都有自己的網(wǎng)絡(luò)定義格式。您可以使用TensorRT的網(wǎng)絡(luò)定義API來指定網(wǎng)絡(luò)描述(使用C++或Python API),并將其加載到TensorRT中以進(jìn)行優(yōu)化。圖2顯示了將經(jīng)過訓(xùn)練的模型放入TensorRT的兩種不同方法。
不管您選擇什么方法,一旦導(dǎo)入了模型,TensorRT就會(huì)執(zhí)行與圖2中所示相同的一組模型優(yōu)化。
我們將從導(dǎo)入必要的python包開始,并調(diào)用函數(shù)導(dǎo)入TensorFlow模型。這里我們假設(shè)您已經(jīng)安裝了TensorRT 3.0,并且有一個(gè)經(jīng)過訓(xùn)練的TensorFlow模型,您已經(jīng)使用TensorFlow freeze_graph 工具將其導(dǎo)出為凍結(jié)模型(.pb文件)。
這個(gè)例子使用了TensorRT3的Python API,但是你可以使用C++ API來做同樣的事情。
# Import
TensorRT Modules
import tensorrt as trt
import uff from tensorrt.parsers import uffparser
G_LOGGER = trt.infer.ConsoleLogger(trt.infer.LogSeverity.INFO)
# Load your
newly created Tensorflow frozen model and convert it to UFF
uff_model = uff.from_tensorflow_frozen_model(“keras_vgg19_frozen_graph.pb”, [“dense_2/Softmax”])
UFF代表通用框架格式,這是TensorRT的內(nèi)部格式,用于在運(yùn)行優(yōu)化之前表示網(wǎng)絡(luò)圖。from_tensorflow_frozen_model()的第一個(gè)參數(shù)是凍結(jié)訓(xùn)練模型。在本例中,我們使用的是Keras VGG19模型。第二個(gè)參數(shù)是輸出層名稱。
上述步驟的輸出是TensorFlow模型的UFF圖表示,該模型可以被TensorRT解析。我們通過提供輸入層的名稱和維度(CHW格式)以及輸出層的名稱來配置下面的UFF解析器。
# Create a UFF parser to parse the UFF file created from your TF Frozen modelparser = uff
parser.create_uff_parser()
parser.register_input(“input_1”, (3,224,224),0)
parser.register_output(“dense_2/Softmax”)
A Note on TensorRT Supported Layers
如今,神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的許多創(chuàng)新都圍繞著新穎的定制層的發(fā)明展開。TensorRT支持下面列出的廣泛使用的標(biāo)準(zhǔn)層類型。這些應(yīng)該滿足大多數(shù)神經(jīng)網(wǎng)絡(luò)架構(gòu):
· Convolution
· LSTM and GRU
· Activation: ReLU, tanh, sigmoid
· Pooling: max and average
· Scaling
· Element wise operations
· LRN
· Fully-connected
· SoftMax
· Deconvolution
然而,深度學(xué)習(xí)是一個(gè)快速發(fā)展的領(lǐng)域,新的層次類型被頻繁引入。許多研究人員和開發(fā)人員發(fā)明了特定于其應(yīng)用程序的自定義或?qū)S袑印ensorRT提供了一個(gè)自定義層API,使您能夠定義自己的自定義層,而這些層本機(jī)不受支持。這些自定義層使用C++定義,以便于使用高度優(yōu)化的CUDA庫,如CUDNN和CUBLAS。TensorRT將在進(jìn)行推理時(shí)使用您提供的自定義層實(shí)現(xiàn),如圖3所示。
Figure 3. Custom layers can be integrated into the TensorRT runtime as plugins.
本例中VGG19網(wǎng)絡(luò)中的所有層都由TensorRT支持,因此我們不演示編寫插件的過程。有關(guān)代碼示例和編寫自定義層的詳細(xì)信息,請(qǐng)參閱TensorRT文檔。
TensorRT Optimizations
將模型導(dǎo)入TensorRT后,下一步稱為構(gòu)建階段,在該階段,您可以優(yōu)化模型以執(zhí)行運(yùn)行時(shí)。TensorRT可以執(zhí)行許多優(yōu)化,如圖1所示:
層與張量融合及未利用層的消除;
FP16和INT8精度降低校準(zhǔn);
目標(biāo)特定自動(dòng)調(diào)諧;
高效的內(nèi)存重用
構(gòu)建階段需要在目標(biāo)部署GPU平臺(tái)上運(yùn)行。例如,如果應(yīng)用程序要在Jetson TX2上運(yùn)行,則需要在Jetson TX2上執(zhí)行生成,同樣,如果推理服務(wù)將在帶有Tesla V100 gpu的AWS P3實(shí)例上的云中運(yùn)行,則生成階段需要在帶有Tesla V100的系統(tǒng)上運(yùn)行。
這個(gè)步驟只執(zhí)行一次,所以典型的應(yīng)用程序只構(gòu)建一個(gè)或多個(gè)引擎,然后將它們序列化以供以后使用。
TensorRT會(huì)在引擎蓋下為您自動(dòng)執(zhí)行這些優(yōu)化。您只需要指定要優(yōu)化的UFF推理圖、推理批大小、工作區(qū)GPU內(nèi)存量(用于CUDA內(nèi)核暫存空間)和目標(biāo)推理精度,如下代碼所示。
# Build your TensorRT inference engine# This step performs (1) Tensor fusion (2) Reduced precision # (3) Target autotuning (4) Tensor memory management
engine = trt.utils.uff_to_trt_engine(G_LOGGER, uff_model, parser, 1, 1<<20, trt.infer.DataType.FLOAT)
這里的uff_模型是從Tensorflow凍結(jié)圖創(chuàng)建的,選項(xiàng)指定FP32推斷,批大小為1和1MB的暫存空間。此步驟的輸出是一個(gè)優(yōu)化的運(yùn)行時(shí)引擎,可以進(jìn)行推理。
讓我們仔細(xì)看看在優(yōu)化步驟中引擎下面發(fā)生了什么。
Optimization1: Layer & Tensor Fusion
TensorRT解析網(wǎng)絡(luò)計(jì)算圖并尋找執(zhí)行圖優(yōu)化的機(jī)會(huì)。這些圖優(yōu)化不會(huì)改變圖中的底層計(jì)算:相反,它們希望重新構(gòu)造圖以更快、更高效地執(zhí)行操作。
為了便于說明,圖4顯示了神經(jīng)網(wǎng)絡(luò)圖的一部分。專家讀者可能會(huì)認(rèn)為這是2014年贏得ImageNet大賽的谷歌架構(gòu)的“初始”模塊。
Figure 4. TensorRT’s vertical and horizontal layer fusion and layer elimination optimizations simplify the GoogLeNet Inception module graph, reducing computation and memory overhead.
當(dāng)一個(gè)深度學(xué)習(xí)框架在推理過程中執(zhí)行這個(gè)圖時(shí),它會(huì)對(duì)每個(gè)層進(jìn)行多個(gè)函數(shù)調(diào)用。由于每個(gè)操作都是在GPU上執(zhí)行的,這就意味著要啟動(dòng)多個(gè)CUDA內(nèi)核。相對(duì)于內(nèi)核啟動(dòng)開銷和讀寫每個(gè)層的張量數(shù)據(jù)的成本,內(nèi)核計(jì)算通常非常快。這會(huì)導(dǎo)致內(nèi)存帶寬瓶頸和可用GPU資源利用率不足。
TensorRT通過垂直融合內(nèi)核來實(shí)現(xiàn)這一點(diǎn),以便一起執(zhí)行順序操作。這種層融合減少了內(nèi)核的啟動(dòng),避免了在層之間寫入和讀取內(nèi)存。在圖4左側(cè)的網(wǎng)絡(luò)中,各種大小的卷積層、偏置層和ReLU層可以組合成一個(gè)稱為CBR的內(nèi)核,如圖4右側(cè)所示。一個(gè)簡(jiǎn)單的類比是,三次分別去超市買三樣?xùn)|西,而不是一次就買三樣?xùn)|西。
TensorRT還可以識(shí)別共享相同輸入數(shù)據(jù)和過濾器大小但具有不同權(quán)重的層。TensorRT不使用三個(gè)獨(dú)立的內(nèi)核,而是將它們水平地合并成一個(gè)更寬的內(nèi)核,如圖4右側(cè)的1×1CBR層所示。
TensorRT還可以通過預(yù)先分配輸出緩沖區(qū)并以快速的方式寫入它們來消除圖4中的連接層(“concat”)。
總的來說,結(jié)果是一個(gè)更小、更快、更高效的圖形,具有更少的層和內(nèi)核啟動(dòng),因此減少了推理延遲。表1顯示了一些常見圖像分類網(wǎng)絡(luò)的TensorRT圖優(yōu)化結(jié)果。
ptimization2: FP16 and INT8 Precision Calibration
大多數(shù)深度學(xué)習(xí)框架訓(xùn)練神經(jīng)網(wǎng)絡(luò)完全32位精度(FP32)。一旦模型得到充分訓(xùn)練,推理計(jì)算可以使用半精度FP16甚至INT8張量運(yùn)算,因?yàn)橥评聿恍枰荻确聪騻鞑ァJ褂幂^低的精度會(huì)導(dǎo)致較小的模型大小、較低的內(nèi)存利用率和延遲以及較高的吞吐量。
TensorRT可以在FP32、FP16和INT8中部署模型,并且在它們之間切換就像在uff_to_trt_engine函數(shù)中指定數(shù)據(jù)類型一樣簡(jiǎn)單:
· For FP32, use trt.infer.DataType.FLOAT.
· For FP16 in and FP16 Tensor Cores on Volta GPUs, use trt.infer.DataType.HALF
· For INT8 inference, use trt.infer.DataType.INT8.
從表2中可以看出,INT8的動(dòng)態(tài)范圍明顯小于全精度動(dòng)態(tài)范圍。INT8只能表示256個(gè)不同的值。為了將全精度信息量化為INT8,同時(shí)最小化精度損失,TensorRT必須執(zhí)行一個(gè)稱為校準(zhǔn)的過程,以確定如何最好地將權(quán)重和激活表示為8位整數(shù)。
校準(zhǔn)步驟要求您向TensorRT提供輸入訓(xùn)練數(shù)據(jù)的代表性樣本。不需要對(duì)模型進(jìn)行額外的微調(diào)或重新培訓(xùn),也不需要訪問整個(gè)培訓(xùn)數(shù)據(jù)集。校準(zhǔn)是將FP32轉(zhuǎn)換為INT8的完全自動(dòng)化和無參數(shù)方法。
在這個(gè)例子中,我們只演示了FP32和FP16的部署,請(qǐng)參閱TensorRT文檔中的代碼示例和有關(guān)如何執(zhí)行校準(zhǔn)步驟的更多詳細(xì)信息。
Optimization3: Kernel Auto-Tuning
在優(yōu)化階段,TensorRT還從數(shù)百個(gè)專門的內(nèi)核中進(jìn)行選擇,其中許多是針對(duì)一系列參數(shù)和目標(biāo)平臺(tái)進(jìn)行手動(dòng)調(diào)整和優(yōu)化的。例如,有幾種不同的卷積算法。TensorRT將從內(nèi)核庫中選擇實(shí)現(xiàn),該庫為目標(biāo)GPU、輸入數(shù)據(jù)大小、過濾器大小、tensor布局、批大小和其他參數(shù)提供最佳性能。
這可以確保部署的模型針對(duì)特定的部署平臺(tái)以及正在部署的特定神經(jīng)網(wǎng)絡(luò)進(jìn)行性能調(diào)整。
Optimization4: Dynamic Tensor Memory
TensorRT還通過僅在每個(gè)tensor使用期間為其指定內(nèi)存,從而減少內(nèi)存占用并改進(jìn)內(nèi)存重用,避免了快速高效執(zhí)行的內(nèi)存分配開銷。
TensorRT Optimization Performance Results
TensorRT所有優(yōu)化的結(jié)果是,與在CPU或GPU上使用深度學(xué)習(xí)框架運(yùn)行推理相比,模型運(yùn)行更快、更有效。圖5中的圖表比較了CPU、Tesla V100 GPU和TensorFlow推理以及Tesla V100 GPU和TensorRT推理上ResNet-50網(wǎng)絡(luò)的圖像/秒推理性能。
使用TensorRT,與Tesla V100和CPU相比,您可以獲得高達(dá)40倍的更快的推理性能。在Volta GPU上運(yùn)行TensorFlow模型的TensorRT推理在7毫秒的實(shí)時(shí)延遲要求下可以快18倍。
Figure 5. TensorRT inference performance compared to CPU-only inference and TensorFlow framework inference.
Serializing Optimized TensorRT Engines
TensorRT優(yōu)化階段的輸出是一個(gè)可以序列化到磁盤的運(yùn)行時(shí)推理引擎。此序列化文件稱為“計(jì)劃”文件,其中包含運(yùn)行時(shí)引擎用于執(zhí)行網(wǎng)絡(luò)的序列化數(shù)據(jù)。它被稱為計(jì)劃文件,因?yàn)樗粌H包括權(quán)重,還包括內(nèi)核執(zhí)行網(wǎng)絡(luò)的計(jì)劃。它還包括應(yīng)用程序可以查詢的網(wǎng)絡(luò)信息,以確定如何綁定輸入和輸出緩沖區(qū)。
使用TensorRT的write_engine_to_file()函數(shù)執(zhí)行序列化。
# Serialize TensorRT engine to a file for when you are ready to deploy your model.
trt.utils.write_engine_to_file(“keras_vgg19_b1_FP32.engine”, engine.serialize())
TensorRT Run-Time Inference
現(xiàn)在可以使用TensorRT部署應(yīng)用程序了。為了快速概括,到目前為止,您已經(jīng)將一個(gè)經(jīng)過訓(xùn)練的TensorFlow模型導(dǎo)入到TensorRT中,并執(zhí)行了許多優(yōu)化以生成運(yùn)行時(shí)引擎。您已經(jīng)將此引擎序列化為引擎計(jì)劃文件。您離線執(zhí)行了所有這些步驟,并且僅在部署之前執(zhí)行了一次。
下一步是將序列化模型加載到運(yùn)行時(shí)環(huán)境中,并對(duì)新數(shù)據(jù)執(zhí)行推斷。為了演示這個(gè)步驟,我們將使用TensorRT Lite API。這是一個(gè)高度抽象的接口,處理許多標(biāo)準(zhǔn)任務(wù),如創(chuàng)建記錄器、從計(jì)劃文件反序列化引擎以創(chuàng)建運(yùn)行時(shí),以及為引擎分配GPU內(nèi)存。在推斷過程中,它還自動(dòng)管理與GPU之間的數(shù)據(jù)傳輸,因此您只需創(chuàng)建一個(gè)引擎并開始處理數(shù)據(jù)。對(duì)于更細(xì)粒度的控件,您可以始終使用標(biāo)準(zhǔn)API或C++ API。
from tensorrt.lite import Enginefrom tensorrt.infer import LogSeverityimport tensorrt # Create a runtime engine from plan file using TensorRT Lite API
engine_single = Engine(PLAN=“keras_vgg19_b1_FP32.engine”, postprocessors={“dense_2/Softmax”:analyze})
images_trt, images_tf = load_and_preprocess_images()
results = []
for image in images_trt:
result = engine_single.infer(image) # Single function for inference
results.append(result)
Conclusion
TensorRT解決了深度學(xué)習(xí)部署的三個(gè)關(guān)鍵挑戰(zhàn)。
高吞吐量和低延遲:如圖5所示,TensorRT執(zhí)行層融合、精確校準(zhǔn)和目標(biāo)自動(dòng)調(diào)整,以在7毫秒實(shí)時(shí)延遲下,在Volta GPU上提供高達(dá)40倍的推理速度,以及高達(dá)18倍的TensorFlow模型推理速度。這意味著,由于更好地利用了GPU資源,您可以輕松地?cái)U(kuò)展您的AI應(yīng)用程序以服務(wù)更多用戶。
功耗效率:通過針對(duì)特定目標(biāo)的優(yōu)化和動(dòng)態(tài)內(nèi)存管理,與深度學(xué)習(xí)框架推理相比,TensorRT提供了更高的功耗效率。低功耗設(shè)備運(yùn)行時(shí)間更長(zhǎng),數(shù)據(jù)中心運(yùn)行溫度更低。
部署級(jí)解決方案:TensorRT是為部署而設(shè)計(jì)的。使用TensorRT,您可以部署一個(gè)輕量級(jí)運(yùn)行時(shí),而不需要框架依賴性和開銷。使用Python和C++接口,TensorRT可以很容易地從研究人員和數(shù)據(jù)科學(xué)家培訓(xùn)模型、開發(fā)人員構(gòu)建生產(chǎn)部署應(yīng)用程序的每個(gè)人身上使用。
TensorRT 3現(xiàn)在可以免費(fèi)下載給NVIDIA開發(fā)者程序的所有成員。請(qǐng)?jiān)L問TensorRT主頁了解更多信息并立即下載TensorRT!
TensorRT也可以作為NVIDIA GPU云上的容器在本地或AWS
P3實(shí)例上使用。注冊(cè)一個(gè)NGC帳戶,可以免費(fèi)訪問TensorRT容器以及NVIDIA優(yōu)化的深度學(xué)習(xí)框架容器進(jìn)行培訓(xùn)。
總結(jié)
以上是生活随笔為你收集整理的TensorRT 3:更快的TensorFlow推理和Volta支持的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低层级GPU虚拟内存管理引论
- 下一篇: 将深度学习低延迟推理性能提高一倍