TensorRT 7.2.1 开发概要(下)
TensorRT 7.2.1 開發(fā)概要(下)
1.2. Where Does TensorRT Fit?
一般來說,開發(fā)和部署深度學習模型的工作流要經(jīng)過三個階段。
Phase 1 is training
Phase 2 is developing a deployment solution, and
Phase 3 is the deployment of that solution
Phase 1: Training
在訓練階段,數(shù)據(jù)科學家和開發(fā)人員將首先陳述他們想要解決的問題,然后決定他們將使用的精確輸入、輸出和損失函數(shù)。他們還將收集、整理、擴充并可能標記訓練、測試和驗證數(shù)據(jù)集。然后他們將設計網(wǎng)絡結(jié)構(gòu)并訓練模型。在訓練過程中,他們將監(jiān)控學習過程,這可能會提供反饋,使他們修正損失函數(shù),獲取或增加訓練數(shù)據(jù)。在這個過程的最后,他們將驗證模型的性能并保存經(jīng)過訓練的模型。訓練和驗證通常使用DGX-1完成? 、Titan或特斯拉數(shù)據(jù)中心GPU。
TensorRT通常不在訓練階段的任何部分使用。
Phase 2:
Developing A Deployment Solution
在第二階段,數(shù)據(jù)科學家和開發(fā)人員將從經(jīng)過訓練的模型開始,并使用這個經(jīng)過訓練的模型創(chuàng)建和驗證部署解決方案。將這個階段分解為幾個步驟,您將得到:
- 思考一下神經(jīng)網(wǎng)絡在它所屬的大系統(tǒng)中是如何工作的,并設計和實現(xiàn)適當?shù)慕鉀Q方案。可能包含神經(jīng)網(wǎng)絡的系統(tǒng)范圍非常多樣。示例包括:
汽車的自動駕駛系統(tǒng)
公共場所或公司校園的視頻安全系統(tǒng)
用戶設備的語音接口
工業(yè)生產(chǎn)線自動化質(zhì)量保證系統(tǒng)
提供產(chǎn)品推薦的在線零售系統(tǒng),或
提供娛樂性過濾器的消費者網(wǎng)絡服務用戶可以應用到上傳的圖像。
確定你的優(yōu)先事項。考慮到您可以實現(xiàn)的不同系統(tǒng)的多樣性,在設計和實現(xiàn)部署架構(gòu)時可能需要考慮很多事情。
你有一個網(wǎng)絡還是多個網(wǎng)絡?例如,您是否正在開發(fā)基于單個網(wǎng)絡(人臉檢測)的功能或系統(tǒng),您的系統(tǒng)也不會由不同模型的混合或級聯(lián)組成,或者可能是由最終用戶提供的集合模型的更通用的工具組成?
您將使用什么設備或計算元素來運行網(wǎng)絡?CPU,GPU,其他,還是混合?如果模型要在GPU上運行,它是單一類型的GPU,還是需要設計一個可以在各種GPU上運行的應用程序?
數(shù)據(jù)如何到達模型?什么是數(shù)據(jù)管道?數(shù)據(jù)來自攝像機或傳感器,來自一系列文件,還是通過網(wǎng)絡連接上傳?
將進行哪些預處理?數(shù)據(jù)的格式是什么?如果是圖像,是否需要裁剪、旋轉(zhuǎn)?如果是文本,它是什么字符集?是否允許所有字符作為模型的輸入?有什么特別的代幣嗎?
您對延遲和吞吐量有什么要求?
你能批量處理多個請求嗎?
您是否需要單個網(wǎng)絡的多個實例來實現(xiàn)所需的總體系統(tǒng)吞吐量和延遲?
你將如何處理網(wǎng)絡的輸出?
需要哪些后處理步驟?
TensorRT提供了一個快速、模塊化、緊湊、健壯、可靠的推理引擎,可以支持部署架構(gòu)中的推理需求。
在數(shù)據(jù)科學家和開發(fā)人員定義了他們的推理解決方案的體系結(jié)構(gòu)之后,他們通過確定他們的優(yōu)先級,然后使用TensorRT從保存的網(wǎng)絡中構(gòu)建一個推理引擎。根據(jù)使用的培訓框架和網(wǎng)絡體系結(jié)構(gòu),有許多方法可以實現(xiàn)這一點。通常,這意味著您需要使用ONNX解析器(參見圖3左側(cè))、Caffe解析器或UFF解析器將保存的神經(jīng)網(wǎng)絡從保存的格式解析為TensorRT。
- 解析網(wǎng)絡后,考慮優(yōu)化選項——批處理大小、工作區(qū)大小、混合精度和動態(tài)形狀的邊界這些選項被選擇并指定為TensorRT構(gòu)建步驟的一部分,在該步驟中,您可以基于網(wǎng)絡構(gòu)建優(yōu)化的推理機。本指南的后續(xù)部分將提供有關(guān)工作流這一部分的詳細說明和大量示例,將模型解析為TensorRT并選擇優(yōu)化參數(shù)(參見圖3)。
-
在使用TensorRT創(chuàng)建了一個推理引擎之后,您需要驗證它是否再現(xiàn)了在訓練過程中測量到的模型結(jié)果。如果您選擇了FP32或FP16,它應該與結(jié)果非常接近。如果您選擇了INT8,那么在訓練過程中獲得的準確度與推理精度之間可能會有一個小差距。
-
以序列化格式寫出推理引擎。這也稱為計劃文件。
Phase 3: Deploying A Solution
TensorRT庫將鏈接到部署應用程序,該應用程序?qū)⒃谛枰评斫Y(jié)果時調(diào)用庫。為了初始化推理機,應用程序首先將模型從計劃文件反序列化到推理機中。
TensorRT通常是異步使用的,因此,當輸入數(shù)據(jù)到達時,程序?qū)⒄{(diào)用一個包含輸入緩沖區(qū)和TensorRT應將結(jié)果放入其中的緩沖區(qū)的排隊函數(shù)。
1.3. How Does TensorRT Work?
為了優(yōu)化推理模型,TensorRT獲取網(wǎng)絡定義,執(zhí)行包括特定于平臺的優(yōu)化在內(nèi)的優(yōu)化,并生成推理引擎。這個過程被稱為構(gòu)建階段。構(gòu)建階段可能需要相當長的時間,尤其是在嵌入式平臺上運行時。因此,一個典型的應用程序?qū)?gòu)建一個引擎,然后將其序列化為一個計劃文件供以后使用。
注意:生成的計劃文件不能跨平臺或TensorRT版本移植。計劃是特定的確切的GPU模型,他們是建立在(除了平臺和TensorRT版本),必須重新針對特定的GPU,以防你想在不同的GPU上運行它們。
構(gòu)建階段對層圖執(zhí)行以下優(yōu)化:
· Elimination of layers whose outputs are not used
· Elimination of operations which are equivalent to no-op
· The fusion of convolution, bias and ReLU operations
· Aggregation of operations with sufficiently similar parameters and the same source tensor
(for example, the 1x1 convolutions in GoogleNet v5’s inception module)
· Merging of concatenation layers by directing layer outputs to the correct eventual destination.
如果需要,生成器還可以修改權(quán)重的精度。當以8位整數(shù)精度生成網(wǎng)絡時,它使用一個稱為校準的過程來確定中間激活的動態(tài)范圍,從而確定量化的適當比例因子。
此外,構(gòu)建階段還對虛擬數(shù)據(jù)運行層,以從其內(nèi)核目錄中選擇最快的,并在適當?shù)那闆r下執(zhí)行權(quán)重預格式化和內(nèi)存優(yōu)化。
For more information, see Working With Mixed
Precision.
1.4. What Capabilities Does TensorRT Provide?
TensorRT使開發(fā)人員能夠?qū)搿⑿省⑸珊筒渴饍?yōu)化的網(wǎng)絡。網(wǎng)絡可以直接從Caffe導入,也可以通過UFF或ONNX格式從其他框架導入。它們也可以通過實例化各個層并直接設置參數(shù)和權(quán)重來以編程方式創(chuàng)建。
用戶還可以使用插件接口通過TensorRT運行自定義層。GraphSurgeon實用程序提供了將TensorFlow節(jié)點映射到TensorRT中的自定義層的能力,從而可以使用TensorRT對許多TensorFlow網(wǎng)絡進行推理。
TensorRT在所有支持的平臺上提供C++實現(xiàn),以及在x86, aarch64, and ppc64le上實現(xiàn)Python。
TensorRT核心庫中的關(guān)鍵接口包括:
網(wǎng)絡定義
網(wǎng)絡定義接口為應用程序提供指定網(wǎng)絡定義的方法。可以指定輸入和輸出張量,可以添加層,并且有一個用于配置每個支持層類型的接口。以及層類型,如卷積層和遞歸層,以及插件層類型允許應用程序?qū)崿F(xiàn)TensorRT本機不支持的功能。有關(guān)網(wǎng)絡定義的詳細信息,請參閱網(wǎng)絡定義API。
優(yōu)化配置文件
優(yōu)化配置文件指定對動態(tài)尺寸的約束。有關(guān)詳細信息,請參閱優(yōu)化配置文件API和使用動態(tài)形狀部分。
生成器配置
生成器配置界面指定創(chuàng)建引擎的詳細信息。它允許應用程序指定優(yōu)化配置文件、最大工作空間大小、可接受的最低精度水平、自動調(diào)整的定時迭代計數(shù)以及量化網(wǎng)絡以8位精度運行的接口。有關(guān)更多信息,請參閱構(gòu)建器配置API。
Builder
生成器接口允許從網(wǎng)絡定義和生成器配置創(chuàng)建優(yōu)化的引擎。有關(guān)詳細信息,請參閱構(gòu)建器API。
Engine
引擎接口允許應用程序執(zhí)行推理。它支持同步和異步執(zhí)行、分析、枚舉和查詢引擎輸入和輸出的綁定。一個引擎可以有多個執(zhí)行上下文,允許使用一組經(jīng)過訓練的參數(shù)同時執(zhí)行多個批處理。有關(guān)引擎的更多信息,請參閱執(zhí)行API。
TensorRT提供解析器,用于導入經(jīng)過訓練的網(wǎng)絡以創(chuàng)建網(wǎng)絡定義:
Caffe解析器
該解析器可用于解析在BVLC Caffe或NVCaffe 0.16中創(chuàng)建的Caffe網(wǎng)絡。它還提供了為自定義層注冊插件工廠的功能。有關(guān)C++ CAFE解析器的更多細節(jié),請參見NvCaffeParser或Python CalpE解析器。
UFF解析器
這個解析器可以用來解析UFF格式的網(wǎng)絡。它還提供注冊插件工廠和為自定義層傳遞字段屬性的功能。有關(guān)C++ UFF解析器的更多細節(jié),請參見NvUffParser或Python UFF解析器。
ONNX解析器
這個解析器可以用來解析ONNX模型。有關(guān)C++ ONNX解析器的更多細節(jié),請參見NvONNXParser或Python ONX解析器。
注意:此外,一些TensorRT Caffe和ONNX解析器和插件可以在GitHub上找到。
1.5. How Do I Get TensorRT?
For step-by-step instructions on how to install TensorRT, see the TensorRT Installation Guide.
1.6. TensorRT Deprecation Policy
Deprecision是一種預先警告功能將消失,這樣您就有時間用另一種方法更新代碼。從Tensorrt8.0開始,n.x版中不推薦使用的特性將在主發(fā)行版(n+2)中刪除。例如,TensorRT 8.0將忽略TensorRT 6.0中不推薦使用的功能,其中一些功能早在TensorRT 4.0就已經(jīng)棄用了。TensorRT 9.0將省略TensorRT 7.x中不推薦使用的功能。
總結(jié)
以上是生活随笔為你收集整理的TensorRT 7.2.1 开发概要(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorRT 7.2.1 开发概要(
- 下一篇: NVIDIA® TensorRT™ su