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工具手动转换,这样能更精细地控制内存参数:
- 先导出ONNX模型:
python export.py --weights yolov5s.pt --include onnx --imgsz 416 --fp16 - 用
trtexec转换为.engine模型,指定工作空间为1024MB:trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine --fp16 --workspace=1024
内容的提问来源于stack exchange,提问作者SJ Moon




