데이터과학 삼학년

Data engineering on GCP 본문

GCP

Data engineering on GCP

Dan-k 2020. 1. 17. 18:13
반응형

Data engineering on GCP

 

[Introduction]

Data

  1. structured     -> Bigquery, Dataflow

  2. unstructured  -> Dataproc, AutoML(CMLE), CMLE(tensorflow, scikit-learn 내재)

Map-reduce

  1. DATA 쪼개기 : Shard

  2. DATA 입력 : Map

  3. DATA를 ID(식별자)에 따라 재분류 : Shuffling

  4. 처리된 DATA를 합치기 : Reduce

Ex) HADOOP, Spark

  • 병렬분산 처리로 방대한 DATA를 처리하지만, 머신의 고장과 과정의 복잡성, 최적화 등의 문제로 어려움 발생

  • 병렬분산 구조 완성과 Hadoop 시스템을 대신 관리 : Dataproc

DataProc

  1. GCP -> Create cluster

  2. 원하는 처리 환경을 설정(master, worker node 설정)

  3. 평균 90초이내 생성

  • 기존 하둡 & 스파크 유저에게 유용할 것으로 보임

Google Cloud

  • 머신 내에서 CPU, MEMORY, STORAGE 분리하여 처리 

CPU

            →

CPU

MEMORY

MEMORY

=============

STORAGE

STORAGE

 

  • 서버없이 작업 가능하도록 환경 구성

    • Compute // Storage 분리

    • Lazy evaluation 

      • Step에 따라 일일이 수행하며 정산되는 것이 아니라 명령을 최대한 모아 놓았다가 효율적으로 처리하는 방법

 

[Analyzing unstructured data]

Google ML API

  • 사전 훈련된 모형 사용 (ex.개, 고양이 이미지 등)

  • 예측만 사용자가 실행

Cloud AutoML

  • 언어, 이미지 분석 및 번역에 특화

  • 사용자가 직접 데이터를 이용하여 학습

  • ML API

  • Ex. 사진을 업로드만 하면 이미지 자동 분류(자동차)

Cloud ML Engine

  • 사용자가 코드 작성

  • 클라우드 환경에서 실행

  • 사용자가 직접 데이터를 이용하여 학습

NLP 활용 사례 

  • 자동응답 기술_google deepmind Wavenet

  • Ex. 통화로 미용실, 음식점 예약

 

[Analyzing structured data]

BigQuery : 분석에 필요한 원하는 정제된 data를 추출할 때 필요

SELECT

FROM   ‘project.dataset.table’

WHERE

 

Cloud BigTable : 방대한 data를 끊임없이 수집하여 저장할 때 필요 => 대대용량 데이터에 적용

Cloud storage 

 

 

BigQuery

  • normalized vs denormalized 2가지 방식을 택하여 이용

-> column안에 table, column안에 column이 있는 형태

      -      array / struct

array : table안에 table이 있는 형태

struct : table안에 table이 나눠져 있는 형태

Titles

title

score

 

Grouping - low cardinality로 grouping 권장

low cardinality : 국가, 성별       <-> high cardinality : 이름, 주민번호

wildcard tables

ex. FROM ‘g-p-data.noaa_gsod.gsod*’  -> gsod* : gsod 테이블을 모두 union 해라

table partitioning : 어떤 기준에 따라 table을 분리하는 방법(ex. 날짜별로 테이블 분리)

 

DataFlow (Apache Beam을 사용)

  • Data를 정제하는 기능

  • streaming data는 data의 수집 변동성으로 machine이 elastic하게 운영되며 처리됨

  • source : data input_(설명 : pp13)

  • Pcollection : step에 따라 병렬로 처리되는 데이터의 집합_(설명 : pp11~12)

  • transform : 기준에 따라 data를 정리하는 역할

  • sink : 분산된 데이터를 한 곳에 모아 처리 종결_(설명 : pp14)

  • Pipeline : Data source -> Pcollection -> transform -> sink 가 되는 일련의 과정_(설명 : pp9~10)

  • run : pipeline 실행_(설명 : pp15)

  • python과 java 언어를 지원

  • ParDo : 병렬처리 명령

  • pipeline을 짜고 run 을 통해 실행 -> lazy evaluation을 위해

  • Data 처리 과정

source

분석(정제, 변환)

sink

Cloud Pub/sub

DataFlow

BigQuery

Cloud Storage

pub/sub

storage

  • data(Pcollection)이 transform되고 transform 데이터는 또다른 Pcollection이 되어 다시 다음 step을 거치게 됨

  • ParDo : Filtering, converting, extracting, calculating에 사용

  • Groupby : key별로 나눈후 연산하는 방식

  • Combine : shuffle된 값을 연산을 먼저하고 key별로 정리 후 groupby 방식으로 몰아서 연산하는 방식

  • Map-reduce : dataflow python version에서는 map, flatmap을 이용해서 분산처리

Dataprep : 데이터 전처리에 유용하게 사용 가능, petabyte의 자료도 셀로 들어갈 수 있게 제공할 예정

Cloud ML

  • Cloud ML engine model로 training 후 predict

  • hyper parameter : 뉴런수, hidden layer 수, lr, Activation Function, epoch, batch size...등

  • hyper parameter optimization -> 보완중

 

ML with Tensorflow

Tensor 

Rank 0 (차원)

Rank 1

Rank 2

Rank 3

Rank 4

tensor

tensor

tensor

tensor

tensor

scalar

vector

matrix

   

 

Tensorflow

  • lazy evaluation을 위해 session 함수를 이용하여 틀을 짠 후 연산

from tensorflow.contrib.eager.python import tfe

tfe.enable_eager_execution() 

해당 명령문을 입력하면 lazy evaluation 하지 않고 연산

 

ML 작업 순서

  • Feature selection

  • Model Definition

  • Training

  • Evaluation

  • Prediction

           tf.data (library) : 데이터 sharding 할 때 이용

MLengine

  • 내 코드를 작성한 다음 cloud내에 있는 머신에 넣기

  • input -> preprocessing -> feature creation -> train model -> predict

  • train model : hyper parameter tuning

Backend

  • load balancer에 의해 지역별 서버 분배 시스템이 있음

  • Demand에 따라 server 자동적으로 분배(auto scaler)

  • Cloud MLE를 이용하면 다운발생이 거의 없을 수 있음

 

Cloud ML Engine

  • 코드를 짜서 packaging(_init__.py, model.py, task.py)

  • model.py : 분석가가 원하는 모형을 코드로 짠 것

  • task.py : model을 돌리는 등 작업 코드

Feature Engineering

  • 보통 전문가의 insight를 통해 발굴(그룹의 회의)

  • Feature의 속성에 맞게 범주형, 연속형으로 구분하여 사용

  • ML을 이용하여 Feature importance로 feature selection 고려도 필요

Hyper Parameter

%writefile hyperparam.yaml 으로 하이퍼파라미터 튜닝 try를 설정하고, --config=hyperparam.yaml 으로 실행하면 하이퍼 파라미터 설정에 도움받을 수 있음

 

728x90
반응형
LIST
Comments