Skip to main content

Apple的M1可以帮助您比NVIDIA V100更快更高效地训练模型吗?

在M1 Mac Mini和Nvidia V100上分析Tensorflow训练的运行时间、能耗和性能
Created on January 22|Last edited on January 27

TLDR

我们对训练脚本的8种不同配置进行了扫描,结果表明,对于较小的模型结构和数据集,Apple M1比起成本更高更不节能的加速器(如Nvidia V100)有令人更印象深刻的表现。




hardware: Nvidiahardware: Apple M1hardware: Apple Intel02,0004,0006,0008,00010,000
Run set
24


方法

我们在Cifar 10上使用MobileNetV2架构训练了一个计算机视觉模型。我们在此colab 中的Nvidia V100上训练了一个计算机视觉模型,同时在16GB M1 Mac Mini上使用tensorflow_macos fork 训练了一个相同的模型。 我们使用W&B Sweeps更改了以下超参数:

  batch_size:
    - 32
    - 64
  img_dim:
    - 96
    - 128
  trainable:
    - true
    - false

当trainable为false时,我们仅训练网络中的最后一层。 当trainable为true时,我们将更新MobileNetV2中的所有权重。

当训练的权重较少时,我们可以看到m1具有更好的性能提升。这可能由于M1的卓越内存架构。




Trainable
8
Non-Trainable
8


能耗

使用的Apple硬件是具有16GB RAM的M1 Mac Mini。 在训练期间,风扇始终听不到声音,而且外壳摸起来不热。 令人惊讶的是,M1用于实现与V100相同数量的计算所需的能耗要少得多。 V100使用的是12nm工艺,而m1使用的是5nm工艺,但V100始终使用接近6倍的能耗。




Run set
16


注意事项

设置Mac Mini以运行新的加速Tensorflow程序包并不容易。我发现获得各种需要编译的软件包的最简单方法是从Miniconda的arm64分支中获取。 tensorflow库默认情况下应该选择最佳的加速路径,但是除非我明确说明该库使用以下代码和gpu,否则会持续看到区段错误(segmentation faults):

from tensorflow.python.compiler.mlcompute import mlcompute
mlcompute.set_mlc_device(device_name="gpu")

我选择MobileNetV2来加快迭代速度。当我尝试使用ResNet50或其他更大的型号时,M1和Nvidia之间的差距越来越大。当我的输入在M1上超过196x196维度时,我也遇到了区段错误。

通常,这些入门级Mac似乎目前仅适用于较小的模型体系结构。

我还观察到在M1上仅训练网络最后一层的试验未能收敛。 但NVidia V100并非如此。经过进一步的实验,我能够通过降低学习率来使M1运行收敛。目前尚不清楚为什么M1硬件对学习率要求更高。

Apple M1




Run set
8


Nvidia V100




Run set
8


结论

现在还处于初期,但这些初步结果看起来很有希望。当Apple发布具有更多内核和RAM的Pro硬件时,在Apple硬件上训练机器学习模型可能会变得司空见惯。在W&B,我们所有的员工都使用Mac硬件进行开发,我知道我们的很多团队都迫不及待地想要获得下一代硬件。我们将密切关注tensorflow_macos分支,并最终将其合并到主要的tensorflow存储库中。我也很好奇PyTorch 团队是否决定与Apple ML Compute库集成,目前在Github上正在进行讨论

就像您在本报告中看到的那样,我们最新版的wandb库(0.10.13)自动从Apple M1硬件捕获GPU指标。

我们会很高兴如果其他人可以尝试一下!请在此报告中发表评论或对这些结果提出疑问。


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