皮皮网
皮皮网

【43个python源码】【zcash源码】【simpledataformat 源码】tensorrt源码下载

来源:源码系统怎么写 发表时间:2024-12-28 20:26:30

1.部署系列——神经网络INT8量化教程第一讲!源码
2.ONNX-Runtime一本通:综述&使用&源码分析(持续更新)
3.水无常形——开源围棋 AI 软件 KataGo 安装使用指南
4.PyTorch 源码分析(一):torch.nn.Module
5.YOLOX目标检测实战:LabVIEW+YOLOX ONNX模型实现推理检测(含源码)
6.Pytorch量化+部署

tensorrt源码下载

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

       神经网络量化已经成为广泛应用的源码技术,特别是下载INT8量化,它在处理大型模型和提高效率方面扮演着重要角色。源码2年前,下载43个python源码作者通过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模型进行硬件无关的图优化,之后根据支持的zcash源码硬件选择相应的算子库,将模型分解为子模型并发在各个平台执行。它提供同步模式的计算支持,暂不包括异步模式。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源码编译过程的细节。

水无常形——开源围棋 AI 软件 KataGo 安装使用指南

       KataGo是一款由David J. Wu开发的围棋软件,它借鉴了DeepMind的simpledataformat 源码AlphaGo Zero与AlphaZero论文中的研究,并在训练速度上进行了大幅改进,成为目前世界顶级的电脑围棋软件之一。其名字来源于日语“かた”,寓意通过强化学习永久训练自己并完成形式的人工智能。

       KataGo相比AlphaGo的优势在于使用方法。用户通过命令行输入指令,KataGo以文本形式输出分析结果。对于非专业用户来说,掌握这些指令较为困难。因此,需要一个图形用户界面作为中介,将用户的棋谱转化为命令,将KataGo的输出转化为可视化的棋盘。常见的图形用户界面包括KaTrain等工具。

       此外,KataGo提供了四个后端版本供用户选择,分别是OpenCL、CUDA、TensorRT和Eigen。根据不同的硬件配置和需求,用户可以选择最适合的后端版本以优化性能。

       在安装KataGo之前,需要确保显卡驱动程序已经安装。对于TensorRT后端,还需要额外安装CUDA和TensorRT。以下是KataGo的安装步骤:

       前往KataGo的源代码库编译或下载主程序。

       下载权重文件,并将其复制到KataGo文件夹中。

       使用命令行自动生成配置文件,根据提示设置规则和参数。

       对于那些希望简化安装过程的用户,可以尝试使用KaTrain这样的All in One工具。KaTrain提供了一个集成的界面,使得使用KataGo变得更加容易。

       如果您希望深入了解KataGo的高级使用方法,可以按照以下步骤进行:

       在KataGo文件夹中使用命令生成配置文件。

       自动生成配置文件时,根据提示设置规则和参数。

       对于自定义配置文件的编辑,您可以按照特定的规则和参数进行修改,以适应您的需求。例如,您可以在规则部分选择特定的规则,调整是否允许认输,以及设置线程数以优化性能。

       最后,为了提供更直观的分析结果,您可以使用图形用户界面工具,如Sabaki,与KataGo配合使用。通过设置界面参数,您可以查看胜率图、变化树等信息,越权 源码以便更好地理解AI的分析结果。

       总之,KataGo是一款强大的围棋软件,通过适当的选择后端版本、安装配置文件和使用图形用户界面工具,您可以在不同的硬件环境中优化其性能,从而获得更深入的围棋分析体验。

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

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

       在Python侧,2.1回调函数注册,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是否是这样的操作)。

YOLOX目标检测实战:LabVIEW+YOLOX ONNX模型实现推理检测(含源码)

       LabVIEW实现YOLOX目标检测

       本文将介绍如何利用LabVIEW进行YOLOX目标检测的getusermedia源码实战操作。YOLOX是由旷视科技开源的高性能实时目标检测网络,通过将解耦头、数据增强、无锚点及标签分类等领域的优秀进展与YOLO进行集成,实现了超越YOLOv3、YOLOv4和YOLOv5的性能,并保持了极高的推理速度。本文将主要关注如何在LabVIEW中部署YOLOX的ONNX模型进行推理。

       一、环境搭建

       部署环境:所需环境包括LabVIEW软件,以及YOLOX ONNX模型。

       LabVIEW工具包:安装LabVIEW ONNX工具包,以实现与ONNX模型的交互。

       二、模型的获取与转化

       方式一:直接下载ONNX模型。访问GitHub仓库获取YOLOX的ONNX模型,链接如下:github.com/Megvii-BaseD...

       方式二:将训练好的模型pth转换为ONNX。通过下载YOLOX源码、安装库、从基准表下载预训练模型,然后使用特定指令将pth模型转换为ONNX格式。具体步骤如下:

        1. 安装YOLOX:在YOLOX-main文件夹中执行命令行指令。

        2. 安装pycocotools。

        3. 下载预训练模型:使用指定链接下载模型文件至特定路径。

        4. 将模型pth转换为ONNX:执行相关命令。

       三、LabVIEW实现YOLOX ONNX推理检测

       加载模型:将转换后的ONNX模型放置至LabVIEW项目中的model文件夹内,配置LabVIEW程序加载模型。

       目标检测实现:使用LabVIEW ONNX工具包中的Create_Session.vi加载模型,并选择CPU、CUDA或TensorRT进行推理加速。通过查看模型结构、加载模型及实现目标检测,最终输出检测结果。

       四、源码及模型下载

       链接:访问百度网盘下载相关源码与模型,链接如下:pan.baidu.com/s/1FMRH1F...

       总结:本文详细介绍了在LabVIEW中实现YOLOX目标检测的全过程,包括环境搭建、模型获取与转化、LabVIEW实现推理检测以及源码下载。希望对读者在LabVIEW与人工智能技术应用方面有所帮助。如有疑问或讨论,欢迎在评论区留言,同时也欢迎加入技术交流群。

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文件安装,过程中可能遇到一些报错,需进行相应的解决,确保安装成功。

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...

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添加到环境变量,通常就能解决这个问题了。

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中安装其他软件,以满足个性化需求。

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上,不一定能跑起来

相关栏目:娱乐