初见-TensorRT简介<转>

TensorRT是由NVIDIA开发的一款高性能神经网络推理引擎,专为生产环境中的深度学习应用程序部署而设计。支持图像分类、分割和目标检测等多种任务,能够优化已训练的神经网络以提高推理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   下面是TensorRT的介绍,也可以参考官方文档,更权威一些:https://developer.nvidia.com/tensorrt   

   关于TensorRT首先要清楚以下几点:

1. TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练;目前TensorRT3已经支持Caffe、Caffe2、TensorFlow、MxNet、Pytorch等主流深度学习库;

2. TensorRT底层针对NVIDIA显卡做了多方面的优化,不仅仅是量化,可以和 CUDA CODEC SDK 结合使用,也就是另一个开发包DeepStream;

3. TensorRT独立于深度学习框架,通过解析框架文件来实现,不需要额外安装DL库;

 
 
 NVIDIA TensorRT是一种高性能神经网络推理(Inference)引擎,用于在生产环境中部署深度学习应用程序,应用有图像分类、分割和目标检测等,可提供最大的推理吞吐量和效率。TensorRT是第一款可编程推理加速器,能加速现有和未来的网络架构。
TensorRT需要CUDA的支持。TensorRT包含一个为优化生产环境中部署的深度学习模型而创建的库,可获取经过训练的神经网络(通常使用32位或16位数据),并针对降低精度的INT8运算来优化这些网络。借助CUDA的可编程性,TensorRT将能够加速助推深度
神经网络日益多样化、复杂的增长趋势。通过TensorRT的大幅度加速,服务提供商能够以经济实惠的成本部署这些计算密集型人工智能工作负载。

    已有来自各行各业的公司开始采用NVIDIA推理平台,借助此从数据中获得全新洞察,并为企业和消费者部署智能服务。

    TensorRT由英伟达(NVIDIA)发布,目前包括TensorRT1、TensorRT 2、TensorRT 3,是深度学习软件包,支持FP16特性。TensorRT支持使用Caffe的模型。TensorRT相对简单易用,在深度学习算法推理阶段能将GPU的计算能力更大程度释放出来。
TensorRT在不断的改进过程中,在保证软件精度的同时,不断提高速度。TensorRT针对运行时性能自动优化训练过的神经网络。

    TensorRT是一个C++库。TensorRT只能用来做Inference(推理),不能用来进行train。

    TensorRT基本处理过程:(1)、caffe model转化GIE的model,或者从磁盘或者网络加载GIE可用的model;(2)、运行GIE引擎(数据提前copy到GPU中);(3)、提取结果。

    转化GIE model两种方式:(1)、caffeToGIEModel;(2)、参考sampleMNIST API自己构建GIE model.

    用深度神经网络解决监督机器学习问题包含两个步骤:第一步是使用GPU对海量标签数据进行深度神经网络训练,训练时需要迭代的通过网络进行前向传播和反向传播。最终会生成训练好的model文件。第二步是推理(Inference)即使用训练好的模型对新
数据做出预测,仅需通过网络进行前向传播。TensorRT是一款高性能的推理引擎,旨在为常见的深度学习应用如图像分类、分割、目标检测等提供最大的推理吞吐量和效率。针对运行时性能,TensorRT会优化已训练的神经网络。

    使用TensorRT包含两个阶段:构建(build)和部署(deployment)。在构建阶段,TensorRT对网络配置进行优化,并生成一个优化了的plan用于计算深度神经网络的前向传播。这个plan是一个优化了的目标代码,可以序列化存储在内存或磁盘上。
部署阶段通常采用长时间运行的服务或用户应用程序的形式,该服务或用户应用程序接受批量输入数据,通过对输入数据执行plan来执行推理,并返回批量输出数据。使用TensorRT,你无需在部署硬件上安装并运行深度学习框架。

    TensorRT构建阶段:TensorRT运行时需要三个文件来部署一个分类神经网络:一个网络体系结构文件(deploy.prototxt),已训练的权值(net.caffemodel)和一个标签文件为每个输出类提供一个名称。另外,你必须定义batch size和输出层。

    TensorRT对神经网络图(neural network graph)进行了几个重要的转换和优化:消除未使用的输出的层以避免不必要的计算;在可能的情况下,convolution、bias和ReLU层被融合以形成单个层,包括垂直层融合和水平层融合。
在TensorRT解析器读入已训练的网络和配置文件后,TensorRT在构建阶段对API用户透明地执行其转换。

    在构建阶段,TensorRT优化网络,在部署阶段,TensorRT以最小化延迟和最大化吞吐量运行优化了的网络。

    TensorRT 2.1关键特性:(1)、支持自定义层;(2)、INT8支持以用于性能改进;(3)、提供递归神经网络(LSTM(Long Short-Term Memory)、GRU(Gated Recurrent Unit))实现;(4)、”original” RNN层实现。

    2017年9月,NVIDIA发布了神经网络推理加速器TensorRT3,TensorRT 3是一款针对人工智能应用生产部署的高性能优化编译器和运行时引擎,用于在生产环境中部署深度学习程序。它能够快速优化、验证并部署经过训练的神经网络,
从而在超大型数据中心、嵌入式GPU或车用GPU平台上开展推理工作。它能够确保高度精确的INT8和FP16网络执行。

    TensorRT 3能支持Caffe2、Mxnet、Pytorch、TensorFlow等所有的深度学习框架,将TensorRT 3和NVIDIA的GPU结合起来,能在所有的框架中进行超快速和高效的推理传输,支持图像和语言识别、自然语言处理、可视化搜索和个性化推荐等AI服务。
