英伟达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=<VERSION>

mkdir bazel

cd bazel

curl -fSsL -O https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-dist.zip

unzip bazel-$BAZEL_VERSION-dist.zip

bash ./compile.sh

需要先在系统上安装CUDA,LibTorch会自动被bazel提起,然后有两个选择。

1.使用cuDNN和TensorRT tarball发行版进行构建

推荐这样做是为了构建TRTorch,并确保任何错误不是由版本问题引起的

确保在运行TRTorch时,这些版本的库在$LD_LIBRARY_PATH的文件中具有优先权

  1. 需要从NVIDIA网站下载TensorRT和cuDNN的压缩包。
  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转储也可以)

  1. 开始编译之前,请在系统上安装TensorRT,CUDA和cuDNN。
  2. WORKSPACE评论中
  1. # Downloaded distributions to use with --distdir
  2. http_archive(
  3. name = "cudnn",
  4. urls = ["<URL>",],
  5. build_file = "@//third_party/cudnn/archive:BUILD",
  6. sha256 = "<TAR SHA256>",
  7. 10.     strip_prefix = "cuda"

11. )

  1. 12.

13. http_archive(

  1. 14.     name = "tensorrt",
  2. 15.     urls = ["<URL>",],
  3. 16.
  4. 17.     build_file = "@//third_party/tensorrt/archive:BUILD",
  5. 18.     sha256 = "<TAR SHA256>",
  6. 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” 
  1. 编译使用:
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=$LD_LIBRARY_PATH:$(pwd)/bazel-TRTorch/external/libtorch/lib

bazel run //cpp/trtorchexec -- $(realpath <PATH TO GRAPH>) <input-size>

编译Python包

要为本地计算机编译python软件包,只需python3 setup.py install//py目录中运行即可。要为不同的python版本构建wheel文件,请先构建Dockerfile,//py然后运行以下命令

docker run -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结构

英伟达TRTTorch的更多相关文章

  1. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )

    前言 本文讲解如何在VS 2010开发平台中搭建CUDA开发环境. 当前配置: 系统:WIN7 64位 开发平台:VS 2010 显卡:英伟达G卡 CUDA版本:6.0 若配置不同,请谨慎参考本文. ...

  2. 英伟达CUVID硬解,并通过FFmpeg读取文件

    虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...

  3. Ubuntu18.04安装英伟达显卡驱动

    前几天买了一张RTX2060显卡,想自学一下人工智能,跑一些图形计算,安装Ubuntu18.04后发现英伟达显卡驱动安装还是有点小麻烦,所以这里记录一下安装过程,以供参考: 1.卸载系统里低版本的英伟 ...

  4. 不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题

    2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了一场深度学习革命.深度学习之所以如此受关注,是因为 ...

  5. NCCL(Nvidia Collective multi-GPU Communication Library) Nvidia英伟达的Multi-GPU多卡通信框架NCCL 学习;PCIe 速率调研;

    为了了解,上来先看几篇中文博客进行简单了解: 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?(较为优秀的文章) 使用NCCL进行NVIDIA GPU卡之间的通信(GPU卡通信模式 ...

  6. 【视频开发】【CUDA开发】英伟达CUVID硬解,并通过FFmpeg读取文件

    虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...

  7. 玩深度学习选哪块英伟达 GPU?有性价比排名还不够!

    本文來源地址:https://www.leiphone.com/news/201705/uo3MgYrFxgdyTRGR.html 与“传统” AI 算法相比,深度学习(DL)的计算性能要求,可以说完 ...

  8. 【并行计算与CUDA开发】英伟达硬件加速编解码

    硬件加速 并行计算 OpenCL OpenCL API VS SDK 英伟达硬件编解码方案 基于 OpenCL 的 API 自己写一个编解码器 使用 SDK 中的编解码接口 使用编码器对于 OpenC ...

  9. 【并行计算-CUDA开发】英伟达硬件解码器分析

    这篇文章主要分析 NVCUVID 提供的解码器,里面提到的所有的源文件都可以在英伟达的 nvenc_sdk 中找到. 解码器的代码分析 SDK 中的 sample 文件夹下的 NvTranscoder ...

随机推荐

  1. 网络广告计费方式CPM、CPA、CPS、CPT、CPC及比较分析

    网络上的广告计费方式,主要有以下几种: 按展现付费(CPM).每展现一千次,收费多少. 按点击付费(CPC).每带来一个点击收多少钱. 按时间付费(CPT).每放一天或者几个小时,收费多少. 按效果付 ...

  2. Mysql 8.0安装

    1. 下载安装包至/usr/local目录下 下载地址:https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.16-el7-x86_64.tar.gz ...

  3. hdu2489-DFS+最小生成树

    题意:       给你n个点,和任意两点的距离,让你在这N个点中找到一个有m个点并且ratio最小的树.                         ratio = sum(edge) / su ...

  4. hdu1816 + POJ 2723开锁(二分+2sat)

    题意:      有m层门,我们在最外层,我们要一层一层的进,每一层上有两把锁,我们只要开启其中的一把们就会开,我们有n组钥匙,每组两把,我们只能用其中的一把,用完后第二把瞬间就会消失,问你最多能开到 ...

  5. hdu4370 比较抽象的最短路

    题意:       给你一个n*n的矩阵,然后让咱们构造另一个n*n的矩阵,构造的矩阵有如下要求, 1.X12+X13+...X1n=1. 2.X1n+X2n+...Xn-1n=1. 3.for ea ...

  6. LA3942字典树+递推

    题意:      给你一个字典,最多4000个单词,每个单词长度最多是100,然后给你一个串,问你这个子串可以被那些单词组合的组合数,比如字典里有4个单词a b ab cd,然后给你一个串abcd则a ...

  7. MySQL数据库及注入方法

    目录 MySQL数据库 mysql中比较常用的一些函数: 判断MySQL数据库是否存在SQL注入 MySQL数据库文件结构 MySQL数据库密码破解 MySQL UDF提权 MySQL数据库 MySQ ...

  8. 【dependencyManagement版本管理】dependencies.dependency.version is missing

    maven 的gav的v(版本问题) 报错dependencies.dependency.version is missing 出现的场景 一个项目中有多个模块 父模块中出现dependencies. ...

  9. Tensorflow Probability Distributions 简介

    摘要:Tensorflow Distributions提供了两类抽象:distributions和bijectors.distributions提供了一系列具备快速.数值稳定的采样.对数概率计算以及其 ...

  10. Consul 服务的注册和发现

    Consul 是Hashicorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.Consul是分布式的,高可用的,可横向扩展的. Consul 的主要特点有:    Service Disc ...