PVN3D TensorRT 环境配置指南

1. 目标

本文面向当前设备上的容器化部署,给出一套适用于本仓库 deploy/ 目录的 PVN3D TensorRT 环境配置方案。

这份指南只覆盖第一阶段推荐路线:

  1. RGB Backbone 导出为 ONNX / TensorRT
  2. Fusion Head 导出为 ONNX / TensorRT
  3. PointNet2 保持 PyTorch + 自定义 CUDA Extension 原生执行

原因见 trt_deployment_plan.md

2. 当前可用容器环境

后续部署、导出与测试统一基于现有容器环境进行,不再重新创建训练环境。

通过实际进入容器核验,当前状态如下:

  • 容器名称:pvn3d-dev
  • 进入容器命令:docker exec -it pvn3d-dev bash
  • Conda 环境:conda activate pvn3d
  • 仓库路径:/workspace/workflow/self/PVN3D
  • Python:3.8.20
  • PyTorch:1.10.0+cu113
  • TorchVision:0.11.1+cu113
  • torch.version.cuda11.3
  • GPU:NVIDIA GeForce RTX 4060 Laptop GPU
  • Driver Version:580.126.09
  • nvidia-smi 报告的 CUDA Version:13.0
  • python-pcl:已安装
  • cv2:可用,版本 4.13.0
  • open3d:可用,版本 0.15.2
  • PointNet++ / PointNet2 CUDA 扩展:已可用
  • onnx:未安装
  • onnxruntime:未安装
  • tensorrt Python 包:未安装
  • trtexec:当前不在 PATH

结论要分开看:

  1. PVN3D 原生 CUDA 推理环境是可用的
  2. TensorRT 部署环境还没有补齐,当前缺的是 ONNX/TensorRT 相关组件

因此当前更合理的下一步不是重建 PVN3D 环境,而是只补 TensorRT 导出链所需依赖,然后再进入 ONNX -> engine 阶段

建议统一使用下面的进入方式:

bash 复制代码
docker exec -it pvn3d-dev bash
conda activate pvn3d
cd /workspace/workflow/self/PVN3D

这一路径已经通过实际核验确认存在。

3. 部署原则

本仓库不适合一开始就走"整网端到端 TensorRT"。

原因很直接:

  • pvn3d/lib/pvn3d.py 中的主体网络混合了 CNN 与 PointNet2
  • PointNet2 依赖本地编译的 CUDA 扩展
  • 这些自定义算子不能直接被标准 ONNX -> TensorRT 流程稳定接收

因此当前设备上的容器部署,应该按下面的分层方式准备环境:

  • 宿主机负责 NVIDIA Driver
  • 容器通过 NVIDIA Container Toolkit 继承 GPU 能力
  • 容器内部安装 CUDA 运行时、TensorRT、PyTorch、ONNX 相关依赖
  • 容器内部编译 PVN3D 的 PointNet2 CUDA 扩展

4. 推荐版本策略

当前容器里的核心基线是:

  • Python 3.8.20
  • PyTorch 1.10.0+cu113
  • TorchVision 0.11.1+cu113
  • CUDA Runtime 侧以 cu113 为主

仓库原始 README.md 仍以 CUDA 10.2 为主,不适合直接照搬。

这里直接给出推荐组合:

组件 推荐版本 说明
TensorRT 8.6.1 优先选这一版
ONNX Runtime 1.16.3 仅用于 ONNX 校验,建议先用 CPU 版
ONNX 1.14.1 与当前导出链更稳妥

推荐依据:

  • NVIDIA TensorRT 8.6.1 官方支持矩阵覆盖 Linux x86-64、Python API,并支持 CUDA 11.3 update 112.1 update 1
  • ONNX Runtime 官方文档当前对 GPU/TensorRT 组合的重点版本已经转向 CUDA 11.8 / 12.x
  • 你的容器里 PyTorch 还是 cu113,所以 ONNX Runtime 不建议作为 GPU 主执行后端使用,先把它固定为 CPU 校验工具更稳

这部分判断里有一条是推断:

  • onnxruntime==1.16.3 不是官方"唯一指定版本",而是基于你当前 Python 3.8 + torch 1.10 + cu113 环境做的保守选择,目的只是稳定做 ONNX 校验,避免把 ORT GPU/TensorRT 兼容性问题引进来

不建议在这个容器里直接上 TensorRT 10.x 或以 CUDA 12.x 为前提的 ORT GPU 组合,原因不是它们不能工作,而是它们会把当前环境带出 torch 1.10 + cu113 的稳定区。

5. 运行前核验

由于你的容器已经就绪,本文不再展开"如何创建容器",而是聚焦"进入现有容器后如何确认可以开始 TensorRT 部署"。

建议每次开始部署前,都先完成一轮快速核验。

5.1 宿主机核验

bash 复制代码
nvidia-smi

至少确认:

  • GPU 型号
  • Driver Version
  • CUDA Version
  • 显存容量

5.2 容器内核验

进入容器后执行:

