2、开发环境搭建:NVIDIA Jetson平台介绍、JetPack SDK安装、TensorRT安装与验证、交叉编译环境配置
好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,环境搭建这事儿,看着琐碎,但真踩过坑的人都知道——这一步要是没弄好,后面调试起来能让你怀疑人生。我当年第一次用Jetson的时候,光一个交叉编译工具链就折腾了两天,后来发现是版本没对齐。嗯,咱们今天就把这些坑提前填上。
2.1 NVIDIA Jetson平台介绍
先说说Jetson是什么。它本质上是一块嵌入式的AI超级计算机。你想想看,一个巴掌大的板子,能跑完整的深度学习模型,还能做实时推理,这在几年前是不敢想的。
目前主流的Jetson型号有这么几款:
| 型号 | AI算力 | 典型功耗 | 适用场景 |
|---|---|---|---|
| Jetson Nano | 472 GFLOPS | 5W-10W | 入门级AI、轻量模型 |
| Jetson TX2 | 1.33 TFLOPS | 7.5W-15W | 无人机、机器人 |
| Jetson Xavier NX | 21 TOPS | 10W-20W | 边缘计算、多路视频 |
| Jetson AGX Orin | 275 TOPS | 15W-60W | 自动驾驶、工业检测 |
我个人习惯把Jetson分成两类:一类是Nano和TX2这种“够用就好”的,适合原型验证;另一类是Xavier和Orin系列,真正能扛生产负载的。你在选型的时候,别光看算力,还得看功耗和散热。我在项目中遇到过,有人用Orin跑一个轻量模型,结果风扇呼呼转,功耗全浪费了——说白了,杀鸡用牛刀。
2.2 JetPack SDK安装
JetPack是什么?它是NVIDIA官方为Jetson定制的全套开发包。里面包含了Linux系统、CUDA、cuDNN、TensorRT,还有各种多媒体库。你不需要一个个去装,一个JetPack全搞定。
安装方式有两种:
- SDK Manager方式(推荐):在PC主机上装NVIDIA SDK Manager,通过USB连接Jetson,一键刷机。
- 手动刷机方式:下载镜像文件,用balenaEtcher烧录到SD卡或NVMe硬盘上。
我建议你用SDK Manager。为什么?因为它会自动帮你匹配版本。我曾经手贱,手动装了CUDA 11.4,结果TensorRT只支持11.3,折腾了一下午才发现是版本不兼容。SDK Manager就不会犯这种错。
lsusb,看到“NVIDIA Corp.”就对了。
2.3 TensorRT安装与验证
JetPack装好之后,TensorRT其实已经在了。你可以在Jetson上执行:
dpkg -l | grep tensorrt
如果看到类似 libnvinfer8、tensorrt 这样的包,说明已经装好了。但咱们得验证一下它能不能用。
写一个简单的Python脚本来测试:
import tensorrt as trt
print(trt.__version__)
print(trt.Builder(trt.Logger(trt.Logger.WARNING)) is not None)
如果输出版本号并且返回True,恭喜你,TensorRT已经就绪。
我记得有一次,我在PC上把模型转成了FP16的TensorRT引擎,拿到Jetson上死活跑不起来。后来才发现,PC上的TensorRT版本比Jetson上的高了一个小版本,序列化格式不兼容。从那以后,我都是先在Jetson上装好环境,再在Jetson上做转换。省心。
2.4 交叉编译环境配置
为什么要交叉编译?因为Jetson的CPU性能有限,直接在板子上编译大型项目(比如OpenCV、PyTorch)能等得你花儿都谢了。交叉编译就是在PC上编译出能在Jetson上运行的二进制文件,然后传过去直接用。
配置交叉编译环境,核心是装好这几个东西:
- 交叉编译工具链:比如
aarch64-linux-gnu-g++ - Jetson的根文件系统:从Jetson上把
/lib、/usr等目录拷贝到PC上 - CMake工具链文件:告诉CMake用哪个编译器、链接哪个库
一个典型的CMake工具链文件长这样:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH /path/to/jetson/rootfs)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
然后编译的时候,加上 -DCMAKE_TOOLCHAIN_FILE=你的工具链文件.cmake 就行了。
/usr/lib/aarch64-linux-gnu 目录拷过来,一劳永逸。
嗯,到这里,你的开发环境应该已经搭好了。下一章咱们开始真正接触TensorRT的核心概念——模型解析与网络构建。到时候你会发现,环境搭好了,后面的路就好走了。