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