苹果 M1 和 M2 用于训练 SSL 模型的性能

苹果 M1 和 M2 在 SSL 模型训练中的性能表现

我们想知道使用Apple M1和M2芯片训练自监督学习模型的速度有多快。

使用新的Apple芯片训练ML模型的基准数量仍然很少。此外,大多数结果仅将M1芯片与早期的软件版本进行比较,这些软件版本在测试时可能尚未进行优化。这就是为什么我们决定自行运行基准测试的原因。

为了衡量Apple M1和M2芯片的训练性能,我们设置了一个简单的基准测试。在cifar-10上使用ResNet-18骨干结构训练一个SimCLR模型。我们测量完成一个完整的训练周期所需的时间。在我们的实验中,我们使用不同的M1和M2芯片,并比较CPU与GPU的性能。

具体来说,我们使用以下设备运行基准测试:

  • 2021年的14英寸Macbook Pro,搭载M1 Pro和14核GPU(在本文中称为M1 Pro)
  • 2023年的13英寸Macbook Air,搭载M2和8核GPU(在本文中称为M2)
  • 我们将结果与使用Nvidia A6000 Ampere GPU的参考实现进行比较

TL;DR

  • 在M1 Pro上,使用GPU进行训练比使用CPU快8.8倍。
  • M1 Pro GPU的速度大约比Nvidia A6000 Ampere GPU慢13.77倍。
  • M1 Pro GPU比M2 GPU快26%。
  • 在Apple的M1和M2芯片上运行的PyTorch尚未完全支持torch.compile和16位精度。希望在未来几个月内会有所改变。

在下表中,您将找到我们评估的不同计算硬件。右侧是每个训练周期的平均时间,单位是分钟。所有的Apple M1和M2芯片都使用从2023年6月30日的最新夜间版构建,而Nvidia A6000 Ampere芯片使用了2022年的旧版PyTorch。

计算硬件和完成一个训练周期所需的时间。

设置和实验

我们概述了实验中使用的软件和硬件组件。

我们使用轻量级基准测试中的一个示例,使用SimCLR在Cifar10上训练ResNet-18。我们只训练苹果硬件的模型2个周期,而不是训练200个周期。我们保持所有其他参数不变(批次大小:128,精度:32,工作人员数量:8)。

训练代码在每个训练周期后自动使用kNN分类器评估模型。两个周期等于对训练数据进行两次模型训练和两次模型评估。在我们的实验中,我们使用每批次的平均时间。

我们对比了Nvidia A6000 Ampere GPU的参考结果。Nvidia GPU使用97.7分钟完成200个周期,每个周期需要0.49分钟。

我们使用8个工作人员。我们在从使用Nvidia A6000 GPU的系统切换到M1和M2芯片时没有调整或更改任何参数。然而,在监控CPU和GPU的使用情况时,我们注意到在M1和M2设备上,使用率始终在90%以上,这让我们可以推断我们接近可用硬件的限制。

在 Apple M1 和 M2 上安装支持 GPU 的 PyTorch

为了进行我们的实验,我们需要在 Apple M1 和 M2 硬件上安装 PyTorch。

我们遵循这里的指南:https://developer.apple.com/metal/pytorch/

最后,我们在 M1 Pro 上的测试系统安装了以下软件包:

结果

请注意,由于 Apple 芯片不支持 torch.compile16 位 精度,因此我们不使用这些功能。截至今天,Apple M1 和 M2 的 GPU 支持 16 位 精度,但是 torch 缺乏对自动转换的支持,而自动转换对于梯度的缩放和自动使用更高精度进行训练是必需的。因此,我们不使用任何这些功能。

不同实验的摘要。我们总是报告包括训练和验证时间在内的完整历元时间。

我们在这里更详细地讨论了各种基准结果。作为参考,我们将自己定位到两个用于在 Apple M1 硬件上训练机器学习模型的公开可用基准测试。

M1 Pro GPU 上的结果

让我们来看看 M1 Pro GPU 上的详细结果。由于我们在实验中使用了 PyTorch Lightning,我们还可以获得所使用加速器和模型大小的摘要。

您可以看到找到了 GPU:GPU available: True (mps), used: True

两个历元的总时间为 13.5 分钟。因此,每个历元的时间为 6.75 分钟,这比 Nvidia 的 A6000 GPU 的 0.49 分钟慢了 13.77 倍。

M1 Pro CPU 上的结果

出于好奇,我们还在 M1 Pro CPU 上运行了相同的基准测试,该 CPU 具有 6 个性能核心和 2 个效率核心。

结果比使用 GPU 时更差。CPU 用于两个历元的时间为 118.6 分钟,每个历元为 59.3 分钟。 M1 Pro CPU 的速度比使用 M1 Pro GPU 慢了 8.8 倍。这些结果显示了 GPU 和 CPU 性能之间比以前基准测试中的差异更大:

Apple M1 硬件上的先前机器学习基准测试

我们只发现了另外两个基准。这两个基准都是 2022 年 5 月发布的,当时宣布了对 Apple 硬件的 PyTorch 的初始支持。

每个历元的 VGG16 训练时间比较。来源:https://sebastianraschka.com/
PyTorch仅对M1 Ultra芯片上的GPU训练与CPU训练进行了加速报告。来自https://pytorch.org/

与其他两个报告的结果相比,我们训练ResNet-18的基准测试的计算量较小。VGG-16和ResNet-50都是更大的模型,具有更多的参数和浮点运算。

根据官方的torchvision预训练模型,我们可以得到以下关于这三个模型的数据:

  • VGG-16模型具有1.38亿个参数154.7亿次浮点运算
  • ResNet-18模型具有1170万个参数1.81亿次浮点运算
  • ResNet-50模型具有2560万个参数4.09亿次浮点运算

展望

半精度(fp16)支持

尽管Apple M1和M2 GPU支持fp16,但围绕PyTorch的软件堆栈在某些领域仍然缺乏支持。例如,当前问题仍然未解决https://github.com/pytorch/pytorch/issues/88415,妨碍我们轻松使用autocast进行混合精度。好消息是,M1和M2芯片已经支持fp16,这意味着我们可以创建fp16张量并对它们执行操作。

M1和M2芯片的torch.compile支持

如果尝试使用torch.compile,将会出现以下错误RuntimeError: Unsupported device type: mps,因为MPS设备尚未得到支持。

如果您喜欢这篇文章并想了解更多关于我的内容,您可以在VoAGI上关注我

Igor Susmelj,Lightly联合创始人Lightly