| # SINGA アーキテクチャー |
| |
| --- |
| |
| ## ロジカル アーキテクチャー |
| |
| <img src="../_static/images/logical.png" style="width: 550px"/> |
| <p><strong> Fig.1 - システム アーキテクチャー</strong></p> |
| |
| 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 はパラメーターの値を含みます。 |