bash 复制代码
docker exec -it pvn3d-dev bash
conda activate pvn3d
cd /workspace/workflow/self/PVN3D

nvidia-smi
which trtexec
python --version

再补一组 Python 侧检查:

bash 复制代码
python - <<'PY'
import torch
print("torch:", torch.__version__)
print("torch_cuda:", torch.version.cuda)
print("cuda_available:", torch.cuda.is_available())
if torch.cuda.is_available():
    print("gpu:", torch.cuda.get_device_name(0))
PY

验收标准:

  • nvidia-smi 正常
  • torch.cuda.is_available()True

当前实测结果:

  • nvidia-smi:正常
  • torch.cuda.is_available()True
  • trtexec:未找到
  • onnx / onnxruntime / tensorrt:均未安装

6. 当前环境建议

由于你的容器里 python-pcl、PointNet++ 扩展、CUDA、PyTorch 都已经正常,不建议再重复做以下动作:

  • 不要重新安装旧版训练依赖
  • 不要重复编译 PointNet2 扩展,除非源码或 PyTorch / CUDA 版本发生变化
  • 不要为了兼容旧 README.md 去强行降级到 CUDA 10.2

当前更合理的做法是保留现有容器环境,只补下面这一组组件:

  • onnx==1.14.1
  • onnxruntime==1.16.3
  • TensorRT 8.6.1

7. 容器内环境配置

以下步骤建议全部在 pvn3d-dev 容器的 pvn3d conda 环境中执行。

7.1 基础系统依赖

如果当前容器已经能正常训练 / 推理 PVN3D,这一节通常不需要重复执行。

只有在缺少 ONNX / TensorRT Python 侧依赖时,再按需补装。

7.2 Python 基础依赖

建议仅在当前环境缺包时补装:

bash 复制代码
python -m pip install --upgrade pip setuptools wheel

7.3 安装 ONNX / TensorRT Python 侧依赖

bash 复制代码
python -m pip install onnx==1.14.1 onnxruntime==1.16.3

这里建议先装 CPU 版 onnxruntime,用途是:

  • 检查 ONNX 是否能被正常加载
  • 做导出后结构校验
  • 避免把 ORT 的 CUDA/TensorRT 依赖引进当前容器

7.4 安装 TensorRT 组件

当前容器里既没有 trtexec,也没有 tensorrt Python 包,因此 TensorRT 组件需要单独补齐。

推荐版本:TensorRT 8.6.1

原因:

  • 对当前 torch 1.10.0+cu113 环境更稳
  • 官方支持 CUDA 11.3 update 1
  • 第一阶段只需要 trtexec 和 Python API,不需要引入 TensorRT 10 的新兼容面

建议安装后至少确认下面两项:

bash 复制代码
which trtexec
python - <<'PY'
import tensorrt as trt
print(trt.__version__)
PY

如果 trtexec 仍不可用,当前的 build_trt_engine.py 无法直接执行。

7.5 推荐安装顺序

建议按这个顺序补齐:

bash 复制代码
python -m pip install onnx==1.14.1 onnxruntime==1.16.3

然后安装 TensorRT 8.6.1,再检查:

bash 复制代码
which trtexec
python - <<'PY'
import onnx
import onnxruntime as ort
import tensorrt as trt
print("onnx:", onnx.__version__)
print("onnxruntime:", ort.__version__)
print("tensorrt:", trt.__version__)
PY

7.6 仓库部署侧依赖建议

本仓库 requirements.txt 较旧,不建议在当前稳定容器中无差别重装。建议只围绕部署链按需补齐依赖。

至少需要保证以下包可用:

  • torch
  • torchvision
  • numpy
  • cython
  • opencv-python
  • pyyaml
  • easydict

8. PointNet2 扩展状态确认

你的环境里 PointNet++ 扩展已经可用,因此这里改为"确认",不是"重新编译"。

建议在部署前做一次快速验证:

bash 复制代码
python - <<'PY'
from pvn3d.lib.pointnet2_utils import _ext
print(_ext)
PY

如果这里失败,再回退到重新编译:

bash 复制代码
python setup.py build_ext --inplace

成功后应在 pvn3d/lib/pointnet2_utils 下看到 _ext*.so

9. 部署目录对应的实际执行流程

本仓库已经在 deploy/ 下提供了第一阶段 TensorRT 脚本,流程应严格按下面顺序推进。

进入环境:

bash 复制代码
docker exec -it pvn3d-dev bash
conda activate pvn3d
cd /workspace/workflow/self/PVN3D

9.1 导出 ONNX

bash 复制代码
python deploy/scripts/export_onnx.py \
  --checkpoint weights/ycb_pvn3d_best.pth.tar \
  --output-dir deploy/models/onnx \
  --target all \
  --num-classes 22 \
  --num-points 4096 \
  --height 480 \
  --width 640 \
  --device cuda

说明:

  • rgb_backbone.onnxfusion_head.onnx 会被导出
  • PointNet2 不在本步骤导出范围内
  • 第一阶段建议固定 shape,不要先开 --dynamic

