Spark Machine Learning and Deep Learning Deep Dive.
Scenarios that use Spark hybrid with other data analytics tools (MS R on Spark, Tensorflow(keras) with Spark, Scikit-learn with Spark, etc)
2. Who am I ?
• 김훈동 Chief Partner ( hoondongkim@emart.com )
• 신세계 그룹 온라인 포털 SSG.COM 빅데이타팀 리더
• Hadoop, Spark, Machine Learning, Azure ML 분야
Microsoft MVP(Most Valuable Professional)
• Major in BigData RealTime Analytics & NoSQL
• http://hoondongkim.blogspot.kr
3. I will say …
• Spark Cluster 운영 경험 및 노하우 공유
• Spark로 하는 Machine Learning 에 대하여
• 장점과 단점
• Machine Learning & Deep Learning 분야에서의
Spark의 위상
• Spark 를 보완하는 다양한 도구 및 기술들
• Spark 개발자가 Deep Learning 시대에 임하는 자세
7. 하지만, 하는 일이 달라지고 있음!
– 과거 현재 미래
• 과거를 분석 한다. (BigData Eco System Infra)
• 트래킹 로그를 남긴다.
• 빅데이타 수집 저장 분석을 위한 인프라를 만든다.
• 빅데이타 배치로 과거 시계열 분석을 하고 시각화를 한다.
• 현재에 반응 한다. (RealTime Layer / Spark Streaming / ELK)
• 실시간으로 데이터 스트림을 분석한다.
• FDS, 보안관제, 모니터링 등 즉각적으로 현재 상황에 대처하여 현재를 능동적으로 대비한다.
• 미래를 예측 한다. (Mining / Machine Learning / Deep Learning)
• 고객이 관심 갖고 있고 곧 살 것 같은 것을 추천한다.
• 미래에 집행할 광고 및 제휴 채널 예산을 보다 ROI 높게 배분한다.
• 발주를 예측한다.
• 최적의 트럭 경로를 예측한다.
• 가격을 올릴지 말지 얼마나 세일할지 최적의 가격을 예측한다.
• 미래를 대비 한다. (Machine Learning / Deep Learning)
• Chatbot
• 자연어 활용, 이미지 활용 -> 검색 및 추천 고도화
• 기타
3~4년 전
2~3년 전
요즘
18. 개발자 입장에서 Deep Learning 이란?
• 제프 딘 역할
• 우리가 더 잘하는 건….
• 대용량 데이터 처리
• 데이터 전처리 , 후처리
• 알고리즘 구현(코딩 레벨 구현)
• Deep Learning 은 Low Level 코딩 구현이 더 많음.
• Deep Learning 특히 CNN, RNN, RNN변형 , RL 등은 수학이 그리 복잡하지 않음.
• 이전의 Machine Learning
• Markov-Chain Monte Carlo
• Gibbs Sampler
• Variation Inference
• Deep Belief Network
• 현재의 Deep Learning
• CNN
• RNN
• LSTM …
Mathematical formula
Engineering Art
26. 언어별 장점 섞어 쓰기
• Scala + Java
• PySpark + Python
• SparkR + RevoScaleR(MS R) + CRAN-R
27. Spark ML 에 알고리즘이 없는 경우의 최
후의 보루! 직접 구현???
복잡한 알고리즘의 구현은 Java 가 좀 쉽긴 함. (example github source 도 많고…)
병렬성을 고려한 처리는 Java 로 구현하는것에 한계.
병렬성을 위한 Main routine 은 Scala 로…
45. Spark 의 Position!
- Spark 개발자가 BigData Scale ML/DL Job을 처리하는 시나리오!
R, SAS , SPSS
Matlab
R, Python
BI, OLAP
Spark
Spark ML
Spark Streaming
Spark GraphX
Hadoop
NoSQL
Python, R
Spark R
Revolution R
Tensorflow
Keras
CNTK 등등
H2O, Weka
Deeplearning4j
46. Spark ML 실무 Pain Point 시나리오 #1
• 메모리 & CPU 리소스 부족 문제(성능 측면과 리소스 측면 아키텍처가 달라짐.)
• ML 에서는 CPU 병목이 더 빈번
• Yarn mode vs Mesos Mode vs Stand Alone
• Hadoop 노드가 전체 eco system 의 1/5 ? 1/3? 그럼 mesos 를 쫙 펼쳐놓고 사용하는게
유리. 물론 머신이 충분히 많아서 리소스가 아무 문제가 안되면 이런 논리는 해당사항 없
음.
• Mesos 는 Off heap 을 다이나믹 하게 잘 사용. CPU와 Memory, Executor 의 갯수까지 매
우 유연하게 할당해줌. 하나의 Job 안에서도 매우 Elastic 함.( yarn 보다 이 부분은 장점이
더 많음. Fine Grain 모드일때). 물론 Yarn 도 Dynamic Allocation 세팅 이 불가능하진 않음.
실제 돌려보면 둘간의 양상이 좀 다름. Mesos 가 훨씬 Dynamic 함. But 성능이 그리 빠
르진 않음. Dynamic 할당에 Overhead 가 좀 있는 듯. 이 부분이 Spark 2.x 에서는 좀
개선됨. Mesos 의 Dynamic Allocation 메커니즘이 바뀌었음.) -> 추가로 이 시나리오가
run 할려면 mesos 는 spark.scheduler.mode = FAIR 옵션을 주어야 하고, Yarn 은 Yarn 스
케줄러 세팅에 Fair 스케줄러를 정교하게 추가 세팅할 필요가 있다.
48. Spark ML 실무 Pain Point 시나리오 #3
• 리소스를 쥐어 짜면서 사용하는 Production 상황. (ML job 이 많을수록 리소스
부족 현상 증가)
• 모든 Job 을 최대 퍼포먼스 Full 할당으로 Serial 구성??? 바람직 하지 않음. 어떤
경우는 CPU 를 어떤 경우는 Memory 를 많이 쓰기 때문에…. 복수 Job 이 잘게
쪼개져 병렬 수행되는 경우( 마치 가상화가 OnPremise 보다 효율이 좋은것처럼)
더 낳은 결과를 가져올 수 있음. 하루 종일 10분배치 시간 배치 일배치가 끊임없
이 돌고 있고, 경우에 따라 Long Running Adhoc 배치가 도는 경우 정교한 세팅
은 관리가 매우 손이 많이 가고, 인재로 인한 장애 확률을 높임. 최대한 dynamic
allocation 의 힘을 빌리는게 유리. (job 은 최대한 잘게 쪼개지는 fine graind
mode.) 부분적으로 매우 중요한 잡에 대하여 coarse graind mode. 로 dedicate
자원 할당. 혹은 별도 hw zone 으로 나누는 것도 방법임. (예, Spark Streaming 의
경우… 리소스에 매우 민감)
49. Spark ML 실무 Pain Point 시나리오 #4
• Disk 부족 문제
• Machine Learning 을 하는 경우 알고리즘에 따라, 작은 크기의 Input
데이터라 할지라도, 계산에 동원된 전체 Node 의 모든 Disk 를 Full 로
사용하고도 모자라는 경우가 있다.
• [해결책]
• Hyper-Parameter 값 설정 Trade Off
• Hybrid Cloud 리소스 활용
• Mesos Cluster 활용 ( Yarn Cluster 개수는 Hadoop Node 개수에 dependency가
있으나, Mesos Cluster 는 보유 전 장비에 펼칠 수 있다. 예, NoSQL Cluster 도 동
원 가능 )
50. Spark ML 실무 Pain Point 시나리오 #5
• IO 병목 문제
• 일반적인 Computer Science 상식과 달리 Spark 에서는 IO 병목이 흔하
지 않음.
• 가끔 다량의 데이터에 대한 File Operation 이 많을 때 IO 병목이 있을
수 있으나, 가장 쉽고 빠른 해결책은 Network Card 를 업그레이드 하
는 방법.
• 1G 카드를 10G 로 교체. 혹은 노드당 10G 2개 혹은 4개 로 복수 네트
워크 카드 장착.
• Spark 의 경우 이 경우 15~20% 정도의 속도 개선이 생김.(속도 개선이
미미한 모델도 있음)
• Network 속도 자체는 수십배 좋아졌지만, 20% 이상 성능 개선이 되는
경우는 거의 없다. 대부분 리소스 병목은 CPU, Memory , IO 등이 복합
적이기 때문.
51. Spark ML 실무 Pain Point 시나리오 #6
• BigData Scale Data Load 불가능 시나리오
• 이때는 Map/Reduce 가 더 낫다.
• 생산성을 위한 Choice
• Hadoop Streaming
• Pig, Hive 등
• Clojure 기반의 Cascalog, Scala 기반의 Scalding
• 위 Map/Reduce Wrapping 기술로 Data 를 선집계, 이후 집계 데이터
로 Spark ML 실행.
• 알고리즘 자체가 BigData Scale 의 Input 을 요구하는 경우
• Popular 알고리즘은 Mahout이 대안 (최신 버전 말고 구 버전이 더 유용)
• Weka, DeepLearning4J , H2O , Sparkling Water 등 다른 Tool 의 Support 연동
안 검토
52. Spark ML 실무 Pain Point 시나리오 #7
• 너무 느릴때
• 각종 Model 의 Hyper Parameter 를 적절히 변경해 주어야 함.
• Driver Memory, Executor Memory 를 적절히 지정해 주어야 함.
• Data 를 BroadCast.
• 최초에 한번 Heavy Computing 이 필요하더라도, 아래 기법 잘 활용해야 함.
54. Spark ML 실무 Pain Point 시나리오 #8
• 너무 잘게 파일이 많을 때에는 어마어마하게 셔플 IO Over Head 발생
• File Write 측면에서는 Map 과 RDD.saveAsTextFile(HDS_PATH) 가 유리
• Spark ML / Spark SQL Data Load 측면에서는
RDD.coalesce(1).saveAsTextFile(HDS_PATH) 가 유리
• File 이 어마어마 하게 클때는 coalesce(1) 없이 Write 이후 roading 시점
혹은, writing 직후 Map/Reduce 로 Merge 가 더 유리.
55. Spark ML 실무 Pain Point 시나리오 #9
• 알고리즘 종류 빈약
• 모델 및 feature selection 과정에는 다양한 알고리즘과 다양한 시도를 빠르게
많이 시도해 볼 필요가 있음.
• Spark ML 이 제공하는 알고리즘들은 대부분 가장 Popular 하고, 비교적 최신
알고리즘인 대표 알고리즘이 1개 씩만 존재.
• 동일 주제에 유사한 복수 알고리즘 테스트가 힘듦.
• 알고리즘 Selection 은 Python 이나 R 등 Support 알고리즘이 더 풍부한 플랫폼이 더
유리.
• 알고리즘이 확정되면, 해당 알고리즘이 Spark ML 에 존재하는 검토
• 존재하는 경우 Spark ML 로 Production 화 개발.
• 예, R 로 2박 3일 걸리는 모델을 Spark ML 로 시간 배치 화 개발.
• 예, 모델에 대한 알고리즘 개발 시점에는 셈플 데이터 이용. Production 시점
에는 전수 데이터 이용.
56. Spark ML 실무 Pain Point 시나리오 #10
• 알고리즘은 존재하는데 메소드가 너무 빈약
• 막상 알고리즘은 존재하는데, 고급 기법이나 파라미터, 각종 부가 메소
드가 존재하지 않는 경우가 많음.
• Word2Vec 의 예
• FP-Growth 의 예
57. Spark ML 실무 Pain Point 시나리오 #11
• 알고리즘이 존재하지 않는 경우. (ML 의 경우)
• 알고리즘이 존재하지 않는 경우. (Deep Learning 의 경우)
58. 기타.
• Deep Learning 툴 소개
• http://ankivil.com/choosing-a-deep-learning-software/
• 딥러닝 프레임워크 속도 비교
• https://tensorflow.blog/2017/02/13/chainer-mxnet-cntk-tf-
benchmarking/
• Keras
• 버전 2 준비 되고 있음.
• CNTK 도 Keras 백엔드가 될 듯.
• Keras 가 Tensorflow 코드 베이스로 흡수??
Notas del editor
제가 한 경험에 대하여 말해보려고 합니다.
SSG
과거
현재
미래
이중 spark 라는 단어는 Spark Job, Spark R , Spark Streaming , Machine Learning & Deep Learning 쪽에 Spark ML 이렇게 3곳에 등장하고 있다
오늘은 이중에 Spark ML ,그리고 Deep Learning 에서의 활용 에 대하여 살펴볼 예정이며, 다음과 같은 여러 에코 시스템 중에 어떻게 중추적인 역할을 하고 있는지 Spark의 포지셔닝에 대하여 살펴보도록 하겠습니다.
Disk 병목은 Hyper-Parameter 값 설정으로 극복해야 한다. Trade Off.
- IO 병목은 흔하진 않다. 가끔은 IO 병목이 생기는 경우가 있는데, (굉장히 많은 양의 데이터를 다룰때) Network 카드를 10G로 바꾸면, 혹은 10G 카드를 2개 ~ 4개 꼳아 주면???
15~20% 정도의 속도 개선이 생긴다. Network 속도 자체는 수십배 좋아졌지만, 20% 이상 성능 개선이 되는 경우는 거의 없다. 대부분 리소스 병목은 CPU, Memory , IO 등이 복합적이기 때문.
Disk 병목은 Hyper-Parameter 값 설정으로 극복해야 한다. Trade Off.
- IO 병목은 흔하진 않다. 가끔은 IO 병목이 생기는 경우가 있는데, (굉장히 많은 양의 데이터를 다룰때) Network 카드를 10G로 바꾸면, 혹은 10G 카드를 2개 ~ 4개 꼳아 주면???
15~20% 정도의 속도 개선이 생긴다. Network 속도 자체는 수십배 좋아졌지만, 20% 이상 성능 개선이 되는 경우는 거의 없다. 대부분 리소스 병목은 CPU, Memory , IO 등이 복합적이기 때문.
- IO 병목은 흔하진 않다. 가끔은 IO 병목이 생기는 경우가 있는데, (굉장히 많은 양의 데이터를 다룰때) Network 카드를 10G로 바꾸면, 혹은 10G 카드를 2개 ~ 4개 꼳아 주면???
15~20% 정도의 속도 개선이 생긴다. Network 속도 자체는 수십배 좋아졌지만, 20% 이상 성능 개선이 되는 경우는 거의 없다. 대부분 리소스 병목은 CPU, Memory , IO 등이 복합적이기 때문.
Tensorflow 가 인기인 이유
GPU + 멀티노드 의 용이함. ( 기존 강자 Theano , Torch 를 따돌리는 계기가 됨. )
Lua 보다는 Python ( Torch 의 경우 대비… )
Tensorflow Serving
Scikit flow (현재 Tensorflow 에 합쳐짐. TF.Learn 패키지. Scikit Learn 스타일 Tensorflow Wrapper API)