blob: b5b2cabb8fcd01155853bf321af6579e369013fc [file] [log] [blame]
# クイック スタート
---
## SINGA セットアップ
SINGAのインストールについては[こちら](installation.html)をご覧ください。
### Zookeeper の実行
SINGAのトレーニングは [zookeeper](https://zookeeper.apache.org/) を利用します。まずは zookeeper サービスが開始されていることを確認してください。
準備された thirdparty のスクリプトを使って zookeeper をインストールした場合、次のスクリプトを実行してください。
#goto top level folder
cd SINGA_ROOT
./bin/zk-service.sh start
(`./bin/zk-service.sh stop` // zookeeper の停止).
デフォルトのポートを使用せずに zookeeper をスタートさせる時は、`conf/singa.conf`を編集してください。
zookeeper_host: "localhost:YOUR_PORT"
## スタンドアローンモードでの実行
スタンドアローンモードでSINGAを実行するとは、[Mesos](http://mesos.apache.org/) や [YARN](http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html) のようなクラスターマネージャー利用しない場合のことを言います。
### Single ノードでのトレーニング
1つのプロセスがローンチされます。
例として、
[CIFAR-10](http://www.cs.toronto.edu/~kriz/cifar.html) データセットを利用して
[CNN モデル](http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks) をトレーニングさせます。
ハイパーパラメーターは、[cuda-convnet](https://code.google.com/p/cuda-convnet/) に基づいて設定されてあります。
詳細は、[CNN サンプル](cnn.html) のページをご覧ください。
#### データと、ジョブ設定
データセットのダウンロードと、Triaing や Test のためのデータシャードの生成は次のように行います。
cd examples/cifar10/
cp Makefile.example Makefile
make download
make create
Training と Test データセットは、それぞれ *cifar10-train-shard*
と *cifar10-test-shard* フォルダーに作られます。 すべての画像の特徴平均を記述した *image_mean.bin* ファイルも作成されます。
CNN モデルのトレーニングに必要なソースコードはすべてSINGAに組み込まれています。コードを追加する必要はありません。
ジョブ設定ファイル (*job.conf*) を指定して、スクリプト(*../../bin/singa-run.sh*) を実行します。
SINGAのコードを変更、または追加する時は、[プログラミングガイド](programming-guide.html)をご覧ください。
#### 並列化なしのトレーニング
Cluster Topology のデフォルト値は、1つの worker と 1つの server となっています。
データとニューラルネットの並列化はされません。
トレーニングを開始するには次のスクリプトを実行します。
# goto top level folder
cd ../../
./bin/singa-run.sh -conf examples/cifar10/job.conf
現在、起動中のジョブのリストを表示するには
./bin/singa-console.sh list
JOB ID |NUM PROCS
----------|-----------
24 |1
ジョブの強制終了をするには
./bin/singa-console.sh kill JOB_ID
ログとジョブの情報は */tmp/singa-log* フォルダーに保存されます。
*conf/singa.conf* ファイルの `log-dir`で変更可能です。
#### 非同期、並列トレーニング
# job.conf
...
cluster {
nworker_groups: 2
nworkers_per_procs: 2
workspace: "examples/cifar10/"
}
複数の worker グループをローンチすることによって、
In SINGA, [非同期トレーニング](architecture.html) を実行することが出来ます。
例えば、*job.conf* を上記のように変更します。
デフォルトでは、1つの worker グループが1つの worker を持つよう設定されています。
上記の設定では、1つのプロセスに2つの worker が設定されているので、2つの worker グループが同じプロセスとして実行されます。
結果、インメモリ [Downpour](frameworks.html) トレーニングフレームワークとして、実行されます。
ユーザーは、データの分散を気にする必要はありません。
ランダムオフセットに従い、各 worker グループに、データが振り分けられます。
各 worker は異なるデータパーティションを担当します。
# job.conf
...
neuralnet {
layer {
...
sharddata_conf {
random_skip: 5000
}
}
...
}
スクリプト実行:
./bin/singa-run.sh -conf examples/cifar10/job.conf
#### 同期、並列トレーニング
# job.conf
...
cluster {
nworkers_per_group: 2
nworkers_per_procs: 2
workspace: "examples/cifar10/"
}
1つのworkerグループとして複数のworkerをローンチすることで [同期トレーニング](architecture.html)を実行することが出来ます。
例えば、*job.conf* ファイルを上記のように変更します。
上記の設定では、1つの worker グループに2つの worker が設定されました。
worker 達はグループ内で同期します。
これは、インメモリ [sandblaster](frameworks.html) として実行されます。
モデルは2つのworkerに分割されます。各レイヤーが2つのworkerに振り分けられます。
振り分けられたレイヤーはオリジナルのレイヤーと機能は同じですが、特徴インスタンスの数が `B/g` になります。
ここで、`B`はミニバッチのインスタンスの数で、`g`はグループ内の worker の数です。
[別のスキーム](neural-net.html) を利用したレイヤー(ニューラルネットワーク)パーティション方法もあります。
他の設定はすべて「並列化なし」の場合と同じです。
./bin/singa-run.sh -conf examples/cifar10/job.conf
### クラスタ上でのトレーニング
クラスター設定を変更して、上記トレーニングフレームワークの拡張を行います。
nworker_per_procs: 1
すべてのプロセスは1つのworkerスレッドを生成します。
結果、worker 達は異なるプロセス(ノード)内で生成されます。
クラスター内のノードを特定するには、*SINGA_ROOT/conf/* の *hostfile* の設定が必要です。
e.g.,
logbase-a01
logbase-a02
zookeeper location も設定する必要があります。
e.g.,
#conf/singa.conf
zookeeper_host: "logbase-a01"
スクリプトの実行は「Single ノード トレーニング」と同じです。
./bin/singa-run.sh -conf examples/cifar10/job.conf
## Mesos での実行
*working*...
## 次へ
SINGAのコード変更や追加に関する詳細は、[プログラミングガイド](programming-guide.html) をご覧ください。