9.2 检查导出结果

bash 复制代码
ls -lh deploy/models/onnx
cat deploy/models/onnx/export_manifest.json

至少应有:

  • deploy/models/onnx/rgb_backbone.onnx
  • deploy/models/onnx/fusion_head.onnx
  • deploy/models/onnx/export_manifest.json

9.3 构建 TensorRT engine

bash 复制代码
python deploy/scripts/build_trt_engine.py \
  --onnx-dir deploy/models/onnx \
  --engine-dir deploy/models/engine \
  --target all \
  --fp16 \
  --height 480 \
  --width 640 \
  --num-points 4096

如果只想先确认命令拼装正确,可先执行:

bash 复制代码
python deploy/scripts/build_trt_engine.py \
  --onnx-dir deploy/models/onnx \
  --engine-dir deploy/models/engine \
  --target all \
  --fp16 \
  --height 480 \
  --width 640 \
  --num-points 4096 \
  --dry-run

9.4 构建结果验收

bash 复制代码
ls -lh deploy/models/engine

至少应有:

  • deploy/models/engine/rgb_backbone.engine
  • deploy/models/engine/fusion_head.engine

10. 推荐验收顺序

为了降低定位成本,不要一步到位。推荐按下面顺序验收:

  1. 宿主机 nvidia-smi 正常
  2. 容器内 nvidia-smi 正常
  3. torch.cuda.is_available()True
  4. from pvn3d.lib.pointnet2_utils import _ext 成功
  5. import onnx 成功
  6. import onnxruntime 成功
  7. which trtexec 有结果
  8. python deploy/scripts/export_onnx.py ... 成功
  9. python deploy/scripts/build_trt_engine.py ... 成功

任意一步失败,都不要继续往后推。

11. 常见问题

11.1 容器内 nvidia-smi 失败

优先检查:

  • 宿主机驱动是否正常
  • 容器是否用 --gpus all 启动
  • 宿主机是否安装了 NVIDIA Container Toolkit

11.2 trtexec 找不到

当前脚本 build_trt_engine.py 会直接检查 trtexec。如果失败:

  • 先确认 TensorRT 是否真的安装到了容器里
  • 确认 trtexec 是否在 PATH
  • 或通过 --trtexec /path/to/trtexec 显式指定路径

11.3 torch 已安装但 cuda_available=False

通常是以下原因之一:

  • 装成了 CPU 版 PyTorch
  • 容器没有拿到 GPU
  • PyTorch 与容器内 CUDA 运行时不匹配

11.4 PointNet2 扩展编译失败

优先检查:

  • torch.version.cuda
  • nvcc --version
  • 编译器版本
  • 容器镜像里的 CUDA 头文件和运行时是否完整

如果只是导入失败,但你确认该环境以前可用,先检查是不是没有正确执行 conda activate pvn3d

12. 结论

针对当前设备,已经存在一个可复用的 PVN3D 容器化基线环境,因此本文的重点不是"重建训练环境",而是"在现有环境上补齐 TensorRT 部署链"。

当前最现实的路线仍然不是直接"把 PVN3D 全部转 TensorRT",而是继续沿用混合部署方案:

  • TensorRT 负责 rgb_backbonefusion_head
  • PointNet2 继续保留 CUDA Extension
  • pvn3d-dev + conda activate pvn3d 作为统一入口
  • 先验证 nvidia-smitorch.cuda.is_available()onnxtrtexec,再执行导出与构建

就当前实测结果看,阻塞点已经很明确:

  • PVN3D 原生环境可用
  • TensorRT 部署环境不完整
  • 建议补齐的版本是 onnx==1.14.1onnxruntime==1.16.3、TensorRT 8.6.1

把这一步补齐后,才能进入 deploy/scripts/export_onnx.pydeploy/scripts/build_trt_engine.py 的真实验证。

相关推荐
ages_1232 小时前
剪流AI智能手机用户真实使用体验分享:实测自动拓客与成交全解析
人工智能·智能手机
薛定猫AI2 小时前
【深度解析】从 Claude Mythos 到自进化 Agent:下一代 AI 智能体技术栈与落地实践
网络·人工智能
zhangshuang-peta2 小时前
MCP 与 AI Agent:为什么 Agent 离不开协议?
人工智能·ai agent·mcp·peta
zzwq.2 小时前
Python面向对象编程(OOP)基础详解
python
娃娃略2 小时前
【CFG】——条件生成
人工智能·机器学习
丝斯20112 小时前
AI学习笔记整理(78)——Python学习7
人工智能·笔记·学习
kuankeTech2 小时前
从“人肉跑退税”到“一键自动退”:外贸ERP助力企业数字化突围
大数据·人工智能·经验分享·软件开发·erp
数字游民95272 小时前
AI应用到具体的业务场景:电商物流费用计算
人工智能·ai·aigc·自媒体·数字游民9527
FindAI发现力量2 小时前
高效客户开发:摆脱低效推销,低成本稳定获客
大数据·人工智能·销售管理·ai销售·ai销冠·销售智能体