【jq小游戏源码】【gdb的源码路径】【主接线指标源码】tensorRT源码

时间:2024-11-23 11:19:58 编辑:好看的可视化网站编辑源码 来源:myucms2.2.3源码

1.PyTorch 源码分析(一):torch.nn.Module
2.TF-TRT使用环境搭建
3.Pytorch量化+部署
4.部署系列——神经网络INT8量化教程第一讲!源码
5.ONNX-Runtime一本通:综述&使用&源码分析(持续更新)
6.linux下tensorRT安装以及pycuda安装报错的源码解决

tensorRT源码

PyTorch 源码分析(一):torch.nn.Module

       nn.Module是PyTorch中最核心和基础的结构,它是源码操作符/损失函数的基类,同时也是源码组成各种网络结构的基类(实际上是由多个module组合而成的一个module)。

       在Python侧,源码2.1回调函数注册,源码jq小游戏源码2.2 module类定义中,源码有以下几个重点函数:

       重点函数一:将模型的源码参数移动到CUDA上,内部会遍历其子module。源码

       重点函数二:将模型的源码参数移动到CPU上,内部会遍历其子module。源码

       重点函数三:将模型的源码参数转化为fp或者fp等,内部会遍历其子module。源码

       重点函数四:forward函数调用。源码

       重点函数五:返回该net的源码所有layer。

       在类图中,PyTorch的算子都是module的子类,包括自定义算子和整网定义。

       在C++侧,3.1 module.to("cuda")详细分析中,本质是将module的parameter&buffer等tensor移动到CUDA上,最终调用的是tensor.to(cuda)。

       3.2 module.load/save逻辑中,PyTorch模型保存分为两种,一种是纯参数,一种是带模型结构(PyTorch中的模型结构,本质上是由module、sub-module构造的一个计算图)。

       parameter、buffer是通过key-value的形式来存储和检索的,key为module的.name,value为存储具体数据的tensor。

       InputArchive/OutputArchive的write和read逻辑。

       通过Module,PyTorch将op/loss/opt等串联起来,类似于一个计算图。基于PyTorch构建的ResNet等模型,是逐个算子进行计算的,tensor在CPU和GPU之间来回流动,而不是整个计算都在GPU上完成(即中间计算结果不出GPU)。实际上,在进行推理时,可以构建一个计算图,让整个计算图的计算都在GPU上完成,不知道是否可行(如果GPU上有一个CPU就可以完成这个操作,不知道tensorrt是gdb的源码路径否是这样的操作)。

TF-TRT使用环境搭建

       TF-TRT,即TensorFlow与TensorRT的集成,是NVIDIA为加速深度学习推理应用而设计的工具。它简化了TensorFlow用户在GPU上利用TensorRT进行模型推理的流程。本文主要介绍如何在服务器上搭建TF-TRT的使用环境和编写相关代码。

       首先,NVIDIA推荐的TF-TRT环境配置基于TensorRT 5.0RC,需要确保NVIDIA驱动程序版本.0以上,CUDA .0以及TensorRT。安装过程建议在Anaconda的虚拟环境中进行,从Tensorflow GitHub上下载1.版本源码,并通过bazel build工具生成pip安装包。在编译时,由于GCC 5.0可能与新版本兼容性问题,需添加特定编译选项。

       对于服务器上直接安装,你需按照官方教程安装CUDA、CUDNN、NVIDIA Driver和TensorRT。在Tensorflow的configure文件中,根据你的硬件配置进行相应的调整。然后,通过pip安装生成的.whl文件,安装时需要注意选择nvcc编译器,cudnn 7.3以上版本,以及兼容性的GCC编译选项。

       另一种方式是利用Docker容器,Tensorflow .容器需要nvidia driver +版本,并需要获取Nvidia GPU cloud的API密钥。安装完成后,你可以通过Docker拉取tensorflow:.-py3镜像,验证TensorRT与Tensorflow的集成是否成功。

       无论是直接安装还是容器化,都需注意选择合适的驱动和软件版本,以确保TF-TRT的稳定运行。安装过程中,还可以根据实际需求在container中安装其他软件,以满足个性化需求。

