自动微分的 GradBench 基准测试套件

这是一篇关于GradBench基准测试套件的文章,由Sam Estep发起。

  • 背景:在应用计算机科学中,比较新工具或算法与现有工作很重要,基准测试套件可解决此问题,应包含多种不同问题、高质量实现、易运行且易添加新实现或问题。ADBench 是微软研究开发的基准测试套件,虽比之前的好,但仍有问题,如架构紧密耦合、难以“运行一切”。
  • GradBench 的设计:2024 年 Sam Estep 启动 GradBench 项目,旨在开发新的自动微分基准测试套件,其设计高度解耦,围绕基准测试(称为“evals”)与“tools”通过基于 JSON Lines 的简单消息传递协议进行通信,工具通过标准输入和输出接收命令并返回输出和运行时信息,中间件负责协调执行等最复杂的部分。这种设计使得工具和 evals 可在容器(如 Docker 镜像)中运行,方便使用各种依赖。
  • GradBench 目前提供的内容:截至目前,GradBench 包含 11 个基准测试和 17 种不同工具,共 109 个实现。有每个工具都实现的“hello”基准测试,但较简单;也有 ADBench 问题的移植以及其他基准测试的实现,涵盖多种语言和库。目前的工具包括多种 C++库和其他语言的实现,还有“manual”和“finite”工具。GradBench 是目前最大的自动微分基准测试套件,所有基准测试都有自动验证和计时代码。
  • 为 GradBench 做贡献

    • 改进实现:通过查看[gradben.ch]上的颜色方块确定需要改进的实现,根据工具找到实现代码位置,修改后使用gradbenchCLI 运行,部分工具可在 Docker 外运行。
    • 为现有工具添加实现:根据现有实现进行模式匹配,对于 C++工具需添加foo.cpp文件,对于其他工具需自行实现,可参考 GitHub 问题追踪器的[missing]标签找到缺失的实现。
    • 添加新工具:在[tools/]目录中添加一个命名适当的目录,包含 Dockerfile,遵循协议,若为新语言需实现协议,可先实现["hello"]基准测试,GradBench 对不完全或实验性工具持开放态度。
    • 添加新基准测试:在[evals/]目录中添加一个子目录,遵循协议,目前所有 GradBench evals 都用 Python 编写,添加基准测试需考虑其价值和可实现性,可添加现有基准测试套件中的基准测试。
  • 自动化和细节:GradBench 有强大的持续集成(CI)设置,每晚对每个 eval/tool 组合进行基准测试,并将结果用于更新[gradben.ch],但仍存在一些问题,如部分基准测试没有绘图、运行所有工具组合不简单、本地生成数据无法使用网站绘图代码、未充分测试、网站功能有待完善、难以在 GradBench 外运行实现、无法用容器解决硬件依赖、工具目前都单线程运行等,这些问题需通过编写更多代码、文档、精心设计等方式解决。
阅读 26
0 条评论