ginza
ginza copied to clipboard
Auto parameter optimization option for multi-GPU environment
次の条件から、従来型のtok2vecモデルとtransformersモデルとで異なるマルチプロセス戦略を取りたい。
- tok2vec
- CPU処理時
- 単一コアを100%占有
- GPU処理時
- GPU占有率は20%程度
- GPUメモリは400MBを専有
- CPUは1コアを100%で専有
- CPU(E5-2660 v3)単一スレッドに対してRTX8000は2倍速
- CPU処理時
- transformers
- CPU処理時
- 全コアのCPUタイムの約半分を占有
- GPU処理時
- GPU占有率は17%程度
- GPUメモリは1.8GBを専有
- CPUは1コアを100%で専有
- CPU(E5-2660 v3 x 2 = 40スレッド)に対してRTX8000は3倍速
- CPU処理時
モデルと利用可能なGPU数との組み合わせで類型化してみます。
- GPUなし
- tok2vec
- マルチプロセス化によりほぼリニアに高速化が可能
- Many Core CPUでは並列度はメモリで律速される場合がある
- transformers
- 独自のマルチプロセス化により2倍程度は高速化可能
- tok2vec
- GPU1台
- tok2vec
- 並列度はGPU処理帯域で律速 = 4並列程度が限界 = CPU単一プロセスの8倍程度が限界
- CPUが8コア以上の場合はGPUを用いないマルチプロセス化の方が効果が高い
- GPUマシンのCPUコア数は普通はもっと多いものを使うことが多い
- transformers
- 並列度はGPU処理帯域またはGPUメモリ容量で律速 = 5並列程度が限界
- tok2vec
- GPU2台以上
- tok2vec
- CPUコア数 >= 8 x GPU台数の場合はGPUを用いないマルチプロセス化の方が効果が高い
- transformers
- 並列度はGPU台数 x 5またはCPUコア数のいずれかで律速
- tok2vec
上記をふまえて、現在のマルチプロセスオプションに加えて、さらに次の機能の追加を検討したいと思います。
- マルチGPU環境においてGiNZAで使用するGPUの指定(複数可)
- 1つのGPUに割り当てるプロセス数
一方、上記のような複雑なパラメータの組み合わせをユーザが使い分けることはかなり難しいため、 利用中の環境に応じて適切に並列処理パラメータを自動設定するモードも検討したいと思います。