当前位置: 首页 > news >正文

初探SAM3(一) :SAM3 TensorRT 部署踩坑记录

本文档记录在 Windows 11 + RTX 5060 Ti (Blackwell SM_120a) 环境下,将 SAM3 模型部署为 TensorRT GPU 推理引擎的完整过程,以及 FP16 精度问题的排查结果。

一、环境安装

SAM3 模型下载

先在Hugging Face上下载,让我注册填写个人信息,然后审核,结果没审核通过:

然后我直接在魔塔社区下载了,没有什么特殊限制,直接可以下载,模型比较大:

在终端下载如下图所示:

后面所有SAM3相关操作都是基于这个模型展开的。

1. 驱动与 CUDA

组件版本下载
GPU 驱动591.86+NVIDIA 官网
CUDA Toolkit12.8https://developer.nvidia.com/cuda-downloads

CUDA 12.8 安装后路径为:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8

将以下路径加入系统 PATH:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\lib\x64

2. cuDNN

cuDNN 按 CUDA 大版本打包(如cuDNN 9.x for CUDA 12.x),不分小版本,所以 CUDA 12.9 的 cuDNN 可以直接用于 CUDA 12.8。

安装方式:下载对应 CUDA 12.x 的 cuDNN zip,将bin/lib/include/文件覆盖到 CUDA 安装目录。

