1. 环境搭建与Hello World
任务目标
在Jetson Nano开发板上完成JetPack SDK的安装与基础环境配置,验证Python、CUDA及TensorRT组件可用,并运行一个基于TensorRT的Hello World推理程序,确认边缘AI开发环境闭环正常。
环境与依赖
- 硬件:Jetson Nano Developer Kit(建议配64GB以上MicroSD卡)
- 宿主机:Ubuntu 18.04/20.04 x86_64,用于制作SD卡镜像
- 目标系统镜像:JetPack 4.6.x(含L4T R32.7.x、CUDA 10.2、TensorRT 8.2、Python 3.6)
- 网络:Jetson Nano需可访问外网以下载依赖包
第一步:烧录JetPack系统镜像
- 在宿主机下载JetPack 4.6镜像文件(
jetson-nano-jp461-sd-card-image.zip)。 - 使用
balenaEtcher或dd将镜像写入MicroSD卡:
# 宿主机执行,假设SD卡设备为 /dev/sdX
sudo dd if=jetson-nano-jp461-sd-card-image.img of=/dev/sdX bs=4M status=progress
sync
- 将SD卡插入Jetson Nano,连接HDMI显示器、USB键鼠、网线,接5V/4A DC电源开机。
- 首次启动完成系统配置(用户名/密码、时区等),登录系统。
第二步:验证基础环境
在Jetson Nano终端依次执行以下命令,确认关键组件版本:
# Python版本(JetPack自带Python 3.6.9)
python3 --version
# CUDA路径与版本
ls /usr/local/cuda-10.2/bin/nvcc
/usr/local/cuda-10.2/bin/nvcc --version
# TensorRT Python库导入测试
python3 -c "import tensorrt as trt; print('TensorRT', trt.__version__)"
# 将CUDA加入当前用户PATH(写入~/.bashrc)
echo 'export PATH=/usr/local/cuda-10.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
通过条件:上述命令均能正常输出版本号且无报错,说明JetPack、Python、CUDA、TensorRT已正确安装。
第三步:TensorRT Hello World推理程序
本案例使用TensorRT自带的样例引擎构建流程,创建一个最小推理程序:构建一个只含单个ReLU激活层的网络引擎,输入随机张量并执行前向推理,验证TensorRT API调用链路完整。
# hello_trt.py
import tensorrt as trt
import numpy as np
import pycuda.driver as cuda
import pycuda.autoinit
# 创建TensorRT logger与builder
logger = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(logger)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
# 定义输入张量: [1, 4]
input_tensor = network.add_input("input", trt.float32, [1, 4])
# 添加ReLU激活层
relu_layer = network.add_activation(input_tensor, trt.ActivationType.RELU)
network.mark_output(relu_layer.get_output(0))
# 构建引擎
config = builder.create_builder_config()
config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 20) # 1MB workspace
engine = builder.build_engine(network, config)
assert engine is not None, "引擎构建失败"
# 创建执行上下文
context = engine.create_execution_context()
# 分配CPU/GPU内存
h_input = np.array([-1.0, 2.0, -3.0, 4.0], dtype=np.float32)
h_output = np.empty_like(h_input)
d_input = cuda.mem_alloc(h_input.nbytes)
d_output = cuda.mem_alloc(h_output.nbytes)
# 执行推理
cuda.memcpy_htod(d_input, h_input)
context.execute_v2(bindings=[int(d_input), int(d_output)])
cuda.memcpy_dtoh(h_output, d_output)
# 验证结果
expected = np.maximum(h_input, 0)
print("输入:", h_input)
print("输出:", h_output)
print("预期:", expected)
assert np.allclose(h_output, expected), "推理结果与预期不符"
print("TensorRT Hello World 运行成功")
运行与验证
# 安装Python依赖(若尚未安装pycuda)
sudo pip3 install pycuda
# 运行程序
python3 hello_trt.py
预期输出:程序打印输入张量、ReLU处理后的输出张量,并显示TensorRT Hello World 运行成功。输出值应为 [0. 2. 0. 4.],与NumPy的maximum计算结果一致。
常见问题排查
- pycuda安装失败:确认已安装CUDA工具链,且
pip3使用Python 3.6对应的版本。 - 引擎构建报错:检查TensorRT版本是否为8.x,若为7.x需调整API调用方式。
- 显存不足:Jetson Nano共享内存,若其他程序占用过多,先关闭图形界面或重启。
至此,Jetson Nano的JetPack环境已就绪,TensorRT推理链路验证通过,可进入后续实战案例开发。