课程导入:学习目标、课程结构与环境准备
欢迎来到《CUDA与TensorRT推理初探》的第一章。在正式开始之前,我们需要先明确三个问题:这门课学什么、课程如何组织、以及你的机器上需要准备什么。本章将为你搭建一个清晰的学习框架,并完成环境搭建,确保后续每一章都能直接动手实践。
1.1 学习目标:从“能跑”到“懂原理”
CUDA 是 NVIDIA 提供的并行计算平台,TensorRT 则是基于 CUDA 构建的高性能推理优化引擎。很多初学者容易陷入两个极端:要么只调用 API 而不理解底层机制,要么深陷 GPU 架构细节而无法落地。本课程的目标是帮助你建立一条从原理到实践的完整链路,具体而言,完成本课程后你将能够:
- 理解 GPU 并行计算模型:掌握线程层次(Grid/Block/Thread)、内存层次(全局/共享/寄存器)以及同步机制,能够分析一个 CUDA 程序的性能瓶颈。
- 编写并优化 CUDA 内核:能够将简单的循环计算改写为 CUDA kernel,并运用内存合并访问、共享内存复用、避免 bank conflict 等技巧进行优化。
- 掌握 TensorRT 推理流程:理解从模型解析、网络定义、优化构建到序列化部署的完整流程,能够将 PyTorch/ONNX 模型转换为 TensorRT 引擎。
- 具备性能调优与排障能力:能够使用 Nsight Systems、Nsight Compute 等工具定位性能瓶颈,并处理常见的精度、显存、动态形状等问题。
1.2 课程结构:四阶段递进式学习
整个课程共 30 章,分为四个阶段,每个阶段都有明确的核心任务和产出物。下图展示了课程的整体架构与知识依赖关系:
课程结构的设计遵循“基础 → 进阶 → 框架 → 实战”的递进逻辑。前两个阶段聚焦 CUDA 本身,后两个阶段聚焦 TensorRT 推理优化。每个阶段内部章节之间也有依赖关系,例如第 5 章的“共享内存”需要第 3 章的“线程层次”作为基础。建议你按照顺序学习,不要跳跃。
1.3 环境准备:CUDA 与 TensorRT 安装
在开始编码之前,我们需要确保你的开发环境满足以下要求。这里我们以 Ubuntu 22.04 + NVIDIA 驱动 + CUDA 12.x + TensorRT 8.6 为例,其他系统(Windows、WSL2)的安装步骤类似,但命令略有差异。
1.3.1 硬件与驱动检查
首先确认你的机器有 NVIDIA GPU,并且驱动已正确安装。在终端执行:
# 查看 GPU 型号
nvidia-smi
# 如果显示类似以下信息,说明驱动正常
# +-----------------------------------------------------------------------------+
# | NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 |
# |-------------------------------+----------------------+----------------------+
# | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
# |===============================+======================+======================|
# | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
# +-------------------------------+----------------------+----------------------+
如果 nvidia-smi 无法运行,请先安装 NVIDIA 驱动。注意:驱动版本必须支持你将要安装的 CUDA 版本。例如 CUDA 12.x 需要驱动版本 ≥ 525。
1.3.2 安装 CUDA Toolkit
CUDA Toolkit 包含编译器(nvcc)、运行时库和开发工具。推荐使用 runfile 方式安装,以便自定义安装路径:
# 下载 CUDA 12.1 runfile(约 2.5GB)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
# 执行安装,注意不要安装驱动(如果已装好)
sudo sh cuda_12.1.0_530.30.02_linux.run --toolkit --silent --override
# 配置环境变量(添加到 ~/.bashrc)
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
# 验证安装
nvcc --version
# 应输出:Cuda compilation tools, release 12.1, V12.1.105
nvcc --version 提示找不到命令,说明 PATH 未正确配置。请检查 /usr/local/cuda-12.1/bin 是否存在,并重新 source ~/.bashrc。另外,不要同时安装多个 CUDA 版本,以免环境变量冲突。
1.3.3 安装 TensorRT
TensorRT 的安装有两种方式:deb 包(推荐)和 tar 包。deb 包会自动处理依赖关系,但需要注册 NVIDIA 开发者账号。这里以 tar 包为例,更通用:
# 从 NVIDIA 官网下载 TensorRT 8.6 GA(需要登录)
# 下载文件:TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
# 解压到 /opt
sudo tar -xzf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz -C /opt
# 配置环境变量
export LD_LIBRARY_PATH=/opt/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH
export PATH=/opt/TensorRT-8.6.1.6/bin:$PATH
# 验证安装
trtexec --version
# 应输出类似:TensorRT version: 8.6.1.6
1.3.4 Python 环境(可选但推荐)
本课程大部分实验使用 Python 调用 CUDA 和 TensorRT。建议使用 conda 创建独立环境:
conda create -n cuda_trt python=3.10 -y
conda activate cuda_trt
# 安装 PyTorch(CUDA 12.1 版本)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
# 安装 TensorRT Python API
pip install /opt/TensorRT-8.6.1.6/python/tensorrt-8.6.1-cp310-none-linux_x86_64.whl
# 验证
python -c "import tensorrt as trt; print(trt.__version__)"
# 应输出:8.6.1.6
1.4 环境验证清单
为了确保后续章节的代码能够顺利运行,请在开始学习前逐项检查以下清单:
| 检查项 | 命令/方法 | 预期结果 |
|---|---|---|
| GPU 驱动 | nvidia-smi |
显示 GPU 型号和驱动版本 |
| CUDA 编译器 | nvcc --version |
显示 CUDA 12.x 版本号 |
| TensorRT 命令行 | trtexec --version |
显示 TensorRT 8.6.x |
| PyTorch GPU 可用 | python -c "import torch; print(torch.cuda.is_available())" |
输出 True |
| TensorRT Python API | python -c "import tensorrt as trt; print(trt.__version__)" |
输出 8.6.x |
~/.bashrc 并执行 source ~/.bashrc。
1.5 常见误区与复盘
在多年的教学和工程实践中,我们发现初学者在环境准备阶段最容易犯以下错误,这里提前为你避坑:
- 误区一:盲目安装最新版 CUDA。最新版 CUDA 可能不兼容你的驱动或 TensorRT 版本。建议使用 LTS 版本(如 CUDA 12.1/12.2),并确保驱动版本 ≥ 525。
- 误区二:混淆“驱动 CUDA 版本”和“Toolkit 版本”。
nvidia-smi显示的 CUDA Version 是驱动支持的最高版本,不代表你已安装 Toolkit。必须单独安装 CUDA Toolkit 才能使用nvcc。 - 误区三:TensorRT 版本与 CUDA 版本不匹配。TensorRT 8.6 支持 CUDA 11.x 和 12.x,但不同小版本有差异。下载时务必选择与你的 CUDA 版本对应的包。
- 误区四:忽略 Python 虚拟环境。直接在系统 Python 中安装 PyTorch 和 TensorRT 容易导致依赖冲突。强烈建议使用 conda 或 venv 隔离环境。
如果你在安装过程中遇到问题,不要慌张。绝大多数问题都可以通过以下步骤解决:① 检查驱动版本;② 确认环境变量;③ 查看官方文档的 Troubleshooting 部分。记住:环境搭建是每个 CUDA 开发者必经的“第一道坎”,跨过去之后,后面的学习会顺畅很多。