1. 缘起:一个微处理器分析师与AI基准测试的相遇
我职业生涯的大部分时间都在与晶体管、指令集和缓存延迟打交道。作为《微处理器报告》的分析师和Real World Technologies的运营者,我的世界是由SPECint、功耗墙和IPC(每周期指令数)构成的。直到几年前,我对于机器学习的理解,还停留在大学时期数学课上接触到的统计模型,以及后来在分析专利数据时,那些试图预测成功率的、效果时好时坏的算法尝试。转折点发生在2017年,一次为一家专注于机器学习加速器的初创公司提供专利组合分析的技术咨询。那是我第一次真正深入硬件层面,去理解为了高效运行矩阵乘法和卷积运算,芯片架构师们正在如何重新思考计算单元、内存层级和数据流。这扇门一旦打开,就再也关不上了。
我意识到,我们正站在一个堪比个人电脑或智能手机兴起的拐点。但和那些时代不同,驱动这场变革的“杀手级应用”——深度学习,其性能评估却是一片混沌。当时,业界充斥着各种“峰值算力”(TOPS)的数字游戏,就像早年只比拼CPU主频(GHz)一样片面。一个在特定小模型上跑得飞快的加速器,面对真实的、复杂的ResNet或Transformer模型时可能完全失灵。硬件工程师、软件开发者、采购决策者,大家都在迷雾中摸索,缺乏一个像SPEC之于通用计算那样公认的“标尺”。就在这时,我通过行业内的朋友听说了MLPerf。
MLPerf最初给我的印象,是一群来自谷歌、百度、伯克利、斯坦福的“疯子”,他们想为机器学习系统打造一套基准测试。这立刻引起了我的共鸣。我深知好的基准测试(如SPECcpu)如何能引领整个行业朝着提升真实性能的方向健康发展,而糟糕的基准又如何催生“基准营销”,误导设计,最终损害用户利益。我在智能手机基准测试的乱象中见过太多反面教材。机器学习系统更为复杂,涉及硬件、框架、算法、数据预处理等多个层面,如果没有一个设计精良的基准,混乱只会更甚。
于是,我抱着学习和观察的心态,混进了他们的邮件列表和早期讨论。一个关键的争论点吸引了我:是否以及如何测量训练系统的功耗?这问题直击要害。训练一个大型模型可能消耗相当于一个小镇数日的电量,能效与绝对性能同样重要。我的一位朋友曾主导创建了SPECpower_ssj2008,我们没少讨论其中测量方法、环境标准化等令人头疼的细节。我觉得自己在这方面积累的经验或许能帮上点忙,便在2018年初,就这个问题与MLPerf的几位核心成员,包括Dave Patterson和Jonah Alben,进行了一些交流。
2. 为何选择深入参与:不止于兴趣
与MLPerf社区的初步接触,让我决定不再只做旁观者。原因有几个层面,它们共同构成了一种“必须加入”的推力。
2.1 与顶尖头脑共事的机会
这个名单本身就是一种吸引力。Greg Diamos,来自百度DeepSpeech团队,也是早期基准测试工具DeepBench的推动者;Jonah Alben,领导了多代NVIDIA GPU架构设计,在硬件/软件协同设计上有着教科书级的成功经验;还有来自谷歌TPU团队、英特尔前Nervana团队、微软Azure的关键贡献者。这些人不是在预测未来,他们就是在建造未来。与他们讨论问题,就像站在技术浪潮的源头。我记得有一次与Greg讨论不同框架下卷积操作的细微差别,他随手举出的实例,立刻澄清了我苦思许久的疑惑。这种高质量的信息交换,是独自阅读论文无法比拟的。
2.2 填补行业空白的使命感
2018年,机器学习加速器如雨后春笋般涌现,但评估它们就像用不同的尺子量身高。有的用ImageNet的Top-1准确率,有的用每秒处理的图片数,但 batch size、预处理流程、精度格式(FP32, FP16, INT8)各不相同,结果根本无法直接对比。业界急需一套“通用语言”。MLPerf汇聚了来自学术界和工业界最懂机器学习系统的人,他们既有理论高度,又深知工程实现的痛点。我看到这是最有希望打造出这套“通用语言”的团队。我的背景——对计算机架构的深入理解、对基准测试哲学的认同,以及对功耗测量复杂性的认知——恰好可以补充团队在纯粹硬件评估和系统级度量方面的视角。
2.3 个人学习的绝佳路径
我自认在硬件架构方面已有一定积累,但机器学习是一个软件定义一切的领域。框架(TensorFlow, PyTorch)、调度器、编译器优化,这些对我而言还是一片亟待探索的大陆。MLPerf的工作要求你不仅要知道硬件怎么跑,还要知道软件怎么喂,以及为什么这么喂。参与基准测试的定义,是理解整个软件栈最直接、最深刻的方式。你需要弄明白为什么ResNet-50的特定残差块结构对缓存不友好,需要理解Transformer模型中自注意力层的计算与内存访问特征。这不是纸上谈兵,而是要落实到可重复运行的代码和可测量的结果上。
于是,在2018年5月斯坦福教师俱乐部的那次MLPerf社区会议上,当Kim Hazelwood(一位从终身教授转型为Facebook工程经理的杰出女性)问是否有人愿意做会议记录时,我几乎是下意识地举了手。她后来笑称这是她的“战地提拔”。事实证明,在一个工程师更热衷于设计而非文档的群体里,主动承担记录工作,是融入并理解全局最快的方式。这份“秘书”工作,成了我深入MLPerf核心的通行证。
3. 从记录员到联合主席:在MLPerf的实践与成长
我的角色很快从记录员演变为更积极的贡献者。随着v0.5训练基准套件开发工作的展开,我们成立了多个工作组。我几乎参加了所有组的会议,并逐渐对团队的整体努力有了全面的理解。自然而然地,当社区成员有问题时,我常常成为那个被询问的对象。大概基于这种积累,我被邀请与Vijay Janapa Reddi、Carole-Jean Wu、Christine Cheng和Greg Diamos一同协助领导推理(Inference)工作组。这项工作我一直做到现在,并担任推理基准的联合主席。
3.1 基准测试开发的“脏活累活”
开发一套公允的基准测试,远非定义几个模型和数据集那么简单。它是一场在理想化标准与现实世界复杂性之间的持续博弈。
我们早期就遇到一个典型问题:卷积操作的“填充”(Padding)。卷积神经网络(CNN)中的卷积层在处理图像边缘时,需要决定如何填充像素。是填0(SAME填充),还是直接丢弃边缘(VALID填充)?虽然所有主流框架都支持卷积,但默认的填充方式或可选模式可能存在细微差别。这会导致即使模型结构相同,不同框架下的计算图和最终精度也可能有微小差异。我们的目标是支持多框架,那么就必须决定:是强制统一为一种填充方式(可能对某个框架不公),还是允许几种等效的填充模式?
这类问题在MLPerf中变得司空见惯。我们形成了一套应对流程。简单的问题,比如允许几种公认等效的卷积填充方式,通常由“提交工作组”讨论后快速裁决。而更复杂、更具争议的问题,例如在机器翻译基准中,是使用德语-英语还是英语-法语语料对,则会提交给“专题工作组”。在那里,一两名成员会花一两周时间,通过实验或咨询领域专家,深入研究后再提出建议方案。
3.2 拥抱“最小可行产品”与快速迭代
MLPerf的一个核心原则是快速开发和迭代,这更像是软件工程而非传统硬件基准测试的做法。在机器学习领域,这是必须的。新算法、新模型、新优化技术出现的速度,远远超过一个“优雅而缓慢”的开发周期所能跟上的。我们最初学到的经验,远比我们事先能预见到的挑战要多得多。
因此,我们刻意选择发布一个“最小可行产品”(MVP),并用版本号(v0.5)明确承认这一点。v0.5训练基准套件并不完美,但它对工业界和学术界已经具有了实际意义和价值。它为我们赢得了发展势头、可信度,以及无数宝贵的教训——而这些教训正是未来版本得以改进的基石。这个过程教会我如何评估早期那些乐观的愿景,并将其精简为少数几个真正值得追求的关键要素。
3.3 “勉强共识”下的协作艺术
管理MLPerf这样一个多元化的团体,本身就是一门学问。我们的成员来自专注于系统、芯片、IP、软件和服务的不同公司,其中不少是直接竞争对手。每家公司的优先级和利益诉求都不尽相同。
我们在MLPerf内部运作的原则是“勉强共识”。我们不指望每个决定都能让所有人满意,但总体上我们希望大多数人感到满意,并且确保没有人持续感到不满。这需要前瞻性,以及极其强大和主动的沟通。
决策过程是审慎的。它可能需要多轮讨论、征集反馈和投票——这似乎与我们“快速迭代”的原则有些矛盾——但由此产生的决策更加坚实、更经得起推敲。为了保持快速节奏,作为领导者,我们必须主动提出问题,提前准备初步提案,寻找志愿者,并确保相关领域的专家参与。我们必须鼓励每个人表达观点,尤其是那些我们预见到可能与普遍共识相左的意见。只有在所有观点都得到表达后,我们才能找到有效的折中方案。
当达成一个共识性的妥协后,会由各公司的MLPerf代表带回内部审议。代表们反馈后,我们可能会进行调整,然后最终定案。在这个过程中,领导者的角色不是决策者,而是协调者,确保每个人都能做出恰当的贡献。我花了相当长时间才适应这种角色,它要求更多的倾听、归纳和引导,而非直接给出技术答案。
4. 攻坚克难:MLPerf遇到的技术深水区
基准测试的开发过程,也是不断暴露机器学习系统底层复杂性的过程。我们遇到的挑战,很多都超出了最初的设想,迫使我们去挖掘集体智慧。
4.1 大规模训练的收敛难题
我们最初天真地认为,只要提供了模型和数据集,硬件厂商就能跑出结果。但很快发现,在大规模分布式系统(例如使用数百甚至上千个加速器)上训练模型,要保证其收敛到预期的精度,本身就是一个巨大的研究课题。批量大小(Batch Size)、学习率(Learning Rate)、优化器选择(如SGD, Adam)之间的耦合关系,在规模放大后会变得极其敏感。
例如,为了确保大规模提交的可行性,我们不得不允许甚至鼓励使用像Adam这样基于动量的优化器,并对相关超参数的调整范围进行界定。这不仅仅是“跑个分”,而是涉及到深度学习优化理论的前沿。我们不得不与提交者紧密合作,理解他们的调参策略,确保其合规且可复现,同时又不至于将基准测试变成纯粹的“调参竞赛”。
4.2 框架差异性与行为统一
支持多框架(TensorFlow, PyTorch, MXNet等)是我们的一个关键目标,旨在保证公平性。但这带来了巨大的工程挑战。除了前面提到的填充问题,更复杂的操作如翻译模型中的“束搜索”,并非所有框架都原生支持,或者实现的行为存在差异。
我们的解决方案是定义“参考实现”。我们为每个基准任务提供了一套经过验证的、符合规范的代码实现(通常基于某个主流框架)。提交者可以选择基于参考实现进行优化,也可以使用自己的实现,但必须通过严格的“等效性测试”,证明其输出结果(不仅是最终精度,有时还包括中间层的数值分布)与参考实现在一定容差范围内是一致的。这套等效性验证机制的设计和实现,本身就是一项艰巨的任务。
4.3 推理基准的独特挑战
与训练相比,推理基准的制定又有其独特的复杂性,这也是我作为推理工作组联合主席深度参与的部分。
- 延迟与吞吐量的权衡:推理场景下,延迟(Latency)和吞吐量(Throughput)是核心指标,且往往相互矛盾。一个优化了吞吐量的批处理系统,单次查询的延迟可能很高。MLPerf推理基准要求同时报告在不同约束条件(如目标延迟)下的性能,这更贴近真实应用场景(如自动驾驶要求低延迟,内容推荐可能更关注高吞吐量)。
- 精度与效率的博弈:推理端广泛使用量化技术(将FP32模型转换为INT8甚至更低精度)来提升效率。但量化可能会带来精度损失。我们需要定义清晰的精度目标(例如,与FP32参考模型的精度差距必须在1%以内),并设计相应的校准和验证流程。
- 系统与芯片级测试:推理不仅测试芯片本身,还考验整个软件栈的效率,包括运行时库、驱动程序、模型编译/优化工具链,甚至操作系统调度。MLPerf推理基准允许提交“芯片级”结果(仅测量加速器本身)和“系统级”结果(测量端到端应用性能),以满足不同评估需求。
5. 经验与洞察:给技术从业者的建议
回顾这段旅程,我获得的远不止是对机器学习技术栈的理解。以下是一些可能对同行,尤其是考虑参与开源标准或复杂协作项目的工程师们有价值的体会。
5.1 主动承担“不起眼”的工作
从担任会议记录员开始,我得以快速了解全局。在任何一个协作项目中,总有一些必要但大家都不太愿意做的工作,比如文档、会议纪要、流程梳理。主动承担这些工作,是建立信任、展示责任心并快速融入核心圈子的有效途径。它让你有机会听到所有讨论,理解分歧的根源,从而在后续提出更有建设性的意见。
5.2 在快速迭代中寻找平衡
MLPerf的“MVP+快速迭代”哲学非常适用于当今快速变化的技术领域。不要试图一开始就设计出完美无缺的方案。先推出一个虽然简单但核心价值明确的版本,获取反馈,学习,然后快速改进。关键在于,版本迭代必须有清晰的规则和向后兼容性的考虑,不能让早期采用者的努力白费。我们的版本号从v0.5到v0.7再到v1.0,每个版本都在扩大测试范围、完善规则,但核心的评估理念保持连贯。
5.3 沟通是复杂协作的生命线
在MLPerf,我们依赖Slack、邮件列表、定期视频会议和线下峰会进行沟通。我学到的最重要一课是:过度沟通好于沟通不足。对于任何可能影响多方的决定,都要提前以书面形式提出,给予充分的评论时间。会议不是为了争论,而是为了对已充分讨论的提案做出决议。会后的纪要必须清晰记录决策内容、理由以及待办事项,并分发给所有相关方。在跨公司、跨时区的协作中,清晰的书面记录是无价的。
5.4 理解并尊重多元动机
参与MLPerf的成员,其个人和公司的动机各不相同。学术研究者可能关注前沿探索和发表机会,硬件公司希望展示其产品优势,软件公司关心生态兼容性,云服务商则看重端到端解决方案的表现。一个好的基准测试,必须在一定程度上满足这些多元化的需求,而不是被单一利益所主导。这要求参与者具备同理心,能够从他人角度思考问题,并在技术争论中寻找最大公约数。
6. 面向未来:MLPerf的演进与个人的召唤
如今,MLPerf已经发布了多个版本的训练和推理基准,涵盖了从图像分类、目标检测、自然语言处理到推荐系统等多种负载。它已成为业界评估AI硬件和软件性能的事实标准之一。但工作远未结束。
新的模型架构(如Vision Transformer, Diffusion Models)、新的计算范式(如稀疏计算、图神经网络)、新的系统考量(如隐私保护下的联邦学习评估)不断涌现。MLPerf需要持续演进,增加新的基准,改进现有基准,并探索如能效、公平性、可解释性等更广泛的评估维度。
对我个人而言,这段经历是一次完美的“跨界”学习。它让我将对计算机架构的深刻理解,与机器学习的软件和算法层面连接起来,形成了一个更完整的系统视角。这种视角对于分析AI芯片的未来趋势、评估技术路线的优劣至关重要。
所以,我的建议与David Kanter在原文中的呼吁一致:如果你对机器学习系统的性能评估感兴趣,无论你是硬件工程师、软件开发者、研究员还是学生,不要犹豫,不要被看似高深的门槛吓退。MLPerf的仓库在GitHub上是公开的。你可以从阅读代码、复现现有结果开始,理解基准测试的每一个细节。如果你发现了某个模型或框架的优化技巧,可以尝试提交你的实现。社区始终欢迎新的贡献者。
这个领域仍有无数未解决的问题,而答案不会自动出现,它需要更多人的好奇、投入和协作。参与像MLPerf这样的项目,不仅仅是贡献代码,更是参与到定义行业未来标准的进程中,与最顶尖的同行一起,亲手为这个快速发展的领域铺设轨道。这种经历所带来的技术视野、人脉网络和个人成长,是任何单一公司内部工作都难以比拟的。