Fork me on GitHub

クイック スタート


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を実行するとは、MesosYARN のようなクラスターマネージャー利用しない場合のことを言います。

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-shardcifar10-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のコード変更や追加に関する詳細は、プログラミングガイド をご覧ください。