# SINGA アーキテクチャー --- ## ロジカル アーキテクチャー

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

SINGAは、多様な分散[トレーニング フレームワーク](frameworks.html) (同期、または非同期トレーニング). をサポートするための柔軟な構造をもっています。 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](communication.html) を利用して通信します。 各プロセスは、ローカル messages を集め、それを対応するレシーバーに転送する stub としてメインスレッドを実行します。 各 server グループと worker グループは、“完全な”モデルレプリカである *ParamShard* オブジェクトを保持します。 もし workers と servers が同じプロセスで走るなら、 それらの *ParamShard* (パーティション)は、同じメモリスペースを共有するよう設定されます。 この場合、異なる実行ユニット間を行き来する messages は通信コストを抑えるためにデータのポインタだけを含みます。 プロセス間通信の場合とは異なり、messsages はパラメーターの値を含みます。