1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apple Silicon MacのPytorhのDataLoaderが遅い理由と解消方法

Last updated at Posted at 2024-11-10

# はじめに
新しくM4 MaxのMacを購入してディープラーニング関連のベンチマークをしていたのですが、どうもGPUの履歴がスカスカだったので、なにが原因か調べてみました。ここでは、原因と対策方法について紹介します。

GPUがサボりまくっている

PytorchのベンチマークのためにResnet18でCIFAR10の学習を行うコードを実行してみたのですが、どうも遅い

GPUの履歴を見ると、GPUが間欠でしか動いていない。下図みたいに、一瞬動作して、その後待ち時間がずっと続く形でした。ちなみに、処理時間は392.62秒。

image.png

このような挙動ってWindowsで学習させたときにも経験があって、その時はDataLoaderが問題だったので、とりあえずnum_workers=0にして実行してみました。すると、処理時間は38.41秒。

原因はプロセスの起動・終了が遅い

Windowsの時は、プロセスの起動・終了が遅いのが原因で、Windowsでは、

persistent_workers=True

という設定で解決していたのでそれを試してみる。

処理時間は35.80秒。結果を見ると1EPOCH目が19秒で、それ移行は4秒程度でEPOCHが終了している。

やはり、プロセスの起動が遅いらしい。

解決策

少し調べてみると、multiprocessing_contextというオプションがあり、デフォルトは"spawn"で、"fork"と"forkserver"を選べるらしい。

とりあえず、"fork"を選んでみる(persistent_workersは削除)

結果は21.50秒!

GPUの履歴を見てもGPUがずっと動いていることを確認できた。

image.png

まとめ

MacOSのPytorchのプロセス起動(spwan)は遅いみたいです。forkを設定すると高速に動作せることができましたので参考になればと思います。

結論は、「multiprocessing_context="falk"を設定する」ことです。

ちなみに、この速度であればGoogle ColabのGPU(T4)より高速です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?