苹果 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。
- 变形金刚如何处理较长的输入?卡内基梅隆大学和谷歌研究员揭示了一种新的方法(FIRE):相对位置编码的功能插值
- ReactJS用于AI和机器学习:强大的结合
- 微软人工智能无意中曝光了一个秘密,为期3年的机密数据可被访问38TB
设置和实验
我们概述了实验中使用的软件和硬件组件。
我们使用轻量级基准测试中的一个示例,使用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.compile
或 16 位
精度,因此我们不使用这些功能。截至今天,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 的初始支持。
与其他两个报告的结果相比,我们训练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