1.TensorRT-LLM(持续更新)
2.linux下tensorRT安装以及pycuda安装报错的源码解决
3.模型部署入门教程(七):TensorRT 模型构建与推理
4.TF-TRT使用环境搭建
5.NVIDIA 深度学习 TensorRT 文档:简介与能力
6.ONNX详解之八:onnx模型的tensorRT量化
TensorRT-LLM(持续更新)
TRT-LLM(NVIDIA官方支持)是一款用于在NVIDIA GPU平台上进行大模型推理部署的工具。
其整体流程是源码将LLM构建为engine模型,支持多种大模型,源码如单机单卡、源码单机多卡(NCCL)、源码多机多卡,源码java 微信开发源码以及量化(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需要进行源码编译安装,官方提供的gpsd源码分析方式为通过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格式的模型。
整体流程如下:
整体流程可以总结为:
可以看出,原理上和模型转换并没有区别,只是springkafka消费源码实现方式有差异而已。
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上,不一定能跑起来
linux下tensorRT安装以及pycuda安装报错的解决
在Linux环境中安装TensorRT和解决pycuda安装报错的过程可以这样描述:
当你着手部署模型时,环境配置必不可少。首要任务是确保服务器上安装了CUDA,并且已正确添加环境变量,因为这常常是pycuda报错的根源。
首先,你需要确认CUDA的版本,这可以通过命令行查看。然后,访问NVIDIA官方网站,找到与你CUDA版本相匹配的TensorRT下载链接并下载。然而,我发现下载过程中有时会出现自动断线的问题,最终我选择了8.2的稳定版,尽管GA和EA版也是选项。
下载完成后,解压文件,同样别忘了添加TensorRT到系统环境变量。接下来,编译源码并生成测试执行文件,这是常规步骤。然后,creo编译源码尝试在当前conda环境中安装TensorRT,但可能会遇到pycuda的安装问题。
报错指出pycuda的构建未能完成,问题可能有两个方面。首先,你可以尝试从lfd.uci.edu/~gohlke/pycuda/找到相应版本的pycuda(比如.1),这个库支持低版本CUDA,选择一个兼容的版本进行下载。
其次,如果你的服务器使用的是conda环境,并且CUDA没有添加到环境变量中,而是依赖于conda的虚拟环境,这可能会导致问题。一旦你将本机CUDA添加到环境变量,通常就能解决这个问题了。
模型部署入门教程(七):TensorRT 模型构建与推理
模型部署入门教程继续更新!通过前几期的学习,我们对 ONNX 这一中间表示有了全面理解。然而,在实际生产环境中,ONNX 模型往往需要转换为可被具体推理后端使用的模型格式。本篇,我们探索深度学习框架中的巨人 - TensorRT。
TensorRT,由 NVIDIA 推出,专用于在其硬件上执行深度学习推理。它提供量化感知训练和离线量化功能,支持 INT8 和 FP 两种优化模式。TensorRT 的应用广泛,包括视频流、语音识别、推荐、欺诈检测、文本生成和自然语言处理等领域。作为 NVIDIA GPU 上运行模型最快的推理引擎之一,TensorRT 经过高度优化。
安装 TensorRT:
- **Windows**:在带有 NVIDIA 显卡的机器上,确保安装了 CUDA 和 CUDNN。从 NVIDIA 官网下载与主机 CUDA 版本匹配的周 kdj 源码 TensorRT 压缩包。以 CUDA .2 为例,选择适配的 zip 包,使用命令行验证安装。
- **Linux**:安装流程与 Windows 类似,从 NVIDIA 官网下载适配的 tar 包,并执行安装测试命令。确认版本为 8.2.5.1,表示安装成功。
模型构建:
- **直接构建**:使用 TensorRT API 构建网络,类似于使用 Pytorch 或 TensorFlow 搭建网络。注意权重内容赋值至 TensorRT 网络。
- **Python API 构建**:利用 tensorrt.Builder 的功能构建配置和网络,设置参数、添加层,定义输入和输出名称,序列化网络保存。
- **C++ API 构建**:流程与 Python 类似,需注意细节,代码实现同步。
IR 转换模型:
- **Python API 转换**:使用 Pytorch 实现模型,转换为 ONNX,再转换至 TensorRT 模型。
- **C++ API 转换**:利用 NvOnnxParser 将 ONNX 文件解析至 TensorRT 网络中。
模型推理:
- **Python API 推理**:使用 MMDeploy 运行代码,验证输入输出符合预期。
- **C++ API 推理**:使用 C++ 语言实现模型推理,对比 Python API 的效果。
总结:通过本文,您掌握了构建 TensorRT 模型的两种方式:直接构建和模型转换。学习了使用 Python 和 C++ 完成构建及推理。期待下一篇文章,我们将探讨如何在 TensorRT 中添加自定义算子,敬请期待!
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中安装其他软件,以满足个性化需求。
NVIDIA 深度学习 TensorRT 文档:简介与能力
本文摘自NVIDIA官方文档《NVIDIA Deep Learning TensorRT Documentation》的1、2两节,旨在介绍TensorRT SDK,一个旨在在NVIDIA硬件上提供高效机器学习推理的工具。TensorRT专为与TensorFlow、PyTorch和MXNet等训练框架协同工作而设计,其目标是快速高效地运行已经训练好的网络模型。
本指南针对开发者提供安装TensorRT SDK的说明,以及如何使用C++和Python API实现最常见的深度学习层。主要内容包括:创建TensorRT网络定义、使用TensorRT构建器构建引擎、序列化和反序列化过程,以及如何为引擎提供数据和执行推理。该指南还提供了有关TensorRT功能的广泛概述,以及高级功能的详细信息。
TensorRT具有强大的API,支持C++和Python,旨在与训练框架无缝集成。它提供了诸如创建应用程序以快速在TensorRT引擎上运行推理、实现嵌入式应用程序的示例、以及与GPU功能的互补使用(如Multi-Instance GPU或MIG)等。此外,TensorRT与GPU软件如NVIDIA Triton推理服务器、NVIDIA DALI、TensorFlow-TensorRT和Torch-TensorRT等相集成。
ONNX是TensorRT导入训练模型的主要方式,其附带的ONNX解析器库用于将模型导入TensorRT。ONNX支持操作集与TensorRT版本同步更新。TensorRT还提供代码分析工具与valgrind、clang sanitizer等工具结合使用,以及API版本控制、弃用政策和硬件支持生命周期等重要信息。
本章进一步介绍TensorRT的能力,包括模型编程、构建阶段与运行时阶段、插件、类型和精度、量化、张量和数据格式、动态形状、DLA支持、更新权重、trtexec工具以及Polygraphy工具包等。TensorRT支持多种数据类型,如FP、FP、INT8、INT、UINT8和BOOL,并允许用户通过精度控制、量化和动态形状等功能优化模型性能。
最后,本文提供了TensorRT与其他软件工具的集成方法,以及如何利用TensorRT的API和工具进行高效模型部署和优化。总之,TensorRT是一个功能丰富、灵活且强大的机器学习推理工具,旨在加速深度学习模型的运行,并与现代GPU硬件紧密结合。
ONNX详解之八:onnx模型的tensorRT量化
Windows TensorRT安装教程:
假设已经完成CUDA和CUDNN的安装。从NVIDIA官网下载TensorRT 8.x版本,确保版本适配你的CUDA。下载解压后,将lib目录下的dll文件复制至C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v.1\bin,lib目录下的lib文件复制至C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v.1\lib\x,include目录下的文件复制至C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v.1\include。至此,TensorRT安装完成。如有问题,重启计算机可能解决。
安装Python版本的TensorRT:
确保TensorRT已正确安装。打开解压后的Python文件夹,根据Python版本选择合适的wheel包,使用pip进行安装。
ONNX模型量化:
使用resnet模型进行试验。打开bin文件夹,在终端执行命令查看帮助信息。执行命令查看resnet的性能。执行命令将resnet转换为fp格式并保存为resnet_fp.trt,查看吞吐量。执行命令将resnet转换为int8格式并保存为resnet_int8.trt,再次查看吞吐量。
模型Python TRT部署:
利用上一部分量化得到的resnet_int8.trt演示在TRT部署的流程。
Linux(ubuntu.)系统下安装TensorRT、cuda、cudnn环境配置,多个版本安装共存
在Linux(Ubuntu .)系统中,安装TensorRT、CUDA和cuDNN并实现不同版本的兼容与共存,是一项常见的任务。以下是详细的步骤:
首先,访问TensorRT官网(/deeplearning/tensorrt/)下载TensorRT 2.1,创建账户后选择对应版本,如8.5.1,确认其与CUDA和cuDNN的兼容性。将下载的文件解压后,配置bash路径,通过验证trtexec命令确保安装正确。接着,运行TensorRT样例测试。
其次,下载CUDA 3.1,例如.7,从CUDA Toolkit Archive获取并安装到/usr/local/。运行安装脚本,仅选择Toolkit包,创建软链接指向新版本,安装后检查nvcc的输出。
然后,下载cuDNN 4.1,对应CUDA 3.1版本,解压至Package文件夹。根据cuDNN官方安装指南进行Linux安装,安装相关依赖后,将cuDNN文件夹内的内容复制到cuda的相应路径下,并验证cudnn_version.h文件中的版本信息。
总结,Linux系统中安装和管理不同版本的TensorRT、CUDA和cuDNN需要细致的配置。通过以上步骤,可以确保各个版本的兼容并行运行。如果有其他版本需要安装,可参考相关文档进行操作。
浅谈TensorRT的优化原理和用法
TensorRT简介
TensorRT是一个高性能的深度学习推理优化器,为大规模数据中心、嵌入式平台及自动驾驶提供低延迟、高吞吐率的部署推理。支持TensorFlow、Caffe、Mxnet、Pytorch等主流深度学习框架,通过与NVIDIA GPU的结合,几乎可以在所有框架中实现快速高效的部署推理。
TensorRT优化原理与用法
TensorRT优化主要通过训练模型优化、INT8精度转换、自动校准、插件层自定义实现。优化过程旨在提高部署推理速度,降低延迟。
安装与使用流程
使用TensorRT前需确认CUDA与TensorRT版本匹配。安装过程中可能会遇到依赖包缺失问题,解决方法为安装缺失依赖或更新CUDA版本。安装后,通过SDK提供的Makefile配置获取CUDA版本信息,进而进行编译。
流程包括模型转换、build阶段优化模型至特定GPU平台,以及deployment阶段进行推理。build阶段完成模型转换与优化,deployment阶段加载优化模型进行实际推理。
性能结果
TensorRT与CPU相比,加速效果可达倍;与TensorFlow在GPU上的推理相比,加速效果为倍。使用INT8低精度模式进行推理,精度损失轻微,但速度显著提升。
最新性能表现
TensorRT4.0.1的性能表现更加突出,提供详尽数据展示其在推理时的强大性能。未来将深入学习TensorRT官方例程及进行优化实践。