1. 车载AI座舱环境搭建与验证

车载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并关闭图形界面释放显存。