【nvidia】DLA的学习了解与使用


0. 为什么要学习DLA,DLA有什么用

DLA(Deep Learning Accelerator 是nvidia提供的边缘AI平台的硬件加速能力。他的概念比较大,既有硬件的部分,也有软件的部分,下文的官方文档链接中将DLA描述的非常清楚。
https://developer.nvidia.com/deep-learning-accelerator

DLA硬件特指在部分Nvidia的边缘端计算平台上内置的DLA硬件加速器,Jetson Orin系列使用Nvdlav2架构(相较于Xavier上的初代有最高达9倍的性能提升),Jetson Xavier系列则是Nvdla初代架构。而软件则是包含DLA的编译器核运行时软件栈在内的所有工具。先在offline时将网络模型翻译成二进制的dla执行图,用于集成到TensorRT中使用,而runtime则是包含了dla的固件和相关驱动。


除了直接使用dla的软件,我们也可以使用TensorRT发布的统一的平台,来对onnx模型的基于相关参数配置部署于dla上运行。

而相关改动带来的实际收益则是用更低的功耗,更高的性能,释放出cpu和gpu给更多其他应用,并为应用带来更健壮的性能。

1. 体验一下DLA

如果是直接使用TensorRT可以使用如下命令。

  1. /usr/src/tensorrt/bin/trtexec --onnx=1.3.81_ep003.onnx --saveEngine=1.3.81_ep003.fp16.engine --useDLACore=0 --fp16 --allowGPUFallback
  2. # --useDLACore表示使用dla的core,对于有两个core的AGX orin,可以设置0、1。
  3. # --allowGPUFallback如果dla不支持的算子,porting到gpu上运算。

通常如果–allowGPUFallback,遇到不支持的算子log中会记录warning然后正常运行完成模型转化。否则会直接报错,提示相关算子不支持。

2. DLA,cuDLA,nvDLA

  • DLA 是一个广义的术语,涵盖所有用于深度学习加速的硬件和软件解决方案。
  • nvDLA 是 NVIDIA 提供的专用深度学习硬件加速器,优化用于边缘计算和嵌入式系统,集成在 NVIDIA 的硬件产品中。
  • cuDLA 则是基于 NVIDIA CUDA 平台的软件解决方案,通过利用 GPU 的并行计算能力和优化库(如 cuDNN)来加速深度学习任务。

3. 如何检查和分析dla的效果

3.1 查看驱动

首先,基于1我们已经能够知道我们所使用的硬件中是否包含DLA硬件单元,在已经明确硬件包含DLA单元后,我们还需要查看操作系统是否已经有了完备的驱动能够使用DLA的io。

可以使用sudo dmesg |grep dla查看,我使用的agx orin拥有两个dla单元。ps: 早期的驱动dla作为一个单独的io可以使用cat /dev/dla* 看到相关硬件,随着l4t的迭代,目前已经没有了dla的直接硬件io。

3.2 分析使用率

可以使用nvidia自带的指令tegrastats进行分析,当然也可以使用nsight-system&nsight-compute&nsight-graphics等nsight工具包进行性能分析。

  • 使用tegrastats需要注意的是是否使用root权限,如果不适用root权限,是无法看到详细信息的,dla占用等都在详细信息中。

    • 无sudo
    • 有sudo
  • 上图数据详解

  1. 时间戳: 12-24-2024 10:49:16:当前系统时间,便于记录和分析数据。
  2. 内存使用情况:RAM 1226/30698MB:当前已使用 1226 MB RAM,总共有 30698 MB 可用。
    (lfb 13x4MB):线性分配块(Linear Frame Buffer)的使用情况。
  3. 交换空间(Swap):SWAP 0/15349MB (cached 0MB):当前未使用交换空间,缓存也为 0 MB。
  4. CPU 使用率: CPU [5%@729,0%@729,1%@729,0%@729,0%@729,0%@729,0%@729,1%@729,off,off,off,off]:
    每个 CPU 核心的使用率及其频率(MHz)。
    前 8 个核分别为 5%、0%、1%、0%、0%、0%、0%、1%,后 4 个核处于关闭状态(off)。
  5. 内存控制器频率: EMC_FREQ 0%@3199:内存控制器当前未占用频率,最大频率为 3199 MHz。
  6. 图形处理器频率: GR3D_FREQ 0%@[0,0]:GPU 当前未使用,频率为 0 MHz。
  7. 多媒体加速器状态
    NVENC off:NVIDIA 视频编码器未启用。
    NVDEC off:NVIDIA 视频解码器未启用。
    NVJPG off、NVJPG1 off:JPEG 编码器未启用。
    VIC off:视频编解码接口未启用。
    OFA off:Open Firmware Accelerator 未启用。
    NVDLA0 off、NVDLA1 off:NVIDIA 深度学习加速器 0 和 1 未启用。
    PVA0_FREQ off:PVA(Programmable Vision Accelerator)未启用。
  8. 温度监控: 各个传感器的温度,例如 cpu@51.093C 表示 CPU 温度为 51.093°C。
  9. 功耗监控: 各电压域的功耗,例如 VDD_GPU_SOC 3120mW/3120mW 表示 GPU SoC 电压域的功耗为 3120 mW。

3.3 测试一个使用dla的任务

我们使用resnet50 做测试。相关代码已经上传至代码仓库:https://github.com/FengD/dla_test_code

  1. /usr/src/tensorrt/bin/trtexec --onnx=resnet50-v2-7.onnx --saveEngine=resnet50-v2-7-dla-fp16.engine --useDLACore=0 --fp16 --allowGPUFallback
  • 通过执行编译好的程序可以看到如下信息:当使用dlacore时,模型得推理耗时相较于不适用dlacore有明显增加(经过warmup之后,usedlacore在17ms左右,不适用在3ms左右),但好处是对gpu的tensorcore的使用下降,可以看到GR3D_FREQ显卡使用率从90%下降至1%,猜测可能是因为模型中有dla不支持的层,所以内存使用频率有上升趋势。这个趋势从官方文档的说明中也得到证实。

3.4. 进一步使用nsight-system进行分析

进一步保存了nsys的报告用于详细分析。

【附件】profile_report.nsys-rep

【附件】profile_report-dla.nsys-rep

4. DLA官方文档精读与功能挖掘

Annexe


dingfeng 2024年12月31日 11:26 589 0 条评论 收藏文档
评论

暂无评论,我来发表第一篇评论!

发表评论