데이터과학 삼학년

Distributed training (feat.GCP CMLE) 본문

Machine Learning

Distributed training (feat.GCP CMLE)

Dan-k 2020. 1. 12. 00:42
반응형

Big jobs, distributed training

- parameter servers는 분산처리를 위한 뱅커와 같은 역할

> distributed가 될때 loss의 gradient값을 보내줌

> parameter server에서 받은 gradient들을 이용해 parameter들을 업데이트 시켜줌

> data parallelism을 위해 tf.estimator.train_and_evaluate 사용!!

- 데이터 병렬화

> 각 worker에서 계산된 gradient 값들이 속도차에 의해서 parameter servers에 적용할때 중복된 것들이 일어날 수 있는데 이것은 상관없어, 모델이 학습되는데 영향을 받지 않는 다고 함(Large Scale Distributed Deep Networks , asynchronous 비동기식업데이트)

<--> synchronous 동기식 업데이트 : 각 worker에서 gradient가 모두 계산될때까지 기다렸다가 각 워커에서 계산된 그래디언트의 평균값을 적용하여 업데이트함)

- 일반적으로 한 worker node는 한개의 parameter servers를 갖게 됨



 

- distributed estimator을 위해 아래와 같이 네가지 단계를 따라야함

- save_checkpoints_steps을 많이 하는 이유? → 비주얼을 확인하여 convex optimization 확인하고 최적의 모델을 결정하기 위함

- train_spec에는 input_fn과 max_step을 집어넣어주면 됨

- eval_spec에서 throttle_secs는 매 설정한 시간마다 결과를 저장, eval_spec에서도 step마다 결과를 저장하게 할 수 있다고 함

- latestexporter : 최신 정보를 저장, bestexporter : 최고의 결과만 저장

- train단계와 test(serving)단계는 플로우가 다르기 때문에 바꿔줄 필요가 있음. 여기서 serving_input_fn이 test 데이터를 넣는 함수라 볼 수 있음

 

- 이 단계에서 train,eval 단계와는 다르지

> json파일로 데이터를 싸서 보내는 형식 → infput_fn 형태의 feature로 변환 → 예측을 위한 값을 넣어줌

- export 전략을 세우고, 이에 데이터를 넣는 부분은 serving_input_fn을 통해 이뤄질 수 있음

> serving input fn 과 predict input fn의 차이가 있나???...REST API를 통해 접근하는 것 외(다른 머신에서 접근하는 것의 차이)

Why Cloud ML Engine

- 모델을 돌릴때 실질적으로 task.py가 돌아가는 것

- argument를 task.py에서 받아와서 model.py에 적용

 

- model.py에 들어가야하는 항목

- 왜 __init__.py 가 있어야하지? 아무것도 없는 파일, 이것의 역할은? setup.py의 역할은?

> setup.py에서 패키지나 라이브러리의 버전같은것 신경쓰는 것

- -- | 이 이하는 argument 와 관련된 것이 오도록 설정

- deploy model : 모델만들고 버전을 등록시키는 것

> 내생각엔 모델을 굳이 버전 안만들고 스킵하고 바로 예측으로 가는 것이 나은 것 같음

 

  1. As far as I know, It is possible to predict without creating version of model in CMLE. Actually I’ve predicted skipping steps of creating version because there rarely happens something wrong in creating version step.

What is the benefit of creating model version before predicting?



In this case how to use with

- ai-platform 데이터와 모델을 보고 분산처리할 필요가 있는지 확인하고 알아서 처리하기 때문에 신경쓸 필요가 없음



Distributed training

- cpu에 올라가는 dataset의 양을 batch를 이용하여 조절

- 많은 수의 인풋과 모델이 복잡하면 -> 배치사이즈를 조금 줄이거나, 메모리를 늘리거나, 레이어를 조금 줄여라

- async parameter server에서는 모든 worker의 gradient의 계산이 끝날때까지 기다릴 필요가 없음(비동기식)

- 모델 병렬화

 

728x90
반응형
LIST

'Machine Learning' 카테고리의 다른 글

Regularization  (0) 2020.01.18
Feature engineering 기초 & wide and deep model  (0) 2020.01.18
Deep Neural Networks 기초  (0) 2020.01.12
Linear & Logistic regression  (0) 2020.01.10
Core Tensorflow  (0) 2020.01.10
Comments