当前环境使用:

  • cuDNN 8.9.7(CUDA 12.8 自带,位于bin/cudnn64_8.dll
  • cuDNN 9.23.0(从 CUDA 12.9 包覆盖,新增cudnn64_9.dll系列)

两个版本共存,TensorRT 实际调用哪个取决于它链接的是cudnn64_8.dll还是cudnn64_9.dll

3. TensorRT

项目使用两个版本对比:

版本路径用途
TRT-RTX 1.5.0.114C:\My_Project\src\deeplearning\SAM3\TensorRT-RTX-1.5.0.114\主要部署版本
TRT 10.11.0.33C:\package\TensorRT-10.11.0.33\对比测试

Windows 环境配置(Python 脚本中)

importos# TRT-RTX 路径os.environ["PATH"]=r"C:\My_Project\src\deeplearning\SAM3\TensorRT-RTX-1.5.0.114\bin;"+os.environ.get("PATH","")os.add_dll_directory(r"C:\My_Project\src\deeplearning\SAM3\TensorRT-RTX-1.5.0.114\bin")os.add_dll_directory(r"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\bin")# 使用标准 TRT 时还需注册插件importtensorrtastrt trt.init_libnvinfer_plugins(trt.Logger(trt.Logger.WARNING),"")

注意:TRT-RTX 导入tensorrt_rtx模块,标准 TRT 导入tensorrt模块。

4. ONNX Runtime

用于预处理(图像缩放、归一化)。项目使用 onnxruntime-win-x64-gpu-1.26.0。

C:\My_Project\src\deeplearning\SAM3\sjl\onnxruntime-win-x64-gpu-1.26.0\onnxruntime-win-x64-gpu-1.26.0\

PyPI 安装:

pipinstallonnxruntime-gpu==1.26.0

PyTorch 自带 cuDNN(版本 91002),独立于系统 cuDNN,不影响 TensorRT。

5. Python 环境

项目使用 Anaconda 管理环境:

conda create-nsam3python=3.10conda activate sam3 pipinstallnumpy opencv-python onnxruntime-gpu tensorrt-cu12

二、ONNX 模型导出

SAM3 ONNX 导出采用两步法

Step 1: 导出核心模型

位置:sjl/export_onnx/export_onnx/export_onnx.py

由于F.interpolate(antialias=True)无法直接导出为 ONNX,预处理被剥离出核心模型。核心模型只包含 ViT 编码器 + 解码器 + 分割头。

Step 2: 导出预处理模型

位置:sjl/export_onnx/export_onnx/export_preprocess_onnx.py

用 ONNX 原生算子构建预处理流程:BGR→RGB 转换 → Resize(1008×1008) → 归一化。

导出产物在sjl/export_onnx/exports/目录下,包含 FP16 和 FP32 两个版本。

多类别文本检测

SAM3 原生支持批量文本编码(forward_text()接受List[str])。

  • 方案 A(推荐):导出时预先编码所有类别,作为 ONNX 常量。推理时无文本编码开销,但类别在导出时固定。
  • 方案 B:将language_featureslanguage_mask设为 ONNX 输入,运行时灵活但需 CPU 预计算文本特征。

三、TensorRT Engine 构建与测试

Engine 文件列表

文件来源精度大小
sam3_core_fp32_trt_rtx.engineTRT-RTXFP32~1.9G
sam3_core_fp16_trt_rtx.engineTRT-RTXFP16~1.0G
sam3_core_bf16_trt_rtx.engineTRT-RTXFLOAT (非 BF16)~1.9G
sam3_core_fp16_from_fp32.engineTRT 10.11,--fp16FP16~1.0G
sam3_core_fp16_notf32.engineTRT 10.11,--fp16,--noTF32FP16~1.0G

测试脚本

脚本用途
test_trt_rtx.py主测试脚本(TRT-RTX 推理 + 计时 benchmark)
test_fp16_quick.py快速 FP16 验证
profile_fp16.pyFP16 vs FP32 精度对比
dump_layers.py层结构分析
dump_layers2.py层名称逐行 dump

推理流程

原始图像 (cv2.imread) → ONNX 预处理 (CPU) → (1, 3, 1008, 1008) FP32/FP16 → CUDA memcpy → GPU → TensorRT engine 推理 → 输出 (boxes, scores, masks, presence_logit) → CUDA memcpy → CPU → 后处理 (NMS, 阈值)

四、FP16 精度问题排查结果

问题现象

FP16 engine 推理得到的 detection scores 全部异常偏低(max=0.02),而期望值应接近 0.94。

Enginepresence_logitscores max精度正确?
ONNX FP32 CPU+5.670.942正确
ONNX FP16 CPU+5.670.942正确
TRT-RTX FP32+5.670.942正确
TRT-RTX FP16-2.820.021错误
TRT 10.11 FP16-4.660.003错误

排查步骤

#测试结果结论
1ONNX FP16 CPU 推理正确FP16 模型本身没问题
2TRT-RTX FP32 GPU 推理正确GPU 执行路径正常
3TRT-RTX FP16 GPU 推理错误FP16 GPU kernel 有问题
4升级 cuDNN 8.9.7 → 9.23.0无变化不是 cuDNN 单版本问题
5TRT 10.11 FP16错误不是 TRT-RTX 特有的 bug
6--builderOptimizationLevel=0错误不是优化级别导致
7--noCompilationCache错误不是编译缓存导致
8--noTF32错误不是 TF32 精度模式导致

速度对比(N=30 次迭代)

Engine平均/帧FPS
TRT-RTX FP32509ms2.0
TRT-RTX FP16122ms8.1
TRT 10.11 FP1695ms10.4

FP16 速度快 4-5 倍,但精度完全不可用。

层结构分析

  • FP32 engine:1042 层
  • FP16 engine:786 层(FP16 模式有更多层融合)
  • 基本层类型相同,仅融合程度不同
  • 完整层 dump 见trt_test/layers_dump.txt

初步怀疑-待验证

TensorRT 的 FP16 GEMM/卷积 GPU kernel 在 Blackwell SM_120 架构上计算错误。

关键证据:

  1. ONNX FP16 CPU 正确 → 模型 FP16 精度本身够用
  2. TRT FP32 GPU 正确 → GPU 执行正常
  3. TRT-RTX 和 TRT 10.11 都错 → 不是某个 TRT 版本的 bug
  4. cuDNN 升级无效 → 不是单一 cuDNN 版本问题

SM_120 是 2025 年新架构,TensorRT/cuDNN 的 FP16 kernel 在该架构上未经验证。其他项目(如 dataplayer12/SAM3-TensorRT)使用 RTX 3090 (Ampere)、A100、H100、GB200 (服务器 Blackwell) 等成熟 GPU,FP16 正常工作,问题仅出现在桌面版 SM_120a (RTX 5060 Ti)。


五、解决方案与下一步

当前可用方案

使用 FP32 engine

  • 精度:正确(scores max=0.942,与 ONNX 一致)
  • 速度:509ms/帧,2 FPS
  • Engine 文件:sam3_core_fp32_trt_rtx.engine

修复方向

  1. **使用更新版本的 cuDNN **:后续版本可能修复 SM_120 FP16 kernel
  2. 等待 TRT-RTX 2.x 或 TRT 11.x:新 TRT 版本可能加入 SM_120a 验证
  3. CUDA 12.9 完整工具链:NVIDIA 发布正式版 CUDA 12.9 后,可能包含 SM_120 修复
  4. 测试 BF16 路径:如果 NVIDIA 在 TRT-RTX 中加入--bf16支持,BF16 可能走不同的 GPU kernel 路径
http://www.jsqmd.com/news/1163705/

相关文章:

  • Solidity 调试工具链实战:Tenderly、Hardhat Console 与 Foundry 堆栈追踪对比
  • Github二步验证(2FA)开启及本地纯离线应用接入验证教程
  • 搬家寄大件包裹,哪个物流最便宜? - 快递物流资讯
  • 铁岭GEO系统贴牌服务商靠谱源头厂商综合实力推荐TOP3:本地合伙人选择源头厂商的关键判断维度 - 小随科技
  • Obsidian Excel插件:一站式解决笔记中电子表格管理的专业方案
  • 郑州江诗丹顿回收价格查询及各大回收平台实测排行(2026年7月最新数据) - 尊奢回收二奢平台
  • 原来四川这些口碑好的设备搬迁企业,究竟好在哪里?
  • 当色彩空间成为工程选择:sRGB、Display P3 与 OKLCH 在前端工程中的取舍
  • nullifier 没和 note 绑死,隐私池就会被双花
  • Web3 开发者效率工具排行榜:从编码到部署的一站式工具链选型指南
  • 3步解决Cursor AI使用限制:免费体验Pro功能的完整指南
  • 广州欧米茄回收价格查询和靠谱回收平台实测排行(2026年7月最新数据) - 天价名表回收平台
  • 《唤醒你的AI同事:WorkBuddy从零上手》007:初始配置向导
  • 郑州城市职业学院参编清华教材背后的育人突围之路
  • 无锡惠山金价高位出手攻略,三大连锁黄金回收门店实地测评 - 福金阁黄金回收
  • 浩卡联盟(号卡联盟)一级账号怎么注册?一篇讲透为什么越来越多人要升一级? - 流量卡代理招商
  • Cursor Cli 入门指南(Claude Code 深度用户快速迁移)
  • 5G 广播这条路,2026 年走到了哪一步——美国规划商用、德国试点续期,一份全球节奏盘点
  • 智能运维时代,运维人再也不用无休止熬夜值班
  • 2026年石嘴山 GEO系统贴牌服务商靠谱源头厂商综合实力推荐TOP3:本地合伙人如何选对源头工厂,搭建长期AI搜索业务线? - 小随科技
  • 应用打包公证_packaging-notarization
  • 核心设计模式:AXI 握手与背压实现
  • 欧拉函数小证明
  • 跳表实现与性能剖析:为什么 Redis 选它而不是红黑树
  • 2026年呼伦贝尔GEO系统贴牌服务商靠谱源头厂商综合实力推荐:草原城市如何选择AI搜索时代的OEM合作路径? - 小随科技
  • 2026山东美国留学机构哪家好?济南青岛家长重点比较十家更靠谱 - 环球新视野
  • 南京宝珀回收价格查询及靠谱回收平台实测排行(2026年7月最新) - 嘉价奢侈品回收平台
  • 内容6 类和对象4
  • ReCAP: Recursive Context-Aware Reasoning and Planning for Large Language Model Agents
  • 如何解决区域创新资源分布不清、配置不精准的问题?