ML(Machine Learning)系统牵涉到ML任务、模型、数据集、框架、工具集、库、架构和推理引擎,其推理性能的评估难度较高。MLPerf的目的是达成有代表性的ML模型、指标、任务和规则的共识,它是语义层级的基准,规定有任务和规则,但实现留给提交者来做,只要模型在数学层面与规则等价就合法。MLPerf计划增加推荐系统和时间序列方面的模型和BUST场景。
移动端应用和预处理时间指标反映ML流水线的性能
没有最优的模型,每个模型是准确度、内存要求和计算复杂度之间的权衡
ML系统从上到下的组件:
MLPerf提供FP32精度的TF、PTH、ONNX模型。准确度高但计算量大的Resnet-50v1.5和牺牲准确度换取速度、计算量小的MobileNet-v1-224,Mobile相比Resnet减少6.1倍的参数和6.8倍的操作,目标检测领域的基准采用轻量(MibileNet-v1-1.0)和重量(ResNet-34)两种骨架使用SSD做目标检测的模型,翻译领域参考模型GNMT(Neural Machine Translation)
四个场景:模拟移动端设备的单流模式(SS)、自动驾驶车辆的多流模式(MS)、机器人的服务器模式(S)和云配件的离线模式(O)
不深究长尾效应、margin和confidence等概念
MLPerf推理测试流程:LoadGen请求SUT(System Under Test)加载数据,SUT加载数据到内存中,加载完数据通知LoadGen发送请求。LoadGen请求SUT做推理,推理结果返回LoadGen,LoadGen记录输出供准确度脚本读取和验证合法性。
这个过程中,数据集、LoadGen和准确度脚本是固定的,SUT由提交者自行实现。SUT实现过程中禁止的技术:
LoadGen是装载SUT衡量性能的MLPerf推理流量生成器,运行开始读取配置文件,运行过程中收集记录、调试和后处理数据的信息,最后报告数据、总结结果、确定基准过程是否合法。两种操作模式:使用全部数据的准确度模式和使用足够多数据的性能模式。支持Python、C++和C
MLPerf推理测试结果的提交包含SUT相关信息:性能分数、基准代码,着重说明SUT主要配置特点的系统描述文件和LoadGen日志文件
开放和封闭division使用相同的数据集。封闭division促使不同系统的比较,开放division鼓励ML系统、算法、优化和软硬件协同设计的创新,允许任意的技术包括重训练,其结果不与任何其他提交结果比较,但需要指出它相对于对应的封闭division中的提交的变化。根据技术成熟度,提交分为三种:可用、预览和RDO(研究、开发及其他)
结果核查采用的技术:
MLPerf推理不提供分数,因为每个ML系统在不同场景下的价值不同,不能凭主观衡量孰轻孰重
使用参数数量衡量网络复杂度是简化手段,如SSD-ResNet34的计算量是SSD-MobileNetv1的175倍,但实际的吞吐量只是后者的1/60。
通过LoadGen的准确度核查和提交者核查脚本审计和复现推理测试结果,自动发现基准中不合法之处,减少审核的人力成本。
相关工作:
人工智能系统的准确程度和性能表现有取舍权衡。MLPerf在4个场景中的S、MS、O中引入batch的概念。更多公司研发某一ML任务定制的推理芯片。不同ML应用的准确率、延迟和成本的权衡是不同的,针对某一应用需有独特的考虑和设置。
评:MLPerf提出的推理测试的流程算是比较成熟的,ML任务分不同场景测试的想法不错,对实行测试使用的软件工具链有清晰的认识,剖析影响测试系统基准表现的因素,但是相同的ML应用在不同的硬件上不同的代码实现下有个分数的比较应该可行。
本文创建于2021年8月19日15点06分,修改于2021年8月19日15点06分