如何使用Axelera Metis独立功率测量方法进行测量
安装 Axelera Voyager SDK
Axelera 提供了关于安装其 Voyager SDK 的详细说明:
•Axelera Voyager SDK 安装
这可以通过 Docker 容器或 Python 虚拟环境来实现。我建议使用 Python 虚拟环境。
我在一台 AMD Ryzen AI MAX+ 395 电脑上运行基准测试。当我尝试执行推理时,出现以下错误:
这是 AMD 显卡的一个已知问题,可以通过指定 –disable-opencl 来避免。此外,我们将在本文后续部分介绍针对 AMD 显卡支持的修复方案。
重现Axelera基准测试
在测量功耗之前,我想先复现Axelera基准测试。与之前的几篇文章一致,我选择了ResNet50,因为它是分类模型中后处理阶段最轻的结构。
各种模型的基准测试结果可在其 axelera-ai-hub/voyager-sdk 仓库中找到:
•Axelera Model Zoo
•ResNet-50 v1.5 在 Metis(M.2 尺寸)上:1756 FPS
•ResNet-50 v1.5 在 Metis(PCIe 尺寸)上:1946 FPS
我们的目标当然是达到1756帧每秒的M.2基准性能。
下载 ImageNet 数据集
显然,输入数据的逻辑选择应与用于训练模型的数据集相同。Axelera 的 Voyager SDK 支持这些训练数据集,并通常会为我们自动下载它们……
对于在ImageNet上训练的ResNet-50,他们不提供下载功能,而是提供了相关操作说明:
我在ImageNet网站上创建了一个账户,提交了申请,但从未收到任何回复……
与此同时,我将继续使用另一个模型所用的数据集进行探索:data/coco。
首次吞吐量结果
我的第一次尝试没有成功,但可能反映了你对Axelera气流的初步体验,因此我已将其记录下来。
请注意,对于单一输入流,增加AIPU核心并不会提高吞吐量,而只会降低每帧的延迟。当只有一个流提供数据时,这些核心是通过降低延迟来工作的,而不是提升带宽。
随着核心数量增加,延迟有所恶化。我猜测,使用多个AIPU核心时,可能会产生额外的数据传输,从而导致更高的延迟。
供参考,以下是会话日志:
通过多个输入源提高吞吐量
与AI加速器的典型情况一样,通过多线程可以实现更高的吞吐量。这可以通过使用Axelera Voyager SDK结合多个输入源来实现。
我无法让多个输入源与图像数据集一起工作,如下所示的日志:
为了应对这些问题,我重新使用视频作为输入源,这种方法似乎对多个输入源都有效:
通过多个输入源,我们的吞吐量得到了提升,尤其是在使用多个AIPU核心时。
我不理解本次会话的延迟指标,尤其是3个AIPU核心的情况,这似乎是个异常现象。这不是打字错误,我已经多次重新运行了该会话,结果保持一致。我无法解释这一异常现象。
作为参考,以下是使用多路流的会话日志:
通过OpenCL支持提升吞吐量
如果您的系统没有显卡,将不支持此功能,所有预处理和后处理操作都将由CPU执行。
如果你的系统配备了NVIDIA GPU,这应该可以原样使用。
如果你和我一样使用的是AMD显卡,那么这无法直接使用。
不过,有一个解决办法,并且已确认将在下一个Voyager SDK版本中修复此问题:
未找到 OpenCL 平台,推理渲染效果差
通过这个绕过方法,我得以使用 –enable-opencl 参数运行推理:
启用 OpenCL 后,使用更多 AIPU 核时,我们能获得显著更高的吞吐量。
延迟与核心数量成反比。
作为参考,以下是使用多条流、并启用了OpenCL支持的4核会话日志:
超越Axelera基准测试
我不仅达到了Axelera发布的M.2基准测试1756 FPS的水平,还以约17%的差距超越了这一成绩,达到了2050 FPS。
ResNet-50 v1.5 在 Metis(M.2 尺寸)上:2050 FPS
这还高于已公布的PCIe接口形式因子结果1946 FPS,这并不正常,因为PCIe通常比M.2拥有更大的带宽余量。
最可能的解释是主机平台:Axelera公布的数据显然是在Intel 9硬件上运行的,而我使用的是更新得多的AMD Ryzen AI MAX+ 395。Metis芯片本身并不是导致公布数据瓶颈的原因,真正的问题在于主机的预处理和后处理能力。
新主机 = 更高的AIPU利用率。
对于较老的主机或资源受限的主机(例如树莓派),我预计情况会相反。
既然我们对吞吐量结果感到满意,接下来就来测量实现这一结果所消耗的功耗。
使用 mb-powermon.py 测量 Axelera Metis 功率
我们将采用在第3部分中建立的方法,使用基于INA228的定制电源测量工具。
因此,我们将使用整个系列中一直使用的同一个 mb-powermon.py 工具:
•AlbertaBeef/mb-powermon
第一步是克隆我开源电源监控工具的代码仓库。
在 voyager-sdk 虚拟环境中,安装“pyftdi”、“adafruit-blinka” 和“adafruit-circuitpython-ina228” 这三个 Python 包。
请确保您有权访问所列的 FTDI USB 设备。我已附上一个可使用的脚本,名为 fix-ft232h-permissions.sh(使用时需谨慎):
接下来,我们可以按照以下方式启动 mb-powermon 工具:
如果我们在Axelera虚拟环境中的另一个控制台中重新运行推断:
在此运行期间,您将看到类似以下内容(视频以10倍速播放):
在这段视频中,我使用同一个Axelera Metis模块对ResNet50进行了四次基准测试。
如果我们将 output.csv 文件转换为用户友好的.html 格式,就可以绘制所有四次运行的功率和温度:
INA228在四次运行中平均报告约7.6 W,芯片温度稳定在约43°C。
我甚至还能在开启显示的情况下运行基准测试,吞吐量一直保持在2000 FPS以上(视频以2倍速度播放)。
当然,屏幕未能跟上这种刷新率,导致画面帧数被丢弃,这是正常且可以预料的情况。
空闲功耗
对于对功耗敏感的应用,了解Axelera Metis模块在开机但未运行推理时的功耗情况非常有用。
我测得了两个不同的怠速功率水平:
•3.1 W - 带风扇运行
•2.9 W - 无风扇时
这表明风扇消耗了0.2瓦的该功率范围。
在我的支持ASPM的AMD Ryzen AI MAX+ 395电脑上,Axelera Metis模块将ASPM设置为关闭状态。在第一部分中,我们使用Hailo-8模块时发现,当该模块被关机至ASPM L1状态时,空闲功耗额外减少了300毫瓦。
对于持续运行的应用程序,这种空闲功耗本身就是一项基准:
已知问题
在第一次推断时,我收到了这些警告,但似乎并没有影响我的会话运行。这可能是我设置中的特定问题……我不确定。
结论
在本文中,我们已成功将功率测量方法应用于Axelera Metis M.2模块。
On resnet50,Axelera Metis 在约 7.6 瓦的功耗下可实现约 2050 FPS,即每瓦约 270 FPS。
如果我们将其与Hailo-8模块的结果进行比较,结果如下。
需要注意的是,Axelera Metis 模块采用 LPDDR,而 Hailo-8 模块则不采用:
还需注意的是,他们的两种基准测试方法有所不同。Axelera 的项目目前进展更多,需要安装 OpenCL 并使用多个流才能达到其发布的基准结果,而 Hailo 发布的基准测试则可以在任何电脑上轻松且可靠地复现。
对于持续运行的部署,空闲功耗也至关重要。Axelera Metis 的空闲功耗(约 3.1 瓦)大约是 Hailo-8 的 6 倍(约 0.5 瓦),当加速器在推理之间等待时,这种差距可能主导整个能效预算。
本文编译自hackster.io





