「Apple M1とM2のパフォーマンス- SSLモデルのトレーニングにおいて」

「Apple M1とM2のパフォーマンス比較 - SSLモデルのトレーニングにおける性能検証」

Apple M1およびM2チップが自己教示学習モデルのトレーニングにどれほどのスピードで対応しているか知りたいです。

新しいAppleチップを使用してMLモデルをトレーニングするためのベンチマークの数はまだ少ないです。さらに、ほとんどの結果は、テストが実施された時点では最適化されていなかった可能性のある、旧バージョンのソフトウェアとM1チップの比較のみです。そのため、独自のベンチマークを実行することにしました。

トレーニングのApple M1およびM2チップのパフォーマンスを測定するために、シンプルなベンチマークを設定しました。cifar-10上のResNet-18バックボーンを使用したSimCLRモデルのトレーニングを行います。1つの完全なエポックを完了するのにかかる時間を測定します。実験では、さまざまなM1およびM2チップを使用し、CPUとGPUのパフォーマンスも比較します。

詳細には、以下のデバイスを使用してベンチマークを実行します:

  • M1 Proおよび14コアGPUを搭載した14インチMacbook Pro 2021(本記事ではM1 Proとして参照)
  • M2および8コアGPUを搭載した13インチMacbook Air 2023(本記事ではM2として参照)
  • Nvidia A6000 Ampere GPUの参照実装との結果を比較します

要点

  • M1 Proでは、CPUを使用するよりもGPUがトレーニングに対して8.8倍高速です。
  • M1 ProのGPUは、Nvidia A6000 Ampere GPUよりも約13.77倍遅いです。
  • M1 ProのGPUは、M2のGPUよりも26%高速です。
  • AppleのM1およびM2チップで実行されるPyTorchは、torch.compileおよび16-bitの精度を完全にサポートしていません。これは今後の数か月で変わることを期待しています。

以下の表に、評価した異なるコンピューティングハードウェアとエポックあたりの平均時間を分単位で示します。すべてのApple M1およびM2チップは、2023年6月30日の最新ナイトリビルドを使用し、Nvidia A6000 Ampereチップは2022年の古いバージョンのPyTorchを使用しています。

1エポックのトレーニングに必要なコンピューティングハードウェアと時間。

セットアップと実験

実験に使用したソフトウェアおよびハードウェアコンポーネントの概要を示します。

私たちは、lightly benchmarksのCifar10でSimCLRを使用してResNet-18をトレーニングするを使用しました。モデルを200エポックではなく、2エポックだけトレーニングします。他のパラメータ(バッチサイズ:128、精度:32、ワーカーの数:8)は同じままにしておきます。

トレーニングコードは、各エポック後にモデルをkNN分類器で評価します。2エポックは、モデルをトレーニングデータで2回トレーニングし、モデルを2回評価することと同等です。実験では、バッチあたりの平均時間を使用します。

比較のために、Nvidia A6000 Ampere GPUでの参照結果があります。Nvidia GPUは200エポックに97.7分、つまりエポックあたり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は高精度の勾配スケーリングや自動的により高い精度でのトレーニングに必要なautocastのサポートが不足しています。したがって、これらの機能は使用しません。

さまざまな実験の概要。トレーニングと検証時間を含む完全なエポック時間を報告しています。

ここで、さまざまなベンチマークの結果について詳しく説明します。参考までに、Apple M1ハードウェア上でのMLモデルのトレーニングのための2つの公に利用可能なベンチマークを参照にしています。

M1 Pro GPUの結果

M1 Pro GPU上の詳細な結果を見てみましょう。実験ではPyTorch Lightningを使用しているため、使用されているアクセラレータとモデルのサイズの概要も表示されます。

GPUが検出されていることが分かります:GPU available: True (mps), used: True

2つのエポックの合計時間は13.5分です。したがって、1エポックあたりの時間は6.75分であり、NvidiaのA6000 GPUの0.49分と比較して13.77倍遅いです。

M1 Pro CPUの結果

興味本位で、同じベンチマークをM1 Pro CPUで実行しました。M1 Pro CPUには6つのパフォーマンスコアと2つの効率コアがあります。

GPUを使用する場合よりも結果が悪かったことが予想されます。CPUの2つのエポックには118.6分かかり、1エポックあたりの時間は59.3分です。これは、M1 Pro GPUを使用する場合と比較してM1 Pro CPUが8.8倍遅いことを示しています。これらの結果は、以前のベンチマークよりもGPUとCPUの性能の差が大きいことを示しています:

Apple M1ハードウェアの以前のMLベンチマーク

他に2つのベンチマークが見つかりました。どちらもPyTorchのAppleハードウェアへの初期サポートが発表された2022年5月のものです。

VGG16のトレーニング時間のエポックごとの比較。From https://sebastianraschka.com/
PyTorchはM1 UltraチップでのCPUトレーニングに比べてGPUトレーニングのみスピードアップを報告しています。https://pytorch.org/からの引用

他の2つの報告結果に比べて、ResNet-18のトレーニングのベンチマークは計算において少なくなっています。VGG-16とResNet-50はより多くのパラメータとFLOPを持つ大きなモデルです。

公式のtorchvision事前学習済みモデルによると、以下のモデルに関する情報が得られます:

  • VGG-16モデルは1億3800万個のパラメータ154.7億個のFLOPを持っています
  • ResNet-18モデルは1170万個のパラメータ18.1億個のFLOPを持っています
  • ResNet-50モデルは2560万個のパラメータ40.9億個のFLOPを持っています

展望

半精度(fp16)サポート

Apple M1およびM2のGPUはfp16をサポートしていますが、PyTorchのソフトウェアスタックはまだ一部の領域でサポートが不十分です。例えば、現在の問題はまだオープンなままであり、autocastを使用したミックスドプレシジョンの簡単な利用を阻んでいます。しかし、M1およびM2のチップではすでにfp16をサポートしています。これはfp16テンソルを作成し、それら上で操作を実行できることを意味します。

M1およびM2チップ向けのtorch.compileのサポート

torch.compileを使用しようとすると、RuntimeError: Unsupported device type: mpsというエラーが発生します。これは、MPSデバイスがまだサポートされていないためです。

この記事が気に入った場合や私からのさらなる情報を読みたい場合は、VoAGIで私をフォローしてください

Igor Susmelj、共同創設者Lightly

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more