1. 车载AI座舱环境搭建与验证
任务说明
在车载开发板(以NVIDIA Jetson Orin为例)上完成AI推理环境搭建,并运行一个最小验证程序,确认GPU/CUDA、TensorRT和Python推理链路均可用,为后续100个案例提供统一运行基座。
环境依赖
- 硬件:Jetson Orin系列开发板(已刷JetPack 5.1+,含L4T 35.x)
- 系统:Ubuntu 20.04(JetPack自带)
- 预装组件:CUDA 11.4、cuDNN 8.6、TensorRT 8.5(JetPack自带,无需手动安装)
- Python:3.8(系统默认),需安装PyCUDA和TensorRT Python绑定
环境准备命令
# 确认JetPack版本(应输出r35.x)
cat /etc/nv_tegra_release
# 安装Python依赖
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
pip3 install pycuda==2022.2.2
# TensorRT Python绑定(JetPack自带,验证可导入即可)
python3 -c "import tensorrt as trt; print('TensorRT', trt.__version__)"
关键完整代码
以下脚本一次性验证CUDA可用性、TensorRT版本、GPU显存分配与释放、以及一个最小TensorRT引擎构建(不依赖外部模型文件):
#!/usr/bin/env python3
"""车载AI座舱环境验证脚本 - Jetson Orin"""
import sys
import ctypes
import numpy as np
import pycuda.driver as cuda
import pycuda.autoinit
import tensorrt as trt
def check_cuda():
"""验证CUDA驱动与设备"""
cuda.init()
device = cuda.Device(0)
props = device.get_attributes()
print(f"[PASS] CUDA {cuda.get_version()/1000:.1f} | 设备: {device.name()}")
print(f" 显存: {props.get(cuda.device_attribute.TOTAL_MEMORY)//(1024**3)} GB")
return True
def check_tensorrt():
"""验证TensorRT版本并构建最小引擎"""
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(TRT_LOGGER)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
config = builder.create_builder_config()
config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 20) # 1MB
# 最小网络: 1x1卷积 (输入->输出)
inp = network.add_input("input", trt.float32, (1, 1, 1, 1))
conv = network.add_convolution_nd(inp, 1, (1, 1), np.ones((1, 1, 1, 1), dtype=np.float32))
network.mark_output(conv.get_output(0))
engine_bytes = builder.build_serialized_network(network, config)
if engine_bytes is None:
raise RuntimeError("引擎构建失败")
print(f"[PASS] TensorRT {trt.__version__} | 最小引擎构建成功 ({len(engine_bytes)} bytes)")
return True
def check_gpu_memory():
"""验证GPU显存分配/释放"""
alloc_size = 256 * 1024 * 1024 # 256MB
before = cuda.mem_get_info()[0]
buf = cuda.mem_alloc(alloc_size)
mid = cuda.mem_get_info()[0]
buf.free()
after = cuda.mem_get_info()[0]
assert before - mid == alloc_size, "显存分配大小不符"
assert after == before, "显存释放不完整"
print(f"[PASS] GPU显存分配/释放正常 (256MB)")
return True
def check_pycuda_tensor():
"""验证PyCUDA张量运算"""
a = np.random.randn(1024).astype(np.float32)
a_gpu = cuda.mem_alloc(a.nbytes)
cuda.memcpy_htod(a_gpu, a)
out = np.empty_like(a)
cuda.memcpy_dtoh(out, a_gpu)
a_gpu.free()
assert np.allclose(a, out), "数据拷贝不一致"
print("[PASS] PyCUDA 张量拷贝/计算链路正常")
return True
if __name__ == "__main__":
checks = [check_cuda, check_tensorrt, check_gpu_memory, check_pycuda_tensor]
for fn in checks:
try:
fn()
except Exception as e:
print(f"[FAIL] {fn.__name__}: {e}")
sys.exit(1)
print("\n=== 环境验证全部通过,后续案例可正常运行 ===")
运行与验证
# 保存脚本后执行
python3 verify_env.py
通过条件:脚本输出全部4个[PASS]标记,且最后一行显示“环境验证全部通过”。若任一检查失败,根据[FAIL]后的错误信息定位:CUDA失败检查驱动与JetPack版本;TensorRT失败检查Python绑定;显存失败检查是否有其他进程占用GPU。
常见问题
- PyCUDA安装报错:确认使用JetPack自带Python 3.8,不要用系统外Python;若编译失败,先安装
sudo apt install python3-dev。 - TensorRT导入失败:JetPack 5.1对应TensorRT 8.5,若使用其他JetPack版本,Python绑定路径不同,需用
find / -name "tensorrt*.so"定位后加入PYTHONPATH。 - 显存不足:验证脚本仅需约300MB显存,若失败先运行
sudo jetson_clocks并关闭图形界面释放显存。