You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Jetson AGX Xavier导出YOLOv5 TensorRT模型遇内存不足错误的解决方法及错误是否可忽略

解决Jetson AGX Xavier导出YOLOv5 TensorRT模型时的内存不足问题

首先明确:这个错误绝对不能忽略。它意味着TensorRT在搜索最优推理优化策略时,某个候选策略需要的内存超过了设备当前可用的1536MB,导致无法使用该策略。如果放任不管,要么模型导出直接失败,要么最终生成的.engine模型会因为找不到合适的优化策略,推理性能大打折扣。

下面是几个针对性的解决方案,按优先级排序:

1. 从源头降低内存需求(最直接有效)

  • 换用更小的YOLOv5模型:比如把yolov5s换成yolov5n(nano版),模型参数规模大幅缩小,内存占用会显著降低。
  • 缩小输入图像尺寸:导出时通过--imgsz参数指定更小的尺寸,比如默认是640×640,改成416×416甚至320×320,命令示例:
    python export.py --weights yolov5s.pt --include engine --imgsz 416
    
  • 启用半精度/INT8量化:使用--fp16参数导出半精度模型,权重从32位浮点降到16位,能减少近一半的内存占用;如果对精度损失接受度高,还可以用--int8做INT8量化,内存占用进一步降低,命令示例:
    python export.py --weights yolov5s.pt --include engine --device 0 --fp16
    

2. 释放Jetson设备的可用内存

清理设备上的冗余内存占用,让TensorRT有更多可用空间:

  • 关闭后台无用进程:用htop命令查看当前内存占用情况,手动杀掉不需要的进程(比如无关的服务、测试程序)。
  • 切换到高性能功率模式:Jetson AGX Xavier的MAXN模式会释放更多内存资源,执行以下命令:
    sudo nvpmodel -m 0
    sudo jetson_clocks
    

3. 调整TensorRT的工作空间限制

TensorRT在优化时会使用一块临时工作空间,我们可以手动缩小这个空间的上限,避免内存溢出:
导出模型时通过--workspace参数指定工作空间大小(单位是GB),比如设为1GB(默认可能是4GB):

python export.py --weights yolov5s.pt --include engine --workspace 1

4. 分阶段手动转换模型

如果上述方法还是不行,可以先导出ONNX格式,再用TensorRT的trtexec工具手动转换,这样能更精细地控制内存参数:

  1. 先导出ONNX模型:
    python export.py --weights yolov5s.pt --include onnx --imgsz 416 --fp16
    
  2. trtexec转换为.engine模型,指定工作空间为1024MB:
    trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine --fp16 --workspace=1024
    

内容的提问来源于stack exchange,提问作者SJ Moon

火山引擎 最新活动