Skip to main content

使用Apple Silicon在M1 Pro上进行深度学习

我们来看看我新买的Macbook Pro的表现怎么样,好吗?
Created on April 19|Last edited on April 19
本报告是作者Thomas Capelle所写的"Deep Learning on the M1 Pro with Apple Silicon"的翻译


如果你新买了一台装有不可思议的Apple Silicon的崭新Mac 🍎,或许你可能会思考,“我究竟应该如何设置这台机器来运行 Python并进行一些深度学习实验呢?”如果你确实提出了这一问题,那你真是太走运了。交给我们吧!(顺便说一句:如果你正在考虑购买M1 Pro,或是想了解相关结果的话,直接跳转至下方的对标章节即可!)
在本报告中,我们将向你展示:
✅ 如何在新的Macbook Pro上设置Python与一些常用库
✅ 如果安装带金属后端的TensorFlow以充分发挥GPU的加速能力
✅ M1 Pro GPU上的一些深度学习基准信息!(剧透一下:确实不错)。
好了,下面就让我们开始吧。

在新Mac上安装Python 🐍

首先,你需要打开终端并安装苹果的开发者工具。输入:
git clone some_repo_of_your_choice
这将触发安装过程。之后你不需要任何其他东西,不需要brew,也不需要macports,这些都不需要!
注意:在Mac中不要将Python系统用于其他目的,因为你不希望打乱你的系统安装。(此外,苹果系统所使用的的Python版本十分老旧。我的全新14 英寸Macbook Pro居然自带的是 Python 2.7.18!!!)
💡

安装全新Python:

  • 最简单的方法是安装miniconda3,但出于某种原因,ARM二进制文件目前并不可用💩...
  • 第二个选项是使用conda-forge 的 miniconda3的分叉版本:miniforge。这也是我个人目前正在使用且十分推荐的选项 ❤️。
(此外还有一种很不错的选项,那就是在安装 miniconda3/miniforge 的基础上再用上 🐍 mamba,这会让所有东西进一步加速。)
开始conda/mamba的安装运行之后,你需要创建一个工作环境。可使用以下命令:
conda create --name=env_name "python<3.10" pandas numpy matplotlib jupyterlab
你可在 env_name 之后放上任何需要使用的包,包名之间用逗号分隔即可。此外还可以使用 ==<,> 来指定特定版本,最好是再将其放在引号之中。


我建议看看Jeff Heaton的YouTube频道,了解有关Apple Silicon机器学习领域的更多信息和最新进展。我在这讲的许多内容也是直接源自该视频:


使用Apple Metal后台安装Tensorflow🤘

从去年开始,Python和机器学习框架的安装就变得更加简单了。你可遵循苹果网站上的官方指南,也可看看我在这一库中提供的详细说明。
注意:需要最新的Monterrey系统(Mac OS 12)
💡
完成conda/mamba的安装工作后,你还需要安装 TensorFlow。为了方便起见,你可从这一个库中获取conda环境文件。然后可以运行:
conda env create --file=tf_apple.yml
(和之前一样,你现在需要激活环境。)
现在你已经准备好进行基准测试了。

M1 Pro基准

这里我们来看看带有16个GPU核心的M1 Pro的性能表现。我知道我们团队中的一些工程师已经订购了顶级的M1 Max机器,到货后我也会把相关数据更新出来!此外,如果你还没有看过我们联合创始人CVP在去年发布的M1(非专业版本)探索报告,建议你将其作为起点。
M1报告中所使用的的训练脚本与此处相同,可在这里获取。

方法📓

在进行基准测试时,我们使用34台不同的计算机:
  • 7核GPU的入门级Macbook Air:M1_7
  • 16核GPU的14英寸MacBook Pro:带有 16GB 内存的M1Pro
  • 新:32核GPU的16英寸 MacBook Pro:带有64GB内存的M1Max。(仅 RestNet50 基准)
  • 配备有8核CPU和16GB RTX5000的来自Paperspace的Linux 工作站:RTX5000
  • 新:配备有16核CPU与RTX 3090和RTX 3080的Linux 工作站
  • 新:深度学习的前代王者——GTX1080Ti
(此外还能打开K80基础Google Colab实例,但其速度非常慢。)
模型方面,我们以两��方式训练了MobileNetV2:
  • 带有大约2万个参数的“模型head微调”,仅对模型head 进行了微调。
  • “完全模型训练”,训练了带有 250 万个参数的 MobileNetV2。
各组图标中都展示了两种运行设置的情况。

结果

我们看到,与GPU机器相比,笔记本电脑的功耗非常低。当然,这是正常的,我们需要对移动GPU进行基准测试以获得有价值的能耗方面的参考信息。


同时,在下面的图表中还能看到“样本数/秒”信息
注意:第一次epoch的过程中,NVIDIA 显卡的速度较慢,这可能是缓存方面的原因,但后续其也达到了全速。这样的情况仅在模型head微调的例子中出现。
💡
对于完全可训练的网络,其差异则较小,RTX5000比M1Pro 快约55%。考虑到RTX2060的功率是RTX2060m的4倍且速度相当,这也还算是不错的结果。
(注意:在NVIDIA的NGC TensorFlow容器中运行时要比在 conda环境中运行时快得多。你可以选用这样的环境,因为其有 ngc 标记。这些容器经过调优与优化,速度尽可能快,且由Google和NVIDIA进行维护。目前在 苹果设备上并没有同等容器。)



额外内容:Resnet50

如果我们将backbone替换为Resnet50,此时会发生什么?这里我们训练了一个总共有2350万个参数的完整模型。从 🟩 绿色的功率情况中可以看出,笔记本电脑的GPU显然无法与工作站卡相比。



结论

16核GPU的M1 Pro是对M1芯片的一次升级。其具有双倍的GPU核心和超过两倍的内存带宽。你可以使用大量内存。内存将由CPU和GPU共享,这是深度学习的最佳选择,因为这样就不需要从一个设备将张量移动到另一个设备了。此外你还可以使用64GB内存的配置——实际上这已经是目前市场上远超其他的最大的移动GPU。
正如预期的那样,M1Pro MAX的速度是M1Pro的两倍(GPU 核心数量也是两倍)。使用低功率笔记本GPU几乎与 RTX5000的性能相同。
M1无法取代工作站显卡,但也能够在保持移动特性的同时为微调模型提供计算能力。我甚至还在只使用电池电量的情况下进行了一些测试,似乎并没有性能方面的影响。除此之外,M1 的优秀之处还有其静音和发热方面的优秀表现——我的XPS 15与之相比就像是飞机发动机轰鸣✈️🔊。
这可能会改变游戏规则。

那PyTorch🔥呢?

PyTorch首席开发者Soumith Chintala此前曾发布过这样的重磅消息!

Iterate on AI agents and models faster. Try Weights & Biases today.