Fig.1 - システム アーキテクチャー
SINGAは、多様な分散トレーニング フレームワーク (同期、または非同期トレーニング). をサポートするための柔軟な構造をもっています。 Fig.1. にシステムの構造を示します。 特徴としては、複数の server グループと、worker グループを持つことです。
Server グループは、モデルパラメーターのレプリカを持ち、worker グループからのリクエストに従いパラメーターのアップデートを担当します。隣接した server グループ達は、パラメーターを定期的に同期させます。通常1つの server グループは複数の server で構成され、各 server はモデルパラメーターの分割された一部を担当します。
各 worker グループは、1つの server グループと通信します。1つの worker グループは、パラメーターの勾配計算を担当します。また分割されたデータの一部に対し“完全な”モデルレプリカをトレーニングします。すべての worker グループ達は、対応する server グループ達と非同期的に通信します。しかし、同じ worker グループ内の worker 達は、同期します。
同一グループ内での worker 達の分散トレーニングには、たくさんの異なった方法があります。
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 はパラメーターの値を含みます。