blob: df913536c7e25099019f9363e4917874e3f29088 [file] [log] [blame]
# 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 はパラメーターの値を含みます。