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可以使用如下命令。
/usr/src/tensorrt/bin/trtexec --onnx=1.3.81_ep003.onnx --saveEngine=1.3.81_ep003.fp16.engine --useDLACore=0 --fp16 --allowGPUFallback
# --useDLACore表示使用dla的core,对于有两个core的AGX orin,可以设置0、1。
# --allowGPUFallback如果dla不支持的算子,porting到gpu上运算。
通常如果–allowGPUFallback,遇到不支持的算子log中会记录warning然后正常运行完成模型转化。否则会直接报错,提示相关算子不支持。
- dla支持的算子如下:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#dla-lay-supp-rest
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
- 无sudo
上图数据详解
- 时间戳: 12-24-2024 10:49:16:当前系统时间,便于记录和分析数据。
- 内存使用情况:RAM 1226/30698MB:当前已使用 1226 MB RAM,总共有 30698 MB 可用。
(lfb 13x4MB):线性分配块(Linear Frame Buffer)的使用情况。 - 交换空间(Swap):SWAP 0/15349MB (cached 0MB):当前未使用交换空间,缓存也为 0 MB。
- 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)。 - 内存控制器频率: EMC_FREQ 0%@3199:内存控制器当前未占用频率,最大频率为 3199 MHz。
- 图形处理器频率: GR3D_FREQ 0%@[0,0]:GPU 当前未使用,频率为 0 MHz。
- 多媒体加速器状态
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)未启用。 - 温度监控: 各个传感器的温度,例如 cpu@51.093C 表示 CPU 温度为 51.093°C。
- 功耗监控: 各电压域的功耗,例如 VDD_GPU_SOC 3120mW/3120mW 表示 GPU SoC 电压域的功耗为 3120 mW。
3.3 测试一个使用dla的任务
我们使用resnet50 做测试。相关代码已经上传至代码仓库:https://github.com/FengD/dla_test_code
使用如下指令将onnx模型转为engine文件,分别使用useDLACore和不适用DLACore生成两个文件。
/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-dla.nsys-rep
4. DLA官方文档精读与功能挖掘
Annexe
https://developer.nvidia.com/deep-learning-accelerator dla说明
https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#dla_layers dla各层说明
https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#dla_topic dla 说明
https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#dla-lay-supp-rests dla支持算子
https://developer.nvidia.com/zh-cn/blog/optimizing-cuda-memory-transfers-with-nsight-systems/ & https://developer.nvidia.com/zh-cn/blog/accelerating-data-center-and-hpc-performance-analysis-with-nvidia-nsight-systems/ 分析过程实例
暂无评论,我来发表第一篇评论!
发表评论