Pytorch量化+部署

       量化

       在Pytorch中,量化有三种主要方式:模型训练后的动态量化、模型训练后的静态量化以及模型训练中的量化(Quantization Aware Training,QAT)。

       部署

       部署主要分为两个方向:对于Nvidia GPU,可通过PyTorch → ONNX → TensorRT;对于Intel CPU,可选择PyTorch → ONNX → OpenVINO。主接线指标源码ONNX是一种用于表示深度学习模型的开放标准格式,可使模型在不同框架间进行转换。TensorRT是一个针对Nvidia GPU的高性能推理库,可与多种训练框架协同工作,优化网络推理性能。ONNX模型可通过torch.onnx.export()函数转换为ONNX模型,用于后续的推理和部署。TensorRT则提供两种方式用于ONNX模型的转换和推理,即使用trtexec工具或TensorRT的parser接口解析ONNX模型构建引擎。OpenVINO是英特尔提供的工具套件,支持CNN网络结构部署,兼容多种开源框架的模型。在OpenVINO中,ONNX模型需转换为.xml和.bin文件,用于后续的推理操作。安装OpenVINO需要下载并配置英特尔OpenVINO工具包,安装依赖库,设置环境变量等步骤。TensorRT的安装可选择直接下载源码或使用.deb文件安装,过程中可能遇到一些报错,需进行相应的解决,确保安装成功。

部署系列——神经网络INT8量化教程第一讲!

       神经网络量化已经成为广泛应用的技术,特别是INT8量化,它在处理大型模型和提高效率方面扮演着重要角色。2年前,作者通过NCNN和TVM在树莓派上部署简单的分类模型时,主要使用了PTQ量化方法。随着时间的推移,量化技术更加成熟,作者计划分享一系列教程,从基础到实践,重点关注TensorRT的量化方式,同时也会参考其他开源工具如Pytorch、NCNN、TVM和TFLITE。

       量化是将高精度模型转换为低精度计算,如FP转FP或INT8。虽然FP转换基本无损,但INT8量化更常见,因为它能更好地平衡精度和性能。INT8量化后的模型在保持大部分精度的同时,可以利用INT8的硬件优势,如NVIDIA的黄金图指标源码Tensor Cores。

       量化技术已经在生产环境中广泛应用,各大公司如Google和NVIDIA都有相应的开源解决方案。TensorRT虽然不公开源码,但支持后训练量化,且最新的版本支持ONNX导出的量化模型。Pytorch Quantization是NVIDIA针对Pytorch的量化工具,支持PTQ和QTA。

       在量化操作中,关键的概念是量化和反量化,前者将浮点数转换为整数,后者则是将量化后的值恢复为原始精度。对称量化,如TensorRT采用的,简化了计算,通过调整scale值来适应INT8范围。

       卷积操作是量化的核心,通过im2col和sgemm转换为INT8运算。量化公式涉及scale值的处理,以及pre-tensor和pre-channel的策略,这有助于保持精度并优化计算效率。

       后续内容将深入探讨非对称量化、实际部署中的代码细节,以及TensorRT、Pytorch和TVM的量化实践。如果你对此感兴趣,记得持续关注作者的更新。

