🍣

PyTorchのDataloaderにおけるnum_workersの最適値を知りたい

2023/06/07に公開

num_workersの最適な値を選択する際の一般的な基準は、システムのCPUのコア数と一致させることです。しかし、スレッド数(論理コア数)を利用することも可能ですが、多くの場合、物理コア数に設定するのが最適です。CPUがハイパースレッドをサポートしている場合、物理コア数の2倍になります。物理コア数で設定した場合、I/O待ち時間と計算時間がうまくバランスが取れ、CPUの利用率を最大限に活用できます。

例えばUbuntuシステムでCPUのコア数とスレッド数を調べるには、以下のコマンドを使用することができます。Mac, Windowsの場合は適宜調べてみてください。

1. lscpuコマンド

- `lscpu`コマンドはCPUのアーキテクチャ情報を表示します。
- `CPU(s)`が全論理コア数、`Core(s) per socket`が1ソケット当たりの物理コア数を示します。

2. nprocコマンド

- `nproc`コマンドは利用可能なプロセッサの数(スレッド数)を表示します。
- 全スレッド数を表示します:`nproc`
- 全物理コア数を表示します:`nproc --all`

3. /proc/cpuinfoファイル

- `cat /proc/cpuinfo`コマンドを実行すると、システム上のすべてのCPUコアの詳細な情報を得ることができます。
- 物理コア数を調べる:`cat /proc/cpuinfo | grep "cpu cores" | uniq`
- 論理コア数(スレッド数)を調べる:`cat /proc/cpuinfo | grep "processor" | wc -l`

ただし、この値はあくまで目安であり、実際の最適なnum_workersの値はハードウェアの設定、データセットのサイズ、ネットワークの複雑さ、バッチサイズなどによって変わります。一般的には、物理コア数から始めて、パフォーマンスが向上するかどうかを確認しながら調整することをおすすめします。

Discussion