クイック スタート¶
SINGA セットアップ¶
SINGAのインストールについてはこちらをご覧ください。
Zookeeper の実行¶
SINGAのトレーニングは zookeeper を利用します。まずは 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 や YARN のようなクラスターマネージャー利用しない場合のことを言います。
Single ノードでのトレーニング¶
1つのプロセスがローンチされます。 例として、 CIFAR-10 データセットを利用して CNN モデル をトレーニングさせます。 ハイパーパラメーターは、cuda-convnet に基づいて設定されてあります。 詳細は、CNN サンプル のページをご覧ください。
データと、ジョブ設定¶
データセットのダウンロードと、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のコードを変更、または追加する時は、プログラミングガイドをご覧ください。
並列化なしのトレーニング¶
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, 非同期トレーニング を実行することが出来ます。 例えば、job.conf を上記のように変更します。 デフォルトでは、1つの worker グループが1つの worker を持つよう設定されています。 上記の設定では、1つのプロセスに2つの worker が設定されているので、2つの worker グループが同じプロセスとして実行されます。 結果、インメモリ Downpour トレーニングフレームワークとして、実行されます。
ユーザーは、データの分散を気にする必要はありません。 ランダムオフセットに従い、各 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をローンチすることで 同期トレーニングを実行することが出来ます。
例えば、job.conf ファイルを上記のように変更します。
上記の設定では、1つの worker グループに2つの worker が設定されました。
worker 達はグループ内で同期します。
これは、インメモリ sandblaster として実行されます。
モデルは2つのworkerに分割されます。各レイヤーが2つのworkerに振り分けられます。
振り分けられたレイヤーはオリジナルのレイヤーと機能は同じですが、特徴インスタンスの数が B/g
になります。
ここで、B
はミニバッチのインスタンスの数で、g
はグループ内の worker の数です。
別のスキーム を利用したレイヤー(ニューラルネットワーク)パーティション方法もあります。
他の設定はすべて「並列化なし」の場合と同じです。
./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のコード変更や追加に関する詳細は、プログラミングガイド をご覧ください。