借助该推理引擎可以大幅提升云端及包括机器人、无人驾驶汽车在内的终端设备的推理性能,并有效降低成本。
 
 

可从  https://developer.nvidia.com/nvidia-tensorrt-download 下载TensorRT 1.0和TensorRT2.1.

安装TensorRT 2.1要求:

(1)、操作系统仅支持Ubuntu14.04或Ubuntu 16.04,目前不支持Windows和Mac;

(2)、安装的CUDA要求是7.5或8.0;

(3)、有两种方法安装TensorRT2.1:通过deb包或者通过tar文件;

(4)、对于显卡为GTX 750和K1200的用户需要将CUDA升级到8.0。

TensorRT 2.1用户指南可以参考: http://docs.nvidia.com/deeplearning/sdk/tensorrt-user-guide/index.html  

以上部分内容翻译于: https://devblogs.nvidia.com/parallelforall/deploying-deep-learning-nvidia-tensorrt/

GitHub: https://github.com/fengbingchun/CUDA_Test

 

 

<think>好的,我现在需要帮助用户解决在使用Querydsl的`join(ExpressionUtils.as(subQuery, subQueryPath))`时出现的“Cannot resolve method 'join(Expression<D>)'”错误。首先,我要理解这个错误的原因。 根据用户提供的引用内容,特别是引用[1]提到的`java.lang.NoSuchMethodError`,可能是因为依赖版本不一致导致的。比如,不同版本的Querydsl可能在方法签名上有差异,导致编译器找不到正确的`join`方法。此外,引用[3]提到pom.xml依赖无法解析的问题,这也提示可能需要检查依赖配置是否正确。 接下来,我需要考虑`ExpressionUtils.as`的用法是否正确。`ExpressionUtils.as(subQuery, subQueryPath)`应该将子查询换为一个路径表达式,这样在join时才能正确使用。但如果subQueryPath的类型不匹配,或者使用的Querydsl版本不支持这种用法,就会出现方法解析失败的问题。 然后,用户提到的错误信息是“Cannot resolve method 'join'”,这说明IDE无法识别传入的参数类型。可能的原因是`ExpressionUtils.as`返回的类型与`join`方法期望的参数类型不一致。例如,某些版本的Querydsl的`join`方法可能不接受`Expression`类型,或者需要特定的路径类型。 另外,引用[2]提到Groovy在处理重载方法时的问题,虽然用户这里可能不是Groovy的问题,但也需要注意是否传入了null值或其他不明确的参数导致类型推断失败。 接下来,我需要思考解决方案。首先建议用户检查依赖版本,确保所有Querydsl模块(如querydsl-jpa和querydsl-core)版本一致,并且与其他库(如Hibernate)兼容。然后,验证`ExpressionUtils.as`的使用是否正确,可能需要显式指定类型参数。此外,检查子查询的路径类型是否正确,或者尝试使用不同的join方法重载。 最后,用户可能需要参考官方文档或社区讨论,确认正确的API使用方法,或者在无法解决时提供更多上下文以便进一步排查。</think>在使用QueryDSL的`join(ExpressionUtils.as(subQuery, subQueryPath))`时出现`Cannot resolve method 'join'`错误,通常与以下原因相关: --- ### 1. **依赖版本冲突** QueryDSL不同模块的版本不兼容可能导致API方法签名变更。例如: - **`querydsl-jpa`与`querydsl-core`版本不一致**,导致`JPQLSerializer`类缺少`getConstantToAllLabels()`方法[^1] - **Hibernate/JPA版本与QueryDSL不匹配**,如Hibernate 6.x需使用`querydsl-jpa` 5.x版本 **解决方法**: - 在`pom.xml`中统一所有QueryDSL依赖版本: ```xml <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>5.0.0</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-core</artifactId> <version>5.0.0</version> </dependency> ``` - 通过`mvn dependency:tree`检查冲突,使用`<exclusion>`移除旧版本依赖[^3] --- ### 2. **类型换问题** `ExpressionUtils.as()`需要明确类型参数,否则编译器无法推断返回类型: ```java // 错误示例(缺少类型参数) ExpressionUtils.as(subQuery, subQueryPath); // 正确用法(显式指定类型) ExpressionUtils.<Path<Entity>>as(subQuery, subQueryPath) ``` --- ### 3. **Join方法参数不匹配** QueryDSL的`join()`方法对参数类型有严格要求: - **子查询需包装为路径表达式**:通过`ExpressionUtils.as()`将子查询换为`Path`类型 - **路径表达式类型需匹配**:`subQueryPath`必须与实体类属性对应的`Q-class`路径一致 **修复示例**: ```java QEntity subQueryPath = QEntity.entity; JPAQuery<?> query = new JPAQuery<>(entityManager); query.from(mainEntity) .join(ExpressionUtils.as( subQuery, subQueryPath.subProperty // 确保路径类型正确 )); ``` --- ### 4. **IDE缓存问题** 如果确认代码和依赖无误,尝试: - **清理IDE缓存**:File > Invalidate Caches - **重新生成Q-classes**:运行`mvn clean compile` --- ### 附:QueryDSL Join操作规范 | 场景 | 正确API用法 | 常见错误 | |-----------------------|-------------------------------------|-------------------------------| | 关联实体 | `.join(entity.prop)` | 未生成Q-class导致路径错误 | | 子查询作为关联对象 | `.join(ExpressionUtils.as(subQuery, alias))` | 缺少类型参数或路径类型不匹配 | | 左外连接 | `.leftJoin(entity.prop)` | 混淆`join`与`innerJoin`语义 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值