Orin 上 DLA 和 GPU 怎么分工、怎么用

📅 2026/8/4 17:02:02
Orin 上 DLA 和 GPU 怎么分工、怎么用
文章目录1. GPU 和 DLA 差在哪2. 各 SKU 有几颗 DLA3. 负载怎么分4. trtexec 指定 DLA4.1 构建示例4.2 构建日志看什么4.3 INT84.4 fallback 太多时改模型5. DeepStream 里怎么配6. 怎么对比有没有收益7. 常见坑8. 落地顺序9. 小结摘要Orin 上很多人把所有推理都丢给 GPUDLA 闲着也有人听说 DLA 省电就把整网 YOLO 硬塞上去结果大半层 fallback体感更差。本文写 GPU 与 DLA 各自适合干什么、各 SKU 有几颗 DLA、trtexec/ DeepStream 怎么指定、以及 fallback 太多时怎么判断划不划算。适合已经能在 Orin 上用 TensorRT 跑通检测的人。规格以 NVIDIA 手册为准。1. GPU 和 DLA 差在哪GPUAmpereDLANVDLA本质通用并行计算面向 CNN 的固定功能加速器强项灵活、吞吐通常更高能效好可把负载从 GPU 卸走精度FP32 / FP16 / INT8 等更宽主要是FP16 / INT8算子覆盖面大只支持有限层与参数范围常见放法主检测、自定义算子分类、属性、轻量 CNNGPU 偏灵活和峰值DLA 偏卸载和能效。指望 DLA 单独把 YOLO 峰值 FPS 压过 GPU多数会失望用它腾出 GPU 做后处理、第二模型或编码才对路。和前面几篇的衔接TensorRT / YOLO主模型在 GPU 上建引擎、测速单路 / 多路 DeepStream视频链怎么接本文有 DLA 时第二份算力怎么挂少和 GPU 抢入门可看Getting Started with DLA on Jetson OrinTensorRT 侧Working with DLA。2. 各 SKU 有几颗 DLA模组常见公开规格DLAAGX Orin通常2颗Orin NX 16GB2颗Orin NX 8GB1颗Orin Nano 4GB / 8GB没有Orin Nano上调--useDLACore没有意义NX 8GB只有 core0别写1AGX / NX 16GB可以按 GPU DLA0 DLA1 排负载以手头模组数据手册为准。cat/etc/nv_tegra_releasesudonvpmodel-qwhichtrtexec trtexec--help|rg-idla|fallback测速前固定nvpmodel另开终端盯tegrastats。档位乱跳时分不清是 DLA 的收益还是 GPU 降频。3. 负载怎么分负载优先原因主检测YOLOv8 等GPU层多DLA 常大量 fallback二次分类 / 属性 / 小网DLACNN 更规整两路同构轻量模型DLA0 DLA1若有并行卸载前后处理、OSD、编码、自定义 CUDAGPU / CPUDLA 不管端侧小 LLM / 怪算子多GPUDLA 基本帮不上常见三种排法主模型 GPU辅模型 DLA— 多路检测最常用同模型 GPU 一份 DLA 一份— 抬总吞吐单路延迟未必更好整网塞 DLA— 只适合层支持好的老 CNN / 裁剪网YOLO 多数要开 GPU Fallback官网 TOPS 含 DLA不等于 YOLO 端到端翻倍。也别和 PVA 搞混本文说的推理卸载主线是TensorRT → DLA。4. trtexec 指定 DLA引擎仍须在目标板构建。多出来的关键开关--useDLACoreN指定核--allowGPUFallback不支持层回 GPU多数实网要开--fp16/--int8DLA 不走随意 FP32没有--allowGPUFallback时遇到不支持层往往直接构建失败。YOLO、带自定义后处理的导出模型几乎都要开。4.1 构建示例# 在 Orin NX / AGX 本机执行trtexec\--onnx/home/ubuntu/models/classifier.onnx\--saveEngine/home/ubuntu/models/classifier_dla0_fp16.engine\--fp16\--useDLACore0\--allowGPUFallback\--memPoolSizeworkspace:256M有第二颗时改--useDLACore1engine 文件名也分开存避免 DeepStream 里指错核。trtexec\--onnx/home/ubuntu/models/classifier.onnx\--saveEngine/home/ubuntu/models/classifier_dla1_fp16.engine\--fp16\--useDLACore1\--allowGPUFallbackAGX / NX 16GB 上可先三进程摸并发# 终端 1DLA0trtexec--loadEngineclassifier_dla0_fp16.engine--useDLACore0--warmUp500--duration30# 终端 2DLA1trtexec--loadEngineclassifier_dla1_fp16.engine--useDLACore1--warmUp500--duration30# 终端 3GPU 主检测trtexec--loadEngineyolov8n_fp16.engine--warmUp500--duration30三者能稳住再进业务。DLA 一起跑、GPU 检测立刻掉帧先查内存带宽和功耗档。构建时可加--dumpLayerInfo/--dumpProfile以当前trtexec --help为准把层设备分布留成文本后面和纯 GPU 引擎对比时有据可查。4.2 构建日志看什么哪些层在 DLA哪些层 fallback 到 GPU有没有大量 reformat大半计算都在 fallback这个引擎名义上用了 DLA收益很小还可能因 DLA/GPU 倒数据更慢。fallback 一高不如纯 GPU或改辅模型结构。层限制见 TensorRT 文档DLA Supported Layers and Restrictions。卷积核大小、stride、部分激活、部分 Resize/Softmax 条件都可能把层踢回 GPU。检测头、NMS 相关子图尤其容易碎。4.3 INT8INT8 更贴近能效场景但要校准比 FP16 重。顺序先 FP16 allowGPUFallback跑通 → 看层分布和占用 → 再上 INT8。校准集要覆盖真实输入否则 DLA INT8 掉点比 GPU INT8 更难查。4.4 fallback 太多时改模型优先改网用更常规的卷积、激活、池化少用稀奇 Resize、动态 shape输入尺寸先固定辅模型用规整分类头别把检测头整段塞进 DLA二级网络大部分计算留在 DLA 就够用不必追求 primary YOLO 整网上 DLA。改写思路见上文 Orin DLA 博客及配套仓库。5. DeepStream 里怎么配DLA 更常挂在secondary GIE而不是 primary YOLO 整网硬塞。nvinfer里常见项名称随版本略有差异以当前 sample 为准[property] gpu-id0 enable-dla1 use-dla-core0 network-mode2 batch-size4 model-engine-file/home/ubuntu/models/classifier_dla0_fp16.engine labelfile-path/home/ubuntu/models/labels_attr.txt角色建议primary-gie先留 GPUsecondary-gie优先试 DLA0 / DLA1engine按目标use-dla-core本板生成batch-size、engine、路数仍要对齐。engine 按 core 0 建的配置里却写use-dla-core1轻则重建、重则起不来。可以先用trtexec验证辅模型能在该核跑再嵌进 DeepStream。部分版本二次网络还有operate-on-gie-id、operate-on-class-ids用来限制只对某些类别做二次推理。路数一多这比全量二次推理更省 DLA。6. 怎么对比有没有收益同一功耗档下做对照别只盯一个 FPS方案主模型辅模型常见结果AGPUGPU基线GPU 容易顶满BGPUDLA0多数场景更稳CDLAfallback—YOLO 常不划算DGPU DLA 同模双开—看总吞吐不看单路延迟tegrastats# 另开终端跑 trtexec / deepstream-app开 DLA 后应能看到 GPU 压力下降、辅模型少抢主检测。GPU 一点没轻、延迟还变差多半是 fallback 或 reformat 太多。记录时写清板型、JetPack、功耗档、模型、batch、是否含解码/OSD缺这些条件的快慢结论基本没法复现。tegrastats对 DLA 字段的展示随 JetPack 会变以当前版本输出为准。7. 常见坑现象多见原因处理Nano 上 DLA 失败无 DLA只用 GPU或换 NX/AGXcore1 失败NX 8GB 只有 1 颗用 core 0用了 DLA 更慢fallback / reformat 多看构建日志改模型或回 GPUengine 换板不能用绑定硬件与 TRT 版本目标板重建DeepStream 开了 enable-dla 无效engine 与 core 不匹配或配置项版本差异对照当前 sample纯推理对比觉得 DLA 慢和 GPU 峰值比错了改看整机并发与功耗辅模型精度异常INT8 校准差或预处理不一致先回到 FP16 对比YOLO 尤其容易少数层在 DLA其余在 GPU中间还改 layout链路被切碎。宣传写支持 GPUDLA 并发不等于没写--useDLACore就会自动分流。8. 落地顺序确认有几颗 DLA主检测留 GPU辅模型分类 / 属性走 DLA0FP16 allowGPUFallback看 fallback 比例再进 DeepStream secondary-gie 或自建多模型进程同档对比占用、温度、掉帧这些情况先别上 DLA板子是 Nano只有主检测、没有二级网络fallback 已经过半RTSP / batch / 分辨率还没稳住。主链路不稳时加 DLA只是多一个变量。INT8、双 DLA 堆吞吐、改结构提兼容性放到辅模型站稳之后。9. 小结DLA 不是第二块更强的 GPU而是卸载规整 CNN、换能效和并发余量用的。Nano 没有NX/AGX 才谈得上分工。一般做法是检测留 GPU、分类/属性进 DLA用构建日志判断划不划算而不是先把 YOLO 整个塞进去。