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. 缓冲区溢出分析第10课:Winamp缓冲区溢出研究

    前言 Winamp是一款非常经典的音乐播放软件,它于上世纪九十年代后期问世.与现在音乐播放软件行业百家争鸣的情况不同,当时可以说Winamp就是听音乐的唯一选择了,相信那个时代的电脑玩家是深有体会的. ...

  2. Elasticsearch exception [type=mapper_parsing_exception, reason=No type specified for field [X]

    可能原因是实体类属性没有指定映射类型 创建mapping时需要指定field的type,如果不指定则报错 错误 //这是一个类中的字段 @Field(store = false) private St ...

  3. idea设置js为ES6

  4. 1、requests基础

    一.升级pip版本的命令 : python -m pip install --upgrade pip 二.requests安装  windows系统系cmd运行 pip install request ...

  5. PTA 第三章 栈与队列

    一.判断题 1.若一个栈的输入序列为1,2,3,--,N,输出序列的第一个元素为i,则第j个输出的元素是j-i-1    (×)解析:应该是不确定的,不能保证数字出栈后不会再入栈 2.所谓" ...

  6. buaaoo_fourth_assignment

    你轻轻地走了 一.架构设计 (1)第一次作业 类图 复杂度分析 如上图是本单元第一次作业的架构设计,由于本人最开始未发现可以直接继承官方的类,所以自己将所用到的各种type都重新建了类,于是这就导致了 ...

  7. Mac OSX系统homebrew update Fetching failed问题解决方案

    1. brew update error (i) 问题出现及现象描述 昨天换了台电脑,有些软件需要重新安装或更新一下,遇到了下面的问题 cv@xys-MacBook-Pro ~ % brew upda ...

  8. 在Linux系统中部署NodeJS项目

    在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...

  9. Springboot项目之阿里云OSS快速入门

    阿里云oss 阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全.低成本.高可靠的云存储服务.您可以通过本文档提供的简单的REST接口,在任何 ...

  10. golang:正则表达式总结

    正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具.虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活.按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符 ...