TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成

这个PR增加了对分区、编译和运行TensorRT BYOC目标的支持。

Building

有两个新的cmake标志:

USE_TENSORRT=ON/OFF:启用TENSORRT代码生成-这不需要TENSORRT库              USE_TENSORRT_GRAPH_RUNTIME=ON/OFF/"path/to/TensorRT":

启用TENSORRTruntime-这需要TENSORRT库。从deb包或JetPack在系统范围内安装TensorRT时,可以通过“ON”来检测,但是.tar.gz安装要求提供提取的TensorRT归档文件的路径。

Usage

编译目标应该是“cuda”,以确保将TensorRT函数的输入和输出参数放在GPU上。

# Compilation

from tvm.relay.op.contrib import tensorrt

mod = tensorrt.partition_for_tensorrt(mod, params)

with relay.build_config(opt_level=3):

graph, lib, params = relay.build(mod, target="cuda", params=params)

# Running inference is unchanged

mod = graph_runtime.create(graph, lib, ctx=tvm.gpu(0))

mod.run(...)

High level components

Partitioning

TensorRT的注释规则根据目标的TensorRT版本以及“批处理模式”而变化。这可以用trt_version进行配置,并使用use_implicit_batch分区的partition_for_tensorrt批处理参数。

如果TVM是针对TensorRT库构建的,则链接版本将用于分区。

Codegen

此实现使用codegen的JSONRuntime JSONSerializer基类将中继表达式序列化为json格式。

Runtime

runtime由tensorrt中的runtime模块类处理tensorrt_runtime.cc。在runtime,它首先使用TensorRTBuilder类(tensorrt_builder.cc)用于使用TensorRT API将json图转换为TensorRT INetworkDefinition。它使用tensorrt中的converterconverter classes算子tensorrt_ops.cc。然后,构建TensorRT引擎,此过程可能需要几分钟时间,因为TensorRT将在此时执行优化。引擎被缓存以备进一步的推理调用。

如果guards,runtime可以针对许多TensorRT版本进行编译。它适用于TensorRT 5、6和7。编译后的模型必须为TensorRT版本<=runtime使用的版本进行分区。编译后的模型可能需要更新的TensorRT版本的算子可用。

Problem

TensorRT有一些参数,比如max_workspace_size和use_implicit_batch,希望用户能够在分区_中为partition_for_tensorrt提供这些参数。这些参数需要传递给codegen并存储在序列化图中,直到运行时为止。使用“隐式”批处理也会影响分区规则。使用环境变量将这些从Python传递到C++中的代码生成。想知道有没有更好的方法来做这个?

我在python/tvm/relay/op/contrib/tensorrt.py中实现了一个名为prune_tensorrt_subgraphs()的转换/tensorrt.py. 这是在分区之后运行的,决定是保留子图还是将其返回到典型的TVM编译路径。之所以需要这样做,是因为有些子图可能是无效的——例如当输入具有不同的批处理大小时,或者为了优化目的,如果子图没有乘法累加。在C++中实现了一个通用版本,但使用全局注册表来允许每个代码对象定义自己的is_invalid_subgraph回调。将来,如果找到更好的方法来注册回调,可以切换到泛型版本。

需要在注释时介入目标tensorrt版本。把它放在一个全局变量中。

TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成的更多相关文章

  1. 宏碁宣布Liquid Jade智能机和Leap袖口

    据科技网站Android Community 4月29日覆盖,宏碁29公布的新智能机Liquid Jade而随着智能手镯部署Liquid Leap.尽管宏碁已经宣布了一项新的外部基本信息.但价格格和商 ...

  2. Go -- FileManage 自建云盘

    一.介绍 Caddy,用Go写的一款相当优秀的Web服务器软件,它有不少很有特色的功能,国内目前来说用的不多,不过也逐渐有越来越多的人知道了,它有个特色的插件功能,其中一款插件是FileManager ...

  3. 中小企业自建云WAF有多难?只需20分钟!而且:全程免费!

    以往,运营型的web为了安全目的,才使用WAF进行安全防护. 而现如今,WAF对企业web来说,已然成了刚需.为何?等保.网络安全法的硬性要求! 当然,这样要求显然是对的:没有网络安全,就没有国家安全 ...

  4. 宏碁发布两款全A平台笔记本:良心价

    导读 8月3日消息,在全球数码互动娱乐盛会ChinaJoy上,宏碁推出全新两款全A平台笔记本——暗影骑士4 锐龙版酷冷游戏本和蜂鸟Swift3锐龙版金属轻薄本. 此次发布的宏碁暗影骑士4 锐龙版笔记本 ...

  5. JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理

    文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结   JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语 ...

  6. 码云git使用一(上传本地项目到码云git服务器上)

    主要讲下如果将项目部署到码云git服务器上,然后使用studio导入git项目,修改本地代码后,并同步到码云git上面. 首先:我们在码云上注册账号并登陆.官网(https://git.oschina ...

  7. 一个空行引起的阿里云负载均衡上部署https证书的问题

    今天在阿里云上购买了WoSign的https证书,在证书签发后,在控制台下载证书文件,一共有2个文件,一个是.key文件(私钥文件),一个是.pem文件(证书文件). 然后在阿里云负载均衡“证书管理” ...

  8. 视频云SDK iOS持续集成项目实践

    1. 前言 2016年, 我们维护的 iOS推流播放融合SDK KSYLive_iOS 在github上发布了40多个版本, 平均两周发布一个新版本, 经历了最初痛苦的全手动版本构建和维护, 到后来慢 ...

  9. Thinkphp整合阿里云OSS图片上传实例

    Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...

随机推荐

  1. Python实现Paramiko的二次封装

    Paramiko是一个用于执行SSH命令的Python第三方库,使用该库可实现自动化运维的所有任务,如下是一些常用代码的封装方式,多数代码为半成品,只是敲代码时的备份副本防止丢失,仅供参考,目前本人巡 ...

  2. hdu4847 水题

    题意:       你看了上面很长很长的一片英语课文之后,发现根本不用看,直接看输入输出就行了,就是给你一坨字符串,然后问你里面有几个doge(不区分大小写). 思路:       没啥说的,直接写吧 ...

  3. <JVM从入门到精通>导航

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  4. JVM虚拟机-了解Java堆中对象分配、布局和访问的全过程

    目录 前言 对象的创建 类加载检查 分配内存 内存空间分配方式 指针碰撞 空闲列表 并发时的内存分配 同步处理:CAS 本地线程分配缓冲:TLAB 初始化零值 设置对象头 执行 init 方法 对象的 ...

  5. 基于蒙特卡洛树搜索(MCTS)的多维可加性指标的异常根因定位

    摘要:本文是我在从事AIOps研发工作中做的基于MCTS的多维可加性指标的异常根因定位方案,方案基于清华大学AIOPs实验室提出的Hotspot算法,在此基础上做了适当的修改. 1        概述 ...

  6. Linux 面试总结

    1. 统计指定目录的文件个数: find / -type f | wc –l 2.Linux 下常用目录 /boot:这个目录是用来存放与系统启动相关的文件/root:root用户的家目录/bin:存 ...

  7. 无连接运输:UDP

    多路复用和解复用与校验和是UDP唯一能做的事,运输层的协议必须做点什么,什么都没有就不需要这一层了. 为什么要使用UDP 既然有了可靠传输的TCP,为什么还要在udp之上来构件应用呢? 有效载荷大,T ...

  8. vmware安装ubuntu ,一直处于end kernel panic - not syncing : corrupted stack end detected inside scheduler

    vmware安装ubuntu ,一直处于end kernel panic - not syncing : corrupted stack end detected inside scheduler y ...

  9. Linux_磁盘管理理论概述

    一.磁盘阵列 1.什么是磁盘阵列? 1️⃣:磁盘整列就是将多块独立的磁盘组合到一起,形成容量大的磁盘组. 2️⃣:将相同的数据存放到不多个的磁盘的不同位置 2.RAID0 1️⃣:RAID0是磁盘整列 ...

  10. [转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数

    [转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数 大话性能 · 2018年10月09日 · 最后由 大话性能 回复于 2018年10月09日 · ...