ONNX-Runtime一本通:综述&使用&源码分析(持续更新)

       ONNX-Runtime详解:架构概览、实践与源码解析

       ONNX-Runtime作为异构模型运行框架,其核心机制是先对原始ONNX模型进行硬件无关的图优化,之后根据支持的硬件选择相应的算子库,将模型分解为子模型并发在各个平台执行。它提供同步模式的计算支持,暂不包括异步模式。ORT(onnx-runtime缩写)是主要组件,包含了图优化(graph transformer)、执行提供者(EP)等关键模块。

       EP是执行提供者,它封装了硬件特有的内存管理和算子库,可能只支持部分ONNX算子,但ORT的CPU默认支持所有。ORT统一定义了tensor,但EP可有自定义,需提供转换接口。每个推理会话的run接口支持多线程,要求kernel的筹码理论公式源码compute函数是并发友好的。

       ORT具有后向兼容性,能运行旧版本ONNX模型,并支持跨平台运行,包括Windows、Linux、macOS、iOS和Android。安装和性能优化是实际应用中的重要步骤。

       源码分析深入到ORT的核心模块,如框架(内存管理、tensor定义等)、图结构(构建、排序与修改)、优化器(包括RewriteRule和GraphTransformer),以及平台相关的功能如线程管理、文件操作等。Session是推理流程的管理核心,构造函数初始化模型和线程池,load负责模型反序列化,initialize则进行图优化和准备工作。

       ORT中的执行提供者(EP)包括自定义实现和第三方库支持,如TensorRT、CoreML和SNPE。其中,ORT与CoreML和TensorRT的集成通过在线编译,将ONNX模型传递给这些框架进行计算。ORT通过统一的接口管理元框架之上的算子库,但是否支持异构运算(如SNPE与CPU库的混合)仍有待探讨。

       总结来说,ONNX-Runtime处理多种模型格式,包括原始ONNX和优化过的ORT模型,以适应多平台和多设备需求。它通过复杂的架构和优化技术,构建了可扩展且高效的推理软件栈,展示了flatbuffer在性能和体积方面的优势。

       附录:深入探讨ORT源码编译过程的细节。

linux下tensorRT安装以及pycuda安装报错的解决

       在Linux环境中安装TensorRT和解决pycuda安装报错的过程可以这样描述:

       当你着手部署模型时,环境配置必不可少。首要任务是确保服务器上安装了CUDA,并且已正确添加环境变量,因为这常常是pycuda报错的根源。

       首先,你需要确认CUDA的版本,这可以通过命令行查看。然后,访问NVIDIA官方网站,找到与你CUDA版本相匹配的TensorRT下载链接并下载。然而,我发现下载过程中有时会出现自动断线的问题,最终我选择了8.2的稳定版,尽管GA和EA版也是选项。

       下载完成后,解压文件,同样别忘了添加TensorRT到系统环境变量。接下来,编译源码并生成测试执行文件,这是常规步骤。然后,尝试在当前conda环境中安装TensorRT,但可能会遇到pycuda的安装问题。

       报错指出pycuda的构建未能完成,问题可能有两个方面。首先,你可以尝试从lfd.uci.edu/~gohlke/pycuda/找到相应版本的pycuda(比如.1),这个库支持低版本CUDA,选择一个兼容的版本进行下载。

       其次,如果你的服务器使用的是conda环境,并且CUDA没有添加到环境变量中,而是依赖于conda的虚拟环境,这可能会导致问题。一旦你将本机CUDA添加到环境变量,通常就能解决这个问题了。

