作者:
(1) Iason Ofeidis,耶鲁大学电气工程系、耶鲁网络科学研究所,纽黑文{同等贡献};
(2)Diego Kiedanski,耶鲁大学电气工程系、耶鲁网络科学研究所,纽黑文{同等贡献};
(3) Leandros TassiulasLevon Ghukasyan,Activeloop,美国加利福尼亚州山景城,电气工程系,耶鲁大学网络科学研究所,纽黑文。
在这项工作中,我们使用时间作为主要工具来比较不同库之间的性能。关于这一点,有几点需要说明。首先,我们注意到运行时间变化很大,并且取决于难以控制的后台进程。同时,访问多 GPU 资源的成本很高,这限制了可以运行的实验数量。理想情况下,我们会使用更多参数(更多工作器、更多批处理大小)对每个实验进行三次以上的重复,但我们没有足够的资源。由于我们正在制作所有开源代码,因此我们邀请读者在自己的硬件上运行基准测试并报告结果。同时,库的更新频率相当高,版本更改可能会显著提高或降低其性能。
鉴于以上几点,我们鼓励读者内化本文的定性方面,但请注意,这里获得的数字很容易发生变化。
其次,一个更难比较的方面是本项目中考虑的库的易用性。本基准测试中包含的大多数库都没有全面的文档,主要依赖于具体示例。因此,在这些库中实现并不简单,而且容易出现效率低下的问题。将我们的代码开源的一个好处是,我们允许任何开发人员识别和改进我们的代码。这一点尤其重要,因为我们希望本项目中创建的基准测试可以用作社区的样板代码。
我们注意到,似乎没有一个库比其他库都更好。相反,每个库都有自己的优势。以 FFCV 为例:它在我们的实验中似乎是最快的,但缺乏对标签转换的支持,导致它无法在需要此类功能的项目中采用。
我们希望在未来的工作中分析跨多个 GPU 的过滤和训练之间的相互作用。同时,随着 GPU 数量的增加,探索这些库的扩展能力也将很有趣。同样,对数据加载库在 DL 训练工作流程中的 shuffle 步骤的性能进行基准测试也将非常有趣,因为这会对总训练时间产生重大影响,并且它的实现是一个非平凡的问题,其中有几种方法。
关于提供从远程存储加载数据的库的研究,以及它们与本地存储实验显示的结果相当,激励我们探索制定和设计用于通过网络进行数据流传输的缓存策略的想法。在这种情况下,减少需要传输数据点(例如图像)的次数可以显著缩短总体训练时间(如果付费使用网络,则可能缩短成本)。在训练时缓存网络数据集的想法并不新鲜(Mohan 等人,2020 年)。尽管如此,在讨论训练和流数据时,通常假设可以缓存整个数据集。此外,假设所有样本将在每个时期使用一次(Kumar & Sivathanu,2020 年),这是传统情况。我们感兴趣的是探索当缓存大小较小时会发生什么,以及消除每个时期使用每个数据点一次的要求。这种表述应该借鉴主动学习、数据汇总和课程学习。