Fork me on GitHub

SINGA アーキテクチャー


ロジカル アーキテクチャー

Fig.1 - システム アーキテクチャー

SINGAは、多様な分散トレーニング フレームワーク (同期、または非同期トレーニング). をサポートするための柔軟な構造をもっています。 Fig.1. にシステムの構造を示します。 特徴としては、複数の server グループと、worker グループを持つことです。

  • Server グループ

Server グループは、モデルパラメーターのレプリカを持ち、worker グループからのリクエストに従いパラメーターのアップデートを担当します。隣接した server グループ達は、パラメーターを定期的に同期させます。通常1つの server グループは複数の server で構成され、各 server はモデルパラメーターの分割された一部を担当します。

  • Worker グループ

各 worker グループは、1つの server グループと通信します。1つの worker グループは、パラメーターの勾配計算を担当します。また分割されたデータの一部に対し“完全な”モデルレプリカをトレーニングします。すべての worker グループ達は、対応する server グループ達と非同期的に通信します。しかし、同じ worker グループ内の worker 達は、同期します。

同一グループ内での worker 達の分散トレーニングには、たくさんの異なった方法があります。

  • モデル 並列化: 各 worker は、グループに振り分けられたすべてのデータに対して、パラメーターのサブセットを計算します。
  • データ 並列化: 各 worker は、振り分けられたデータのサブセットに対して、すべてのパラメーターを計算します。
  • ハイブリッド 並列化: SINGAは、上記の方法を組み合わせたハイブリッドな並列化もサポートします。

実装

SINGAでの servers と workers は、別スレッドで動く実行ユニットです。

In SINGA, servers and workers are execution units running in separate threads. それらは messages を利用して通信します。 各プロセスは、ローカル messages を集め、それを対応するレシーバーに転送する stub としてメインスレッドを実行します。

各 server グループと worker グループは、“完全な”モデルレプリカである ParamShard オブジェクトを保持します。 もし workers と servers が同じプロセスで走るなら、 それらの ParamShard (パーティション)は、同じメモリスペースを共有するよう設定されます。 この場合、異なる実行ユニット間を行き来する messages は通信コストを抑えるためにデータのポインタだけを含みます。 プロセス間通信の場合とは異なり、messsages はパラメーターの値を含みます。