1. 程式人生 > 程式設計 >解決golang json解析出現值為空的問題

解決golang json解析出現值為空的問題

技術標籤:智慧推理視訊推理GPU

英偉達TRTTorch
PyTorch JIT的提前(AOT)編譯Ahead of Time (AOT) compiling for PyTorch JIT
TRTorch是PyTorch / TorchScript的編譯器,通過NVIDIA針對NVIDIA GPU的TensorRT深度學習優化器和執行時runtime。與PyTorch的即時(JIT)編譯器不同,TRTorch是一種提前(AOT)編譯器,這意味著在部署TorchScript程式碼之前,需要執行顯式的編譯步驟,以TensorRT引擎為目標,將標準的TorchScript程式轉換為模組。TRTorch充當PyTorch擴充套件,編譯與JIT執行時runtime無縫整合的模組。使用優化圖進行編譯後,應該感覺與執行TorchScript模組沒有什麼不同。還可以在編譯時訪問TensorRT的配置套件,因此可以為模組指定運算元精度(FP32 / FP16 / INT8)和其他設定。

用法示例
C ++
#include “torch/script.h”
#include “trtorch/trtorch.h”


auto compile_settings = trtorch::CompileSpec(dims);
// FP16 execution
compile_settings.op_precision = torch::kFloat;
// Compile module
auto trt_mod = trtorch::CompileGraph(ts_mod, compile_settings);
// Run like normal
auto results = trt_mod.forward({in_tensor});

// Save module for later
trt_mod.save(“trt_torchscript_module.ts”);

python
import trtorch


compile_settings = {
“input_shapes”: [
{
“min”: [1, 3, 224, 224],
“opt”: [1, 3, 512, 512],
“max”: [1, 3, 1024, 1024]
}, # For static size [1, 3, 224, 224]
],
“op_precision”: torch.half # Run with FP16
}

trt_ts_module = trtorch.compile(torch_script_module, compile_settings)

input_data = input_data.half()
result = trt_ts_module(input_data)
torch.jit.save(trt_ts_module, “trt_torchscript_module.ts”)
以較低的精度執行時runtime的注意事項:
• 使用compile_spec.op_precision設定精度
• 編譯之前,模組應使用FP32(FP16可支援半張量模型)
• 在FP16中,僅應將輸入張量轉換為FP16,其他精度使用FP32
平臺支援
在這裡插入圖片描述

依存關係
這些是以下用於驗證測試用例的依賴項。TRTorch可以與其他版本一起使用,但不能保證測試能夠通過。
• Bazel 3.7.0
• Libtorch 1.7.1(使用CUDA 11.0構建)
• CUDA 11.0
• cuDNN 8
• TensorRT 7.2.1.6
預構建的二進位制檔案和Wheel檔案
釋出:https : //github.com/NVIDIA/TRTorch/releases
編譯TRTorch
安裝依賴項
0.安裝Install Bazel
如果沒有安裝bazel,最簡單的方法是使用選擇https://github.com/bazelbuild/bazelisk的方法來安裝bazelisk
否則,可以按照以下說明安裝二進位制檔案https://docs.bazel.build/versions/master/install.html
最後,如果需要從原始碼進行編譯(例如aarch64,直到bazel為該體系結構分發二進位制檔案),則可以使用以下說明
export BAZEL_VERSION=
mkdir bazel
cd bazel
curl -fSsL -O https://github.com/bazelbuild/bazel/releases/download/ B A Z E L V E R S I O N / b a z e l − BAZEL_VERSION/bazel- BAZELVERSION/bazelBAZEL_VERSION-dist.zip
unzip bazel- B A Z E L V E R S I O N − d i s t . z i p b a s h . / c o m p i l e . s h 需 要 先 在 系 統 上 安 裝 C U D A , L i b T o r c h 會 自 動 被 b a z e l 提 起 , 然 後 有 兩 個 選 擇 。 1. 使 用 c u D N N 和 T e n s o r R T t a r b a l l 發 行 版 進 行 構 建 推 薦 這 樣 做 是 為 了 構 建 T R T o r c h , 並 確 保 任 何 錯 誤 不 是 由 版 本 問 題 引 起 的 確 保 在 運 行 T R T o r c h 時 , 這 些 版 本 的 庫 在 BAZEL_VERSION-dist.zip bash ./compile.sh 需要先在系統上安裝CUDA,LibTorch會自動被bazel提起,然後有兩個選擇。 1.使用cuDNN和TensorRT tarball發行版進行構建 推薦這樣做是為了構建TRTorch,並確保任何錯誤不是由版本問題引起的 確保在執行TRTorch時,這些版本的庫在 BAZELVERSIONdist.zipbash./compile.shCUDALibTorchbazel1.使cuDNNTensorRTtarballTRTorchTRTorchLD_LIBRARY_PATH的檔案中具有優先權

  1. 需要從NVIDIA網站下載TensorRT和cuDNN的壓縮包。
    o https://developer.nvidia.com/cudnn
    o https://developer.nvidia.com/tensorrt
  2. 將這些檔案放在目錄中(third_party/dist_dir/[x86_64-linux-gnu | aarch64-linux-gnu]為此目的而存在目錄)
  3. 編譯使用:
    bazel build // :: libtrtorch --compilation_mode opt --distdir third_party / dist_dir / [x86_64-linux-gnu | aarch64-linux-gnu]
    2.使用本地安裝的cuDNN和TensorRT進行構建
    如果發現錯誤並使用此方法進行編譯,請在問題中進行披露(ldd轉儲也可以)
  4. 開始編譯之前,請在系統上安裝TensorRT,CUDA和cuDNN。
  5. 在WORKSPACE評論中
  6. Downloaded distributions to use with --distdir

  7. http_archive(
  8.  name = "cudnn",
    
  9.  urls = ["<URL>",],
    
  10.  build_file = "@//third_party/cudnn/archive:BUILD",
    
  11.  sha256 = "<TAR SHA256>",
    
  12. strip_prefix = "cuda"
    
  13. )
  14. http_archive(
  15. name = "tensorrt",
    
  16. urls = ["<URL>",],
    
  17. build_file = "@//third_party/tensorrt/archive:BUILD",
    
  18. sha256 = "<TAR SHA256>",
    
  19. strip_prefix = "TensorRT-<VERSION>"
    
  20. )
    和不加評論
    #本地安裝的依賴項
    new_local_repository(
    name = “ cudnn”,
    path = “ / usr /”,
    build_file = “ @ // third_party / cudnn / local:BUILD”

new_local_repository(
name = “ tensorrt”,
path = “ / usr /”,
build_file = “ @ // third_party / tensorrt / local:BUILD”

3. 編譯使用:
bazel build // :: libtrtorch --compilation_mode選擇
除錯版本
bazel build // :: libtrtorch --compilation_mode = dbg
NVIDIA Jetson AGX上的本機編譯
bazel build // :: libtrtorch --distdir third_party / dist_dir / aarch64-linux-gnu
注意:有關先決條件,請參閱安裝說明
然後可以在bazel-bin中找到包含包含檔案和庫的tarball
在JIT圖上執行TRTorch
確保將LibTorch新增到的LD_LIBRARY_PATH
export LD_LIBRARY_PATH= L D L I B R A R Y P A T H : LD_LIBRARY_PATH: LDLIBRARYPATH:(pwd)/bazel-TRTorch/external/libtorch/lib
bazel run //cpp/trtorchexec – ( r e a l p a t h < P A T H T O G R A P H > ) < i n p u t − s i z e > 編 譯 P y t h o n 包 要 為 本 地 計 算 機 編 譯 p y t h o n 軟 件 包 , 只 需 p y t h o n 3 s e t u p . p y i n s t a l l 在 / / p y 目 錄 中 運 行 即 可 。 要 為 不 同 的 p y t h o n 版 本 構 建 w h e e l 文 件 , 請 先 構 建 D o c k e r f i l e , / / p y 然 後 運 行 以 下 命 令 d o c k e r r u n − i t − v (realpath <PATH TO GRAPH>) <input-size> 編譯Python包 要為本地計算機編譯python軟體包,只需python3 setup.py install在//py目錄中執行即可。要為不同的python版本構建wheel檔案,請先構建Dockerfile,//py然後執行以下命令 docker run -it -v (realpath<PATHTOGRAPH>)<inputsize>Pythonpythonpython3setup.pyinstall//pypythonwheelDockerfile//pydockerrunitv(pwd)/…:/workspace/TRTorch build_trtorch_wheel /bin/bash /workspace/TRTorch/py/build_whl.sh
Python編譯期望從上面使用基於tarball的編譯策略。
如何新增對新運算元的支援…
在TRTorch?
支援新運算元有兩種主要方法。可以從頭開始為op編寫一個轉換器並將其註冊到NodeConverterRegistry中,或者如果可以將op對映到一組已經具有轉換器的op上,則可以編寫圖形重寫過程,將新的op替換為等效的子圖支援的運算元。首選使用圖形重寫,因為這樣就不需要維護大型的op轉換器庫。還要檢視問題中的各種運算元支援跟蹤器,以獲取有關各種運算元的支援狀態的資訊。
如何申請
Node Converter Registry不在頂級API中公開,而是在tarball附帶的內部header中公開。
可以使用NodeConverterRegistry應用程式內部為運算元註冊一個轉換器。
Structure of the repo結構
在這裡插入圖片描述