Jetson Agx Orin刷机及ubuntu系统使用

       orin踩坑教程

       一、Jetson Agx Orin 刷机

       1. 需下载SDK管理器sdkmanager,需注册NVIDIA账号。

       2. 将Orin设备进入Recovery模式,未开机状态需长按Force Recovery键并通电;已开机状态需长按Reset键再松开。

       3. 在Ubuntu PC终端输入sdkmanager,选择登录账号和设备型号,创建用户名和密码,等待安装完成。

       4. 连接Orin设备至网络,确保与Ubuntu PC在同一局域网下,使用手机热点连接。

       5. ping Orin IP地址验证连接。

       6. 等待CUDA等组件自动安装。

       二、系统时间校准

       输入命令校准系统时间。

       三、ubuntu系统挂载新硬盘及硬盘格式化

       1. 查看磁盘信息,识别新硬盘设备名。

       2. 进行分区,创建新文件系统。

       3. 挂载新分区至/home目录。

       4. 复制/home数据到新分区,重命名原目录,创建新空目录并挂载。

       5. 修改新目录权限。

       至此,新硬盘空间添加至/home。

       四、配置ROS环境及VsCode安装

       使用特定工具一键安装ROS。

       五、在jetson上安装chromium

       下载arm版本的chromium安装包。

       六、在jetson上安装qq

       选择arm版本的QQ安装包。

       七、安装jtop

       使用特定命令安装。

       八、安装Anaconda、cuda、cudnn、pytorch、Tensorrt

       1. 下载aarch的Anaconda安装包,安装并验证。

       2. 查看CUDA、Cudnn版本,复制头文件与库文件至对应目录。

       3. 安装Pytorch与torchvision。

       4. 安装Tensorrt。

       九、realsense SDK、realsense-ros、pyrealsense2安装

       1. SDK源码安装,如出现问题,请查阅相关文档。

       2. realsense-ros安装并测试。

       3. 使用脚本安装pyrealsense2,并根据提示操作。

       十、jetson中,安装所需的包

       记录在arm环境下安装特定包的命令。

       十一、Error And Solution

       解决刷机、ROS配置等过程中的常见问题。

       十二、推荐网站

       NVIDIA Jetson AGX Orin 开发环境配置 - Miraclefish

       github.com/yqlbu/jetson...

NVIDIA助力艾氪英诺打造稀疏卷积在TensorRT上的最佳实践

       NVIDIA 的 GPU 技术驱动艾氪英诺在稀疏卷积部署上实现了突破,助力其在泛交通领域的自动驾驶-车路协同应用中取得最佳实践。

       在自动驾驶领域,稀疏卷积作为关键算法,特别是 PointPillars 等方法的升级版,因其在三维空间特征利用上的优势,受到了广泛关注。然而,将这种高效算法部署到 NVIDIA 设备上,特别是 TensorRT GPU 上,是一项挑战。艾氪英诺凭借 EE-DLVM 部署工具,成功实现了这一目标。

       该工具基于 NVIDIA 的 TensorRT,通过高级 API 和优化实现,提升了稀疏卷积操作的性能。其创新点包括:设计的针对稀疏卷积的 Graph Trace,可将数据流程转化为 ONNX;前处理模块优化带来了倍的加速效果;以及在 Xavier NX 和 AGX Orin 等GPU上高效部署模型。这些成就使得艾氪英诺在3D点云感知算法部署上取得了重要突破。

       借助 NVIDIA 技术,艾氪英诺不仅在自动驾驶-车路协同领域深化创新,还计划开源部分源代码,进一步推动行业共享。他们结合 NVIDIA 的深度学习培训资源和加速计划,提升了产品的技术含量和市场推广,旨在通过 AI 技术推动泛交通领域的应用场景拓宽。

