设计一种独立的功耗测量方案,可与任何厂商的M.2 AI加速模块配合使用
目标是确定一种可靠的功耗测量解决方案,以便我们能够将其应用于其他厂商的M.2 AI加速器,这些加速器本身不具备内置的功耗测量功能。
功率测量解决方案
有几家公司在不同价格范围内提供电力测量解决方案。
大多数采用与Hailo相同的技术:测量分流电阻两端的电压/电流降。为了将该电路接入现有系统,解决方案提供了具备电源插入功能的适配器。
Quarch
Quarch 解决方案基于一个电源分析模块(PAM),该模块可连接至各种 PCIe 和/或 M.2 接口设备。
除了功率测量外,该解决方案还具备发电和故障注入等附加功能。所有这些功能均以高价提供:
•动力分析模块(PAM):约1,500至2,500磅
•PCIe插槽M.2电源注入装置:约300-600磅
这个方案超出了我的预算,但仍然有必要提一提。
ElmorLabs
ElmorLabs 提供的解决方案可兼容标准 ATX 电源。
他们提供与ATX24、EPS和PCIe电源线连接的电源测量板,同时还提供PCIe电源插入模块,用于测量PCIe插槽的电源。
尽管ElmorLabs不支持M.2插槽,但其PCIe电源插入模块可与PCIe转M.2适配器配合使用,适用于我们的应用场景。
•ElmorLabs PMD2:99美元
•PMD PCIe 4.0 电源测量适配器:30 美元
•PCIe转M.2适配器(通用型)
这个方案价格适中,所以我决定尝试一下。
定制 INA 电路
使用INA器件创建类似Hailo的定制电路似乎是最佳解决方案。
有几家供应商销售基于INA的电路,这些电路旨在集成到更大的系统中:
•Adafruit INA228 I2C 电源监测器
•Adafruit INA23x 直流电流电压功率监测器
这些模块成本效益最高,但仅是解决方案的一部分,还需要进一步的调查和规划。
组装系统
我第一次尝试时,选择了ElmorLabs的解决方案。
这涉及几个步骤,我已在下图中进行了说明:
首先,需要将 ElmorLabs PMD2 串联连接在电脑电源供应器和主板之间。
其次,需要将 ElmorLabs PMD PCIe 电源测量适配器连接在电脑的 PCIe 插槽与我们的 M.2 AI 加速模块之间。
将PMD2连接到我们的ATX电源
这一步相当繁琐,需要剪掉所有方便的绑带,这些绑带原本能保持我的ATX电脑内部线缆整洁。
将我们的M.2模块连接到PCIe电源插入适配器
ElmorLabs PMD PCIe电源测量适配器可从外部12V电源供电(通过标准PCIe线缆连接ATX电源提供)。
•PMD PCIe 4.0 电源测量适配器
以下每个电压轨均可从主SLOT获取电源,或来自外部(EXT)12V电源:
•12V:直接来自SLOT或EXT的12V电源
•3V3 / 3V3(AUX):直接从SLOT供电,或通过由EXT 12V驱动的板载3.3V稳压器(2A)供电
正如我们将在接下来的部分中看到的,由于该车载3.3V稳压器的电流限制约为2A(未在文档中说明,这是我的推测),有时可能无法满足需求。
•Hailo-8:3.3V(2A)足以满足运行需求
•高功率M.2模块:3.3V(2A)可能不足——我观察到至少有一个模块在由PMD内置的3.3V稳压器供电时无法被识别。
选择合适的PCIe转M.2适配器
您会找到的较简单的PCIe转M.2适配器模块,只需将PCIe的3V3电源轨连接到M.2接口即可。
•UGreen PCIe转M.2适配器
更复杂且昂贵的PCIe转M.2适配器模块会从主12V电源重新生成3V3供电轨。
这款来自JEYI的电源可输出3.3V电压,最大电流达6A。
•JEYI PCIe 5.0转M.2适配卡
根据所测量的M.2 AI加速器不同,可能存在两种策略,两者均涉及内置的3.3V稳压器。
左侧的策略使用了ElmorLabs PMD内置的3.3V(2A)稳压器为M.2插槽供电。该方案适用于低功耗的Hailo-8模块,但不适用于我测试过的高功率模块。
右侧的策略使用JEYI内置的3.3V(6A)稳压器为M.2插槽提供3.3V电源。
在这两种情况下,电源均来自外部12V供电,该电源由电源供应器的PCIe1线缆提供,并由PMD2进行测量。
由于我的目标是测量多个AI加速器的功耗,因此我选择了带3.3V(6A)稳压器的PCIe转M.2适配器。
使用 mb-powermon.py 测量 Hailo-8 功率
ElmorLabs PMD2 Python API 可在 GitHub 上获取:
•ElmorLabs/PMD2-Python
为了进行测试,我在 mb-powermon.py 工具中添加了对 PMD2 探针的支持。
•AlbertaBeef/mb-powermon
第一步是克隆我开源的电源监控工具仓库。
在 hailo 容器内安装“pyserial” Python 包。
请确保您有权访问PMD2(连接到电脑时,该设备将显示为/dev/ttyACM0)
接下来,我们可以按照以下方式启动此工具:
如果我们在 Hailo 容器内的另一个控制台中重新运行 hailortcli 工具:
注意:您可能会发现 hailortcli 报告的平均值和最大值为零或完全相同(例如 0W、4.31512 == 4.31512)。如第一部分所述,这是两个应用程序同时读取 Hailo 功率 API 时出现的总冲突或部分冲突的特征——这正是当前情况,因为 mb-powermon.py 同样在轮询该 API 进行比对。我在第一部分中已建议避免这种情况,而此处我特意这样做,只是为了将两组测量结果叠加在同一图表上。显示的 Hailo 值应视为近似参考值,而非真实数据。若要获得准确的 Hailo 测量结果,请仅运行 hailortcli,如第一部分所示。
在此运行期间,您将看到类似以下内容(视频以10倍速播放):
在这段视频中,我使用相同的Hailo模块对ResNet50进行了两次基准测试。
如果我们将 output.csv 文件转换为用户友好的 html 格式,就可以同时绘制两次运行的功率和温度,并叠加 Hailo 报告的平均值:
这些结果最突出的一点是,PMD2的测量值明显小于Hailo自身的测量值,尤其是较低数值(怠速功率)。
PMD2系统设计用于测量更高功率值。一条PCIe线缆在12V电源轨上通常可连续承受高达27A(每个通道约324W)。相比之下,Hailo的功率范围仅为4W(约为PMD2量程的1%)。这很可能处于或低于ADC的噪声底限,即我们正遇到量化步长。
结论
本文中,我们实现了一种独立的功耗测量策略,可与任何厂商的M.2 AI加速模块配合使用。该策略同样适用于这些厂商的PCIe加速卡,但本人目前并未持有此类设备。
该策略较为复杂,需要一个标准的ATX电源,而这种电源并不总是容易获得,尤其是对于近年来非常流行的紧凑型迷你电脑和NUC来说。
此外,我们注意到,所测量的数值范围对于PMD2来说过于有限,而PMD2的设计初衷是用于测量更高功耗。PMD2的PCIe(12) V通道最高可达约324 W,而我们的测量范围仅为约4 W,因此实际工作在PMD2满量程的约1%左右。这很可能达到了或低于ADC的噪声底限,导致我们遇到了量化步长。
本文编译自hackster.io





