티스토리 뷰

이전 편까지 우리는 CloudML 이 무엇인지 살펴보고 모델을 클라우드에 던지고 결과를 받는 등 CloudML 전체 시나리오에 대한 이야기만 했다. 이번 글에서는 ML job 의 분산학습 아키텍처를 살펴보고 이해하도록 한다. 

함께보면 좋은 글

CloudML - 개념
CloudML - 기본
CloudML - 실전 심화

Scale tier

CloudML training 을 돌릴 서버의 사양을 조정할 수 있는 Scale-tier 옵션을 제공하는데 그 안에는 BASIC, STANDARD_1, PREMIUM_1, BASIC_GPU 그리고 CUSTOM 까지 총 다섯가지 종류가 있다. CUSTOM 을 알아보기 전에 다른 네 가지 방식의 사양을 보자.

 Cloud ML Engine scale tier

 Compute Engine machine type

  BASIC

 A single worker instance.
 ● n1-standard-4

  STANDARD_1

 ● 1 master, 4 workers, 3 parameter servers.
 
● master: n1-highcpu-8, workers: n1-highcpu-8, parameter servers: n1-standard-4
  PREMIUM_1

 ● 1 master, 19 workers, 11 parameter servers.
 
● master: n1-highcpu-16, workers: n1-highcpu-16, parameter serversn1-highmem-8

  BASIC_GPU

 ● A sigle worker instance.
 ● n1-standard-8 with one k80 GPU

scale tier 별로 GCE 인스턴스의 사양이 정의되는데 자세한 스펙은 인스턴스 생성 페이지를 통해 살펴볼 수 있다. 여기서 중요한 것은 STARNDARD_1, PREMIUM_1 에 있는 master, worker, parameter server 에 대해 인지하는 것이다. 이것들에 대해 알게되면 CUSTOM 도 자연스럽게 알 수 있다.

그렇다면 master, worker, parameter server 는 각각 무엇인가? 기본적으로 CloudML 을 통해 분산학습을 하게 되면 training cluster 는 여러개의 노드(인스턴스)에 할당되어 작업을 수행하게 되는데 여기서 노드는 흔히 replica 로 부르게 된다. 결국 replicamaster, worker, parameter server 로 구분되어 사용 되는데 이때 분산학습에 해당하는 scale tier 는 single worker 가 아닌 STANDARD_1PREMIUM_1 이 되겠다. (추가로 CUSTOM 까지)

Master
다른 작업들을 관리하고 전체 상태를 모니터링 하게 된다. 모든 작업이 완료될 때까지 수행된다.

Worker
training 을 수행하는 replica 이다. 한편 worker 간 작업을 조정하는 특수한 replica 는 chief worker 라고 부른다.

parameter server
worker 간에 공유된 모델 상태를 조정하게 된다.

master 와 worker 의 경우 직관적이기 때문에 이해하기 쉬운 반면에 parameter server 는 분산학습 개념이 없으면 이해하는데 어려움이 있을 수 있다. 아래 그림을 통해 상세히 알아보도록 하자.

Parameter node (replica) Worker node 에서 갱신되는 모델의 정보(이를테면 Gradient vectors)를 주기적으로 업데이트해서 다시 worker 에 전달하는 역할을 수행한다. 모든 동작은 비동기로 병렬처리 되는데 예를들어 10,000개의 배치 작업을 10개의 worker node 가 수행한다면 대략 1,000 개씩 맡아서 수행을 하게 되는 개념이다. 정확하게 나누어 떨어지지는 않고 rough 하게 처리된다. 거창해보이지만 걱정할 것 없다. 우리가 신경 쓸 건 없으니까.

CUSTOM

custom 은 앞에 실전 심화에서도 살펴본 것과 같이 replica 를 상세히 설정할 수 있는 scale-tier 이다. 다시 노멀하게 사용되는 config.yaml 의 각 설정을 하나씩 살펴보자. 

trainingInput: 
  scaleTier: CUSTOM 
  masterType: complex_model_m 
  workerType: complex_model_m 
  parameterServerType: large_model 
  workerCount: 9 
  parameterServerCount: 3

masterType, workerType, parameterServerType 은 각각 사전 정의된 사양의 GCE 인스턴스 (replica) 이고 workerCountparameterServerCountworker nodeparameter server node 의 개수를 지정하는 설정이 되겠다. 여기서 다뤄지는 서버들의 종류는 밑에 표를 참고하도록 하자.

 Machine type

 

Cloud ML Engine machine type

 CPU

GPUs

Memory

 standard

n1-standard-4

 XS

 -

 M

 large_model

n1-highmem-8

 S

 -

 XL

 complex_model_s 

n1-highcpu-8

 S

 -

 S

 complex_model_m

n1-highcpu-16

 M

 -

 M

 complex_model_l

n1-highcpu-32

 L - L
 starndard_gpu n1-standard-8 

 XS

 1 (K80)

 M

 complex_model_m_gpu

n1-standard-16 

 M

 4 (K80) 

 M

 complex_model_l_gpu

n1-standard-32

 L

 8 (K80) 

 L

 stardard_p100 (Beta)

n1-standard-8

 XS

 1 (P100) 

 M

 complex_model_m_p100 (Beta) 

n1-standard-16

 M 4 (P100)  M

설정에 따라 CPU 개수나 메모리가 약 두 배로 증가한다고 보면 되는데 XS, S, M, L, XL 순이다. 이것을 참고해서 CPU 와 메모리의 가용 용량을 가늠하면 되겠다. 더 좋은 성능을 갈구할 수록 비례적으로 비용이 증가하게 되니 적당한 선에서 타협할 수 있는 지혜가 필요하겠다.

여러가지를 준비했지만 이번 글에서 제일 중요한 것은 위에 그림이다. parameter  serverworker 의 관계를 이해해야 CUSTOM 모드를 사용할 때 적당한 replica 개수를 지정할 수 있기 때문이다. 실제로 사용할 때 어떤 비율로 parameter serverworker 를 구성하는 것이 이상적인지 알 수 없다. 모델마다 다를 수도 있고, 그저 경험과 삽질을 통해 알 수 있을 것이라고 추측할 뿐이다.


참고자료

https://cloud.google.com/ml-engine/docs/training-overview#job_configuration_parameters
https://cloud.google.com/ml-engine/docs/distributed-tensorflow-mnist-cloud-datalab
https://cloud.google.com/ml-engine/pricing



'개발 > Cloud (GCP)' 카테고리의 다른 글

Cloud TPU 사용하기  (1) 2018.02.15
[소식] 드디어 TPU를 일반에 공개  (0) 2018.02.13
CloudML - 분산학습 아키텍처  (0) 2018.01.08
CloudML vs GCE  (0) 2018.01.04
CloudML - 실전 심화  (4) 2017.12.15
datalab 버전 업그레이드  (0) 2017.09.29
댓글
댓글쓰기 폼