TensorRT-LLM(持续更新)

       TRT-LLM(NVIDIA官方支持)是一款用于在NVIDIA GPU平台上进行大模型推理部署的工具。

       其整体流程是将LLM构建为engine模型,支持多种大模型,如单机单卡、单机多卡(NCCL)、多机多卡,以及量化(8/4bit)等功能。

       TRT-LLM的runtime支持chat和stream两种模式,并支持python和cpp(可以直接使用cpp,也可以使用cpp的bybind接口)两种模式的runtime。

       构建离线模型可以通过example下的各个模型的build.py实现,而运行模型则可通过example下的run.py进行。

       TRT-LLM默认支持kv-cache,支持PagedAttention,支持flashattention,支持MHA/MQA/GQA等。

       在cpp下,TRT-LLM实现了许多llm场景下的高性能cuda kernel,并基于TensorRT的plugin机制,支持各种算子调用。

       与hugging face transformers(HF)相比,TRT-LLM在性能上提升2~3倍左右。

       TRT-LLM易用性很强,可能与其LLM模型结构比较固定有关。

       TRT-LLM的weight_only模式仅仅压缩模型体积,计算时依旧是dequant到input.dtype做计算。

       TRT-LLM的量化:W4A(表示weight为4bit,输入数据即activation为fp)。

       LLM模型推理,性能损耗大头在data 搬移,即memory bound,compute bound占比较少。

       TRT-LLM运行时内存可以通过一下参数调整,使用适合当前业务模型的参数即可。

       TRT-LLM对于Batch Manager提供了.a文件,用于支持in-flight batching of requests,来较小队列中的数据排队时间,提高GPU利用率。

       当前支持(0.7.1)的模型如下:

       tensorrt llm需要进行源码编译安装,官方提供的方式为通过docker进行安装。

       docker方式编译可以参考官方文档,此处做进一步说明。使用docker方式,会将依赖的各种编译工具和sdk都下载好,后面会详细分析一下docker的编译过程。

       编译有2种包,一种是仅包含cpp的代码包,一种是cpp+python的wheel包。

       docker的整个编译过程从如下命令开始:调用make,makefile在 docker/Makefile 下面,里面主要是调用了docker命令来进行构建。

       后续非docker方式编译llm,也是基于上述docker编译。

       一些小技巧:在编译llm过程中,会通过pip install一些python包,llm脚本中默认使用了NVIDIA的源,我们可以替换为国内的源,速度快一些。

       整个过程就是将docker file中的过程拆解出来,直接执行,不通过docker来执行。

       编译好的文件位于:build/tensorrt_llm-0.5.0-py3-none-any.whl。

       默认编译选项下的一些编译配置信息如下:

       以官方样例bloom为例:bloom example

       核心在于:编译时使用的环境信息和运行时的环境信息要一致,如:python版本,cuda/cudnn/nccl/tensorrt等。

       环境安装后以后,参考官方bloom样例,进行模型下载,样例执行即可。

       最终生成的engine模型:

       以chatglm2-6b模型为基础,进行lora微调后,对模型进行参数合并后,可以使用tensortrt-llm的example进行部署,合并后的模型的推理结果和合并前的模型的推理结果一致。

       lora的源码不在赘述,主要看一下lora模型参数是如何合并到base model中的:

       lora模型如下:

       base模型如下:

       模型构建是指将python模型构建为tensort的engine格式的模型。

       整体流程如下:

       整体流程可以总结为:

       可以看出,原理上和模型转换并没有区别,只是实现方式有差异而已。

       pytorch模型参数如何加载在tensortrt-llm中?关于量化参数加载

       1. 先提取fp格式的参数

       2. 调用cpp的实现进行参数量化

       整体而言,模型参数加载的关键在于:算子weight一一对应,拷贝复制。

       每种模型,都需要搭建和pytorch严格一致的模型架构,并将算子weight严格对应的加载到tensortrt-llm模型中

       即:关键点在于:熟悉原始pytorch模型结构和参数保存方式,熟悉tensorrt-llm的模型结构和参数设定方法。

       模型构建成功后,有两个文件:config.json文件推理时会用到,主要内容如下:模型参数信息和plugin信息。

       在模型构建好后,就可以做模型推理,推理流程如下:

       TRT-LLM Python Runtime分析

       1. load_tokenizer

       2. parse_input

       基于 tokenizer 对输入的text做分词,得到分词的id

       3. runner选择&模型加载

       4.推理

       5. 内存管理

       TRT-layer实现举例

       (1)对tensorrt的接口调用:以cast算子为例:functional.py是对TensorRT python API接口的调用

       调用tensorrt接口完成一次推理计算

       (2)TRT-LLM python侧对cpp侧的调用

       调到cpp侧后,就会调用cpp侧的cuda kernel

       trtllm更新快,用了一些高版本的python特性,新的trtllm版本在python3.8上,不一定能跑起来