データ並列でもモデル並列でも使うことができるWSE

WSE上での並列性の利用法は柔軟で、1つのアルゴリズムでモデル並列とデータ並列の両方の並列性が利用されることもある。

データ並列は同じモデルをDevice1 、Device2のように複数作り、それぞれのデバイスは入力データの異なる部分を処理する。モデル並列は大きなモデルを複数のパーツに分け、それらのパーツを並列に実行する。

WSEはたくさんのコアがあるので、モデル並列でも高い実行並列度が得られる。一方、GPUなどはバッチサイズを大きくして高いデータ並列の処理はできるが、並列に作れるモデルの数は制約があるので、高いモデル並列を実現するのは難しい。

  • Cerebras

    ニューラルネットの並列実行には、データ並列とモデル並列というやり方が考えられる。WSEは多くのコアを持ち、多数のモデルを並列に実行できるが、集積度の小さいGPUなどでは、モデルは1つでデータ並列の実行になる。WSEでは必要に応じて、両方の並列度を利用する柔軟な並列処理ができる

モデル並列の場合は、ネットワークのすべての層をパイプライン的に並列に実行させる。すべての層を並列に実行するので、高い性能が得られる。ただし、このためには高いバンド幅を持つインタコネクトが必要である。

モデル並列では、複数のモデルの間で重みの値を同期させるオーバヘッドは生じない。そのため、小さなバッチサイズでの実行でも良く、直線的なスケーリングが得られる。右側のグラフは4レイヤのBERTの性能をコア数を横軸にとってプロットしたもので、1つのモデルに使うコア数は100Kで、4コアまで並列にすることができている。

BERTの相対性能は100Kコアの時を1.0として、400Kコア、4モデルの場合には3.6倍の性能となっている。

  • Cerebras

    モデル並列での性能スケーリングを示す。モデル並列は、各層をパイプラインで並列実行することにより、性能を上げている。このグラフは、4層のBERTの性能を示しており、横軸は使用コア数で、1モデルで100Kコアを必要としている。性能は1モデルの場合を1.0として、4モデル並列での性能は3.6程度となっている

データ並列の場合は、各層のレプリカを作り、異なるデータでレプリカを並列に実行する。レプリカの数が増えると相対性能は上がるが、使用コア数が少ない場合は、レプリカのデータの入れ替えのオーバヘッドが影響しているのか、性能は飽和する傾向にある。

  • Cerebras

    データ並列の場合は、レプリカを作って異なるデータで並列に実行する。並列実行により性能は上がるが、コア数が少ない場合は、演算能力が限られるので実行性能は飽和する