linux-MySQL安裝_解除安裝
英偉達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});
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/bazel−BAZEL_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時,這些版本的庫在
BAZELVERSION−dist.zipbash./compile.sh需要先在系統上安裝CUDA,LibTorch會自動被bazel提起,然後有兩個選擇。1.使用cuDNN和TensorRTtarball發行版進行構建推薦這樣做是為了構建TRTorch,並確保任何錯誤不是由版本問題引起的確保在運行TRTorch時,這些版本的庫在LD_LIBRARY_PATH的檔案中具有優先權
- 需要從NVIDIA網站下載TensorRT和cuDNN的壓縮包。
o https://developer.nvidia.com/cudnn
o https://developer.nvidia.com/tensorrt - 將這些檔案放在目錄中(third_party/dist_dir/[x86_64-linux-gnu | aarch64-linux-gnu]為此目的而存在目錄)
- 編譯使用:
bazel build // :: libtrtorch --compilation_mode opt --distdir third_party / dist_dir / [x86_64-linux-gnu | aarch64-linux-gnu]
2.使用本地安裝的cuDNN和TensorRT進行構建
如果發現錯誤並使用此方法進行編譯,請在問題中進行披露(ldd轉儲也可以) - 開始編譯之前,請在系統上安裝TensorRT,CUDA和cuDNN。
- 在WORKSPACE評論中
-
Downloaded distributions to use with --distdir
- http_archive(
-
name = "cudnn",
-
urls = ["<URL>",],
-
build_file = "@//third_party/cudnn/archive:BUILD",
-
sha256 = "<TAR SHA256>",
-
strip_prefix = "cuda"
- )
- http_archive(
-
name = "tensorrt",
-
urls = ["<URL>",],
-
build_file = "@//third_party/tensorrt/archive:BUILD",
-
sha256 = "<TAR SHA256>",
-
strip_prefix = "TensorRT-<VERSION>"
- )
和不加評論
#本地安裝的依賴項
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>)<input−size>編譯Python包要為本地計算機編譯python軟件包,只需python3setup.pyinstall在//py目錄中運行即可。要為不同的python版本構建wheel文件,請先構建Dockerfile,//py然後運行以下命令dockerrun−it−v(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結構