분산 트레이닝¶
Cluster Topology 설정¶
SINGA 에서 다양한 분산 트레이닝 프레임워크를 실행하는 방법을 설명합니다.
cluster topology 는 JobProto
속의 cluster
field 를 설정해줍니다.
cluster
는 ClusterProto
타입 입니다. 예를 들어
message ClusterProto {
optional int32 nworker_groups = 1;
optional int32 nserver_groups = 2;
optional int32 nworkers_per_group = 3 [default = 1];
optional int32 nservers_per_group = 4 [default = 1];
optional int32 nworkers_per_procs = 5 [default = 1];
optional int32 nservers_per_procs = 6 [default = 1];
// servers and workers in different processes?
optional bool server_worker_separate = 20 [default = false];
......
}
자주 사용되는 field 는 다음과 같습니다:
nworkers_per_group
andnworkers_per_procs
: decide the partitioning of worker side ParamShard.nservers_per_group
andnservers_per_procs
: decide the partitioning of server side ParamShard.server_worker_separate
: separate servers and workers in different processes.
다양한 트레이닝 프레임워크¶
SINGA 에서 worker groups 들은 비동기적으로, group 속에서 workers 들은 동기적으로 실행됩니다. 유저는 이 일반디저인을 이용해서 synchronous 와 asynchronous 트레이닝 프레임워크를 실행 할수 있습니다. 널리 알려진 분산 트레이닝을 어떻게 설정하고 실행하는지 설명하겠습니다.
Fig.1 - 다양한 트레이닝 프레임워크
###Sandblaster
Google Brain 에서 쓰이는 synchronous 프레임워크. Fig.2(a) 는 SINGA에서 Sandblaster 프레임워크를 실행하기 위한 cluster 의 설정 예입니다.
cluster {
nworker_groups: 1
nserver_groups: 1
nworkers_per_group: 3
nservers_per_group: 2
server_worker_separate: true
}
각 server group 는 모든 workers 의 requests 를 처리합니다. 각 worker 는 뉴럴네트 모델의 한 부분을 담당하여 계산을 하고, 모든 servers 와 통신을 하여 관련 parameters 값을 얻습니다.
###AllReduce
Baidu’s DeepImage 에서 쓰이는 synchronous 프레임워크. Fig.2(b) 는 SINGA에서 AllReduce 프레임워크를 실행하기 위한 cluster 의 설정 예입니다.
cluster {
nworker_groups: 1
nserver_groups: 1
nworkers_per_group: 3
nservers_per_group: 3
server_worker_separate: false
}
각 node 에서 1 worker 와 1 server 를 실행하여, 각 node 가 parameters 의 한 부분을 담당하고 계산을 하도록 설정합니다. 다른 nodes 와 업데이트 된 정보를 교환합니다.
###Downpour
Google Brain 에서 쓰이는 asynchronous 프레임워크. Fig.2(c) 는 SINGA에서 Downpour 프레임워크를 실행하기 위한 cluster 의 설정 예입니다.
cluster {
nworker_groups: 2
nserver_groups: 1
nworkers_per_group: 2
nservers_per_group: 2
server_worker_separate: true
}
synchronous Sandblaster 와 비슷하게, 모든 workers 는 1 server group 에 requests 를 보냅니다. 여기서는 workers 들을 여러 worker groups 으로 나누어서, 각 worker 가 update reply 에서 받은 최신 parameters 를 써서 계산 하도록 설정하였습니다.
###Distributed Hogwild
Caffe 에서 쓰이는 asynchronous 프레임워크. Fig.2(d) 는 SINGA에서 Hogwild 프레임워크를 실행하기 위한 cluster 의 설정 예입니다.
cluster {
nworker_groups: 3
nserver_groups: 3
nworkers_per_group: 1
nservers_per_group: 1
server_worker_separate: false
}
각 node 는 1 server group 와 1 worker group 를 실행합니다. Parameter updates 를 node 에서 각각 실행시킴으로써 통신코스트와 트레이닝 스텝을 최소화 합니다. 그러나 server groups 들은 정기적으로 네이버링 groups 들과 동기 시켜야 됩니다.