Skip to content

Auto parameter optimization option for multi-GPU environment #199

@hiroshi-matsuda-rit

Description

@hiroshi-matsuda-rit

次の条件から、従来型のtok2vecモデルとtransformersモデルとで異なるマルチプロセス戦略を取りたい。

  • tok2vec
    • CPU処理時
      • 単一コアを100%占有
    • GPU処理時
      • GPU占有率は20%程度
      • GPUメモリは400MBを専有
      • CPUは1コアを100%で専有
      • CPU(E5-2660 v3)単一スレッドに対してRTX8000は2倍速
  • transformers
    • CPU処理時
      • 全コアのCPUタイムの約半分を占有
    • GPU処理時
      • GPU占有率は17%程度
      • GPUメモリは1.8GBを専有
      • CPUは1コアを100%で専有
      • CPU(E5-2660 v3 x 2 = 40スレッド)に対してRTX8000は3倍速

モデルと利用可能なGPU数との組み合わせで類型化してみます。

  • GPUなし
    • tok2vec
      • マルチプロセス化によりほぼリニアに高速化が可能
      • Many Core CPUでは並列度はメモリで律速される場合がある
    • transformers
      • 独自のマルチプロセス化により2倍程度は高速化可能
  • GPU1台
    • tok2vec
      • 並列度はGPU処理帯域で律速 = 4並列程度が限界 = CPU単一プロセスの8倍程度が限界
      • CPUが8コア以上の場合はGPUを用いないマルチプロセス化の方が効果が高い
      • GPUマシンのCPUコア数は普通はもっと多いものを使うことが多い
    • transformers
      • 並列度はGPU処理帯域またはGPUメモリ容量で律速 = 5並列程度が限界
  • GPU2台以上
    • tok2vec
      • CPUコア数 >= 8 x GPU台数の場合はGPUを用いないマルチプロセス化の方が効果が高い
    • transformers
      • 並列度はGPU台数 x 5またはCPUコア数のいずれかで律速

上記をふまえて、現在のマルチプロセスオプションに加えて、さらに次の機能の追加を検討したいと思います。

  • マルチGPU環境においてGiNZAで使用するGPUの指定(複数可)
  • 1つのGPUに割り当てるプロセス数

一方、上記のような複雑なパラメータの組み合わせをユーザが使い分けることはかなり難しいため、
利用中の環境に応じて適切に並列処理パラメータを自動設定するモードも検討したいと思います。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions