本文记录了将 Meta AI 的 Segment Anything 3 (SAM3) 模型通过 TensorRT FP16 加速的实践过程包括环境配置、性能对比、精度评估及问题排查。一、项目背景SAM3 是 Meta AI 发布的最新图像分割模型拥有 848M 参数。本文通过 TensorRT FP16 加速实现3.79 推理加速(中间加了性能监控的代码实际可以达到4x加速4090ti达到18帧)。模型信息项目说明模型SAM3 (Segment Anything 3)参数量848M输入尺寸1008×1008输出instance_masks (200个), pred_logits, semantic_segONNX文件3.2GB性能预览推理方式平均耗时FPSGPU显存CUDA FP32237ms4.24519MB 峰值可达18.8GTensorRT FP1662ms16.02399MB加速效果3.79x-节省2120MB二、镜像构建基础镜像其中ubuntu24.04默认安装python 3.12满足SAM3要求镜像自带cuda和cudnn不需要再配置nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04三、环境配置3.1 系统要求项目版本要求操作系统Ubuntu 22.04 / 24.04CUDA12.8GPUNVIDIA GPU (支持 FP16)3.2 Python 包安装pipinstallonnxruntime-gpu1.26.0 pipinstallnumpy pillow验证安装python-cimport onnxruntime as ort; print(ort.get_available_providers())# 输出应包含: [TensorrtExecutionProvider, CUDAExecutionProvider, CPUExecutionProvider]3.3 TensorRT 库安装关键版本匹配onnxruntime-gpu 1.26.0 需要 TensorRT 10.x但系统默认安装 11.x。# 安装 TensorRT 10.x 核心库apt-getinstall-ylibnvinfer10 libnvinfer-plugin10 libnvinfer-bin# 安装 ONNX 解析器 (关键)apt-getinstall-ylibnvonnxparsers10# Python 绑定 (会自动拉取 11.x 依赖需共存)apt-getinstall-ypython3-libnvinfer验证安装# 检查动态库ldconfig-p|greplibnvinfer.so# 应显示: libnvinfer.so.10 和 libnvinfer.so.11 (共存)ldconfig-p|grepnvonnxparser# 应显示: libnvonnxparser.so.10 (关键)3.4 apt 源配置确保 NVIDIA CUDA apt 源已配置# 检查源是否存在cat/etc/apt/sources.list.d/*.list|grepnvidia# 若不存在添加源 (Ubuntu 24.04)wgethttps://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb dpkg-icuda-keyring_1.1-1_all.debapt-getupdate四、问题排查实录4.1 TensorRT 版本不匹配现象[ONNXRuntimeError] : FAIL : Failed to load library libonnxruntime_providers_tensorrt.so with error: libnvinfer.so.10: cannot open shared object file原因onnxruntime-gpu 1.26.0 编译时链接 TensorRT 10.x系统安装的是 11.x。解决安装 libnvinfer10 等库与 11.x 共存。4.2 缺少 ONNX 解析器现象libnvonnxparser.so.10: cannot open shared object file原因python3-libnvinfer 只拉取 libnvonnxparsers11缺少 10 版本。解决apt-getinstall-ylibnvonnxparsers10这是最容易被忽略的问题安装后 TensorRT Provider 才能正常工作。五、技术原理深入5.1 TensorRT 加速原理TensorRT 对 ONNX 模型进行深度优化优化类型说明算子融合ConvBNReLU 合为单 kernel减少 launch 开销精度优化FP16 计算内存带宽减半Kernel选择为每个算子选择最优 CUDA 实现内存优化优化 tensor 内存布局减少读写5.2 两种集成方式对比方式ONNXTRT Provider原生 TensorRT实现ONNX Runtime 封装直接调用 TensorRT API启动时间首次慢(构建引擎)后续秒级直接加载预构建引擎推理速度~62ms~62ms (相同)开发成本低中部署灵活性高 (CUDA fallback)中结论两种方式最终执行同一 TensorRT 引擎推理速度一致。开发阶段推荐 ONNXTRT Provider。核心代码trt_options{trt_fp16_enable:True,trt_engine_cache_enable:True,trt_engine_cache_path:/root/code/SAM3-TensorRT/trt_cache,}sessort.InferenceSession(/root/code/SAM3-TensorRT/onnx_weights/sam3_dynamic.onnx,providers[TensorrtExecutionProvider,CUDAExecutionProvider],provider_options[trt_options,{}])六、测试环境6.1 硬件配置项目规格GPUNVIDIA GeForce RTX 4090 (24564 MiB)GPU驱动595.71.05CPUMontage Jintide C5218R × 80核内存251 GB DDR4操作系统Ubuntu 24.04.1 LTS6.2 软件环境项目版本CUDA12.8 (V12.8.93)TensorRT10.x 11.x (共存)onnxruntime-gpu1.26.0Python3.12PyTorch2.56.3 测试数据集项目说明图片目录/root/code/sam3/test_images_3图片数量76 张图片尺寸多尺寸原始图resize到 1008×1008 推理输入提示词“person”七、精度评估实验7.1 测试配置项目值测试图片76张筛选阈值score 0.5, mask像素 ≥ 87.2 推理性能对比指标FP32FP16差异平均耗时237.59ms62.65ms快175msFPS4.2115.963.79xGPU显存4519MB2399MB省2120MB7.3 检出物体对比指标FP32FP16差异检出总数(筛选前)872865FP32多7检出总数(筛选后)827822FP32多57.4 检出一致性指标值完全一致50/76 (65.79%)检出差异26/76 (34.21%)7.5 Mask质量对比指标值Scores平均差异0.0118Scores最大差异0.0215Mask像素平均差异1.837.6 差异特征分析检出差异呈现双向性图片FP32FP16差异方向concat_0032829FP16多检出concat_0072018FP32多检出concat_0561214FP16多检出关键发现差异主要发生在 score 接近阈值(0.5)的边缘目标且方向不确定——有时 FP16 检出更多有时 FP32 更多。八、ONNX推理非确定性现象8.1 问题发现在对比实验中发现同一脚本多次运行结果存在波动运行次数检出数量物体索引Run 11[32]Run 21[32]Run 32[32, 153]8.2 原因分析原因说明CUDA浮点累加顺序GPU并行计算顺序不固定产生微小误差阈值边界敏感score0.51 vs 0.49 决定检出与否GPU状态影响Session创建时机、显存布局等8.3 影响范围目标类型影响高置信度 (score 0.6)几乎不受影响边界置信度 (0.48~0.52)可能波动总检出统计浮动 1-2%8.4 对评估的影响本评估中 FP32 vs FP16 的部分差异来自各自运行的波动而非纯粹的精度退化。真实精度差异可能小于报告显示。九、常见问题 FAQQ1: TensorRT Provider 不在可用列表检查 libnvonnxparser.so.10ldconfig-p|grepnvonnxparser# 若无输出安装apt-getinstall-ylibnvonnxparsers10Q2: 首次运行很慢TensorRT 需构建引擎几分钟缓存到trt_cache/后续秒级启动。Q3: GPU显存不足模型 848M 参数需要足够显存。RTX 4090 可正常运行较小显卡可能需要调整。Q4: RuntimeWarning: overflow encountered in expsigmoid clip范围 [-100, 100] 过宽exp(100) 溢出。建议收窄到 [-20, 20]prob1/(1np.exp(-np.clip(mask,-20,20)))十、总结项目结论加速效果3.79x从 237ms 降至 62ms显存优化节省 2120MB占用减半精度影响Scores差异 0.0118检出一致性 65.79%差异特征主要影响边缘目标方向不确定部署建议FP16适合生产部署边缘差异可业务验证核心收益TensorRT FP16 显著提升推理效率精度损失可控适合实际应用部署。参考项目https://github.com/dataplayer12/SAM3-TensorRT环境配置Package Version-------------------------------------accelerate1.13.0annotated-doc0.0.4antlr4-python3-runtime4.9.3anyio4.13.0blinker1.7.0certifi2026.5.20charset-normalizer3.4.7click8.4.1contourpy1.3.3cryptography41.0.7cuda-bindings13.3.1cuda-pathfinder1.5.5cuda-toolkit13.0.2cycler0.12.1dbus-python1.3.2distro1.9.0distro-info1.7build1 einops0.8.2filelock3.29.0flatbuffers25.12.19fonttools4.63.0fsspec2026.4.0ftfy6.1.1h110.16.0hf-xet1.5.0httpcore1.0.9httplib20.20.4httpx0.28.1huggingface_hub1.17.0idna3.17ImageIO2.37.3iopath0.1.10Jinja23.1.6kiwisolver1.5.0kornia0.8.3kornia_rs0.1.14launchpadlib1.11.0lazr.restfulclient0.14.6lazr.uri1.0.6lazy-loader0.5Mako1.3.12markdown-it-py4.2.0MarkupSafe3.0.3matplotlib3.10.9mdurl0.1.2ml_dtypes0.5.4mpmath1.3.0networkx3.6.1numpy2.4.6nvidia-cublas13.1.1.3nvidia-cuda-cupti13.0.85nvidia-cuda-nvrtc13.0.88nvidia-cuda-runtime13.0.96nvidia-cudnn-cu139.20.0.48nvidia-cufft12.0.0.61nvidia-cufile1.15.1.6nvidia-curand10.4.0.35nvidia-cusolver12.0.4.66nvidia-cusparse12.6.3.3nvidia-cusparselt-cu130.8.1nvidia-nccl-cu132.29.7nvidia-nvjitlink13.0.88nvidia-nvshmem-cu133.4.5nvidia-nvtx13.0.85oauthlib3.2.2omegaconf2.3.0onnx1.21.0onnxconverter-common1.16.0onnxruntime1.26.0onnxruntime-gpu1.26.0opencv-python4.13.0.92packaging26.2pillow12.2.0pip24.0platformdirs4.10.0portalocker3.2.0protobuf7.35.0psutil7.2.2pycocotools2.0.11pycuda2026.1Pygments2.20.0PyGObject3.48.2PyJWT2.7.0pyparsing3.1.1python-apt2.7.7ubuntu5.2python-dateutil2.9.0.post0 pytools2026.1PyYAML6.0.3regex2026.5.9requests2.34.2rich15.0.0safetensors0.7.0scikit-image0.26.0scipy1.17.1setuptools68.1.2shellingham1.5.4siphash241.8six1.16.0ssh-import-id5.11sympy1.14.0tensorrt11.0.0.114tifffile2026.6.1timm1.0.27tokenizers0.22.2torch2.12.0torchvision0.27.0tqdm4.67.3transformers5.9.0triton3.7.0typer0.25.1typing_extensions4.15.0unattended-upgrades0.1urllib32.7.0wadllib1.3.6wcwidth0.7.0wheel0.42.0yacs0.1.8
SAM3模型加速实践记录
发布时间:2026/6/10 4:04:01
本文记录了将 Meta AI 的 Segment Anything 3 (SAM3) 模型通过 TensorRT FP16 加速的实践过程包括环境配置、性能对比、精度评估及问题排查。一、项目背景SAM3 是 Meta AI 发布的最新图像分割模型拥有 848M 参数。本文通过 TensorRT FP16 加速实现3.79 推理加速(中间加了性能监控的代码实际可以达到4x加速4090ti达到18帧)。模型信息项目说明模型SAM3 (Segment Anything 3)参数量848M输入尺寸1008×1008输出instance_masks (200个), pred_logits, semantic_segONNX文件3.2GB性能预览推理方式平均耗时FPSGPU显存CUDA FP32237ms4.24519MB 峰值可达18.8GTensorRT FP1662ms16.02399MB加速效果3.79x-节省2120MB二、镜像构建基础镜像其中ubuntu24.04默认安装python 3.12满足SAM3要求镜像自带cuda和cudnn不需要再配置nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04三、环境配置3.1 系统要求项目版本要求操作系统Ubuntu 22.04 / 24.04CUDA12.8GPUNVIDIA GPU (支持 FP16)3.2 Python 包安装pipinstallonnxruntime-gpu1.26.0 pipinstallnumpy pillow验证安装python-cimport onnxruntime as ort; print(ort.get_available_providers())# 输出应包含: [TensorrtExecutionProvider, CUDAExecutionProvider, CPUExecutionProvider]3.3 TensorRT 库安装关键版本匹配onnxruntime-gpu 1.26.0 需要 TensorRT 10.x但系统默认安装 11.x。# 安装 TensorRT 10.x 核心库apt-getinstall-ylibnvinfer10 libnvinfer-plugin10 libnvinfer-bin# 安装 ONNX 解析器 (关键)apt-getinstall-ylibnvonnxparsers10# Python 绑定 (会自动拉取 11.x 依赖需共存)apt-getinstall-ypython3-libnvinfer验证安装# 检查动态库ldconfig-p|greplibnvinfer.so# 应显示: libnvinfer.so.10 和 libnvinfer.so.11 (共存)ldconfig-p|grepnvonnxparser# 应显示: libnvonnxparser.so.10 (关键)3.4 apt 源配置确保 NVIDIA CUDA apt 源已配置# 检查源是否存在cat/etc/apt/sources.list.d/*.list|grepnvidia# 若不存在添加源 (Ubuntu 24.04)wgethttps://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb dpkg-icuda-keyring_1.1-1_all.debapt-getupdate四、问题排查实录4.1 TensorRT 版本不匹配现象[ONNXRuntimeError] : FAIL : Failed to load library libonnxruntime_providers_tensorrt.so with error: libnvinfer.so.10: cannot open shared object file原因onnxruntime-gpu 1.26.0 编译时链接 TensorRT 10.x系统安装的是 11.x。解决安装 libnvinfer10 等库与 11.x 共存。4.2 缺少 ONNX 解析器现象libnvonnxparser.so.10: cannot open shared object file原因python3-libnvinfer 只拉取 libnvonnxparsers11缺少 10 版本。解决apt-getinstall-ylibnvonnxparsers10这是最容易被忽略的问题安装后 TensorRT Provider 才能正常工作。五、技术原理深入5.1 TensorRT 加速原理TensorRT 对 ONNX 模型进行深度优化优化类型说明算子融合ConvBNReLU 合为单 kernel减少 launch 开销精度优化FP16 计算内存带宽减半Kernel选择为每个算子选择最优 CUDA 实现内存优化优化 tensor 内存布局减少读写5.2 两种集成方式对比方式ONNXTRT Provider原生 TensorRT实现ONNX Runtime 封装直接调用 TensorRT API启动时间首次慢(构建引擎)后续秒级直接加载预构建引擎推理速度~62ms~62ms (相同)开发成本低中部署灵活性高 (CUDA fallback)中结论两种方式最终执行同一 TensorRT 引擎推理速度一致。开发阶段推荐 ONNXTRT Provider。核心代码trt_options{trt_fp16_enable:True,trt_engine_cache_enable:True,trt_engine_cache_path:/root/code/SAM3-TensorRT/trt_cache,}sessort.InferenceSession(/root/code/SAM3-TensorRT/onnx_weights/sam3_dynamic.onnx,providers[TensorrtExecutionProvider,CUDAExecutionProvider],provider_options[trt_options,{}])六、测试环境6.1 硬件配置项目规格GPUNVIDIA GeForce RTX 4090 (24564 MiB)GPU驱动595.71.05CPUMontage Jintide C5218R × 80核内存251 GB DDR4操作系统Ubuntu 24.04.1 LTS6.2 软件环境项目版本CUDA12.8 (V12.8.93)TensorRT10.x 11.x (共存)onnxruntime-gpu1.26.0Python3.12PyTorch2.56.3 测试数据集项目说明图片目录/root/code/sam3/test_images_3图片数量76 张图片尺寸多尺寸原始图resize到 1008×1008 推理输入提示词“person”七、精度评估实验7.1 测试配置项目值测试图片76张筛选阈值score 0.5, mask像素 ≥ 87.2 推理性能对比指标FP32FP16差异平均耗时237.59ms62.65ms快175msFPS4.2115.963.79xGPU显存4519MB2399MB省2120MB7.3 检出物体对比指标FP32FP16差异检出总数(筛选前)872865FP32多7检出总数(筛选后)827822FP32多57.4 检出一致性指标值完全一致50/76 (65.79%)检出差异26/76 (34.21%)7.5 Mask质量对比指标值Scores平均差异0.0118Scores最大差异0.0215Mask像素平均差异1.837.6 差异特征分析检出差异呈现双向性图片FP32FP16差异方向concat_0032829FP16多检出concat_0072018FP32多检出concat_0561214FP16多检出关键发现差异主要发生在 score 接近阈值(0.5)的边缘目标且方向不确定——有时 FP16 检出更多有时 FP32 更多。八、ONNX推理非确定性现象8.1 问题发现在对比实验中发现同一脚本多次运行结果存在波动运行次数检出数量物体索引Run 11[32]Run 21[32]Run 32[32, 153]8.2 原因分析原因说明CUDA浮点累加顺序GPU并行计算顺序不固定产生微小误差阈值边界敏感score0.51 vs 0.49 决定检出与否GPU状态影响Session创建时机、显存布局等8.3 影响范围目标类型影响高置信度 (score 0.6)几乎不受影响边界置信度 (0.48~0.52)可能波动总检出统计浮动 1-2%8.4 对评估的影响本评估中 FP32 vs FP16 的部分差异来自各自运行的波动而非纯粹的精度退化。真实精度差异可能小于报告显示。九、常见问题 FAQQ1: TensorRT Provider 不在可用列表检查 libnvonnxparser.so.10ldconfig-p|grepnvonnxparser# 若无输出安装apt-getinstall-ylibnvonnxparsers10Q2: 首次运行很慢TensorRT 需构建引擎几分钟缓存到trt_cache/后续秒级启动。Q3: GPU显存不足模型 848M 参数需要足够显存。RTX 4090 可正常运行较小显卡可能需要调整。Q4: RuntimeWarning: overflow encountered in expsigmoid clip范围 [-100, 100] 过宽exp(100) 溢出。建议收窄到 [-20, 20]prob1/(1np.exp(-np.clip(mask,-20,20)))十、总结项目结论加速效果3.79x从 237ms 降至 62ms显存优化节省 2120MB占用减半精度影响Scores差异 0.0118检出一致性 65.79%差异特征主要影响边缘目标方向不确定部署建议FP16适合生产部署边缘差异可业务验证核心收益TensorRT FP16 显著提升推理效率精度损失可控适合实际应用部署。参考项目https://github.com/dataplayer12/SAM3-TensorRT环境配置Package Version-------------------------------------accelerate1.13.0annotated-doc0.0.4antlr4-python3-runtime4.9.3anyio4.13.0blinker1.7.0certifi2026.5.20charset-normalizer3.4.7click8.4.1contourpy1.3.3cryptography41.0.7cuda-bindings13.3.1cuda-pathfinder1.5.5cuda-toolkit13.0.2cycler0.12.1dbus-python1.3.2distro1.9.0distro-info1.7build1 einops0.8.2filelock3.29.0flatbuffers25.12.19fonttools4.63.0fsspec2026.4.0ftfy6.1.1h110.16.0hf-xet1.5.0httpcore1.0.9httplib20.20.4httpx0.28.1huggingface_hub1.17.0idna3.17ImageIO2.37.3iopath0.1.10Jinja23.1.6kiwisolver1.5.0kornia0.8.3kornia_rs0.1.14launchpadlib1.11.0lazr.restfulclient0.14.6lazr.uri1.0.6lazy-loader0.5Mako1.3.12markdown-it-py4.2.0MarkupSafe3.0.3matplotlib3.10.9mdurl0.1.2ml_dtypes0.5.4mpmath1.3.0networkx3.6.1numpy2.4.6nvidia-cublas13.1.1.3nvidia-cuda-cupti13.0.85nvidia-cuda-nvrtc13.0.88nvidia-cuda-runtime13.0.96nvidia-cudnn-cu139.20.0.48nvidia-cufft12.0.0.61nvidia-cufile1.15.1.6nvidia-curand10.4.0.35nvidia-cusolver12.0.4.66nvidia-cusparse12.6.3.3nvidia-cusparselt-cu130.8.1nvidia-nccl-cu132.29.7nvidia-nvjitlink13.0.88nvidia-nvshmem-cu133.4.5nvidia-nvtx13.0.85oauthlib3.2.2omegaconf2.3.0onnx1.21.0onnxconverter-common1.16.0onnxruntime1.26.0onnxruntime-gpu1.26.0opencv-python4.13.0.92packaging26.2pillow12.2.0pip24.0platformdirs4.10.0portalocker3.2.0protobuf7.35.0psutil7.2.2pycocotools2.0.11pycuda2026.1Pygments2.20.0PyGObject3.48.2PyJWT2.7.0pyparsing3.1.1python-apt2.7.7ubuntu5.2python-dateutil2.9.0.post0 pytools2026.1PyYAML6.0.3regex2026.5.9requests2.34.2rich15.0.0safetensors0.7.0scikit-image0.26.0scipy1.17.1setuptools68.1.2shellingham1.5.4siphash241.8six1.16.0ssh-import-id5.11sympy1.14.0tensorrt11.0.0.114tifffile2026.6.1timm1.0.27tokenizers0.22.2torch2.12.0torchvision0.27.0tqdm4.67.3transformers5.9.0triton3.7.0typer0.25.1typing_extensions4.15.0unattended-upgrades0.1urllib32.7.0wadllib1.3.6wcwidth0.7.0wheel0.42.0yacs0.1.8