SlideShare a Scribd company logo
1 of 44
Case Study
TensorFlow Internals
2016. 3. Ver.
Kiho Hong (swear013@gmail.com)
Google TensorFlow
• https://www.tensorflow.org
• 구글이 오픈 소스로 공개한 딥러닝 플랫폼
• 계산 그래프 모델
• Multi-GPU, 분산 환경 지원
• 구글 클라우드 API 에서도 제공됨 (2016. 3. 24)
TensorFlow LOC
Module LOC 비 고
core 211,610 C++ 로 작성된 TensorFlow 코어 코드
stream_executor 28,056 GPU CUDA 관련 코드
python 103,113 Python 환경 지원을 위한 파이썬 코드
etc 68,368 contrib, models, tensorbard, tools, user_ops
total 411,147
commit : 005386dc198220601293d4821e6de63246527b0c
내 용
• 하고자 하는 것
• 코드 레벨에서의 TensorFlow 동작 방식을 살펴보려고 합니다.
• 하지 않는 것
• 딥러닝 이론 자체를 다루지 않습니다.
• TensorFlow 사용법을 다루지 않습니다.
Simple Neural Network
𝐻 = 𝑅𝑒𝐿𝑈(𝑤1 𝑥)
𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑤2 𝐻)
⋇ 𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑤2 𝑅𝑒𝐿𝑈(𝑤1))
𝑅𝑒𝐿𝑈 𝑧 = max(0, 𝑧)
𝑠𝑜𝑓𝑡𝑚𝑎𝑥 𝑧 =
exp(𝑧𝑖)
𝑗 exp(𝑧𝑗)
input : MNIST
x1
x2
x3
y1
y2
y3
w1 w2
ReLU
Softmax
일반적인 구현 스타일 (with Torch)
Net
Li near Layer
ReLU Layer
Li near Layer
Wei ght
Wei ght
Gr ad
Gr ad
scor e [ cr i t ]
i nput
updat er
TensorFlow : Computation Graph
TensorFlow Language
• Python
• 그래프 구성은 Python API 를 이용하여 작성할 것을 권장합니다.
• 이 외에도 TensorFlow 를 손쉽게 사용하기 위한 기능들을 제공합니다.
• C++
• 성능을 요구하는 실제 연산 작업은 모두 C++ 환경으로 작성됩니다.
Python API 로 하는 일
• 그래프를 작성합니다. • Session 을 관리합니다.
그래프 작성
• Python 구문을 이용하여 연산에 사용할 그래프를 구성합니다.
• 함수가 호출되는 즉시 내부 연산이 수행되는 것은 아닙니다.
• 오로지 연산 그래프가 작성되는 과정을 거치게 됩니다.
Session의 역할
• Session은 TensorFlow 그래프 연산을 수행하기 위한 사용자 인터페이스 입니다.
• Graph를 생성하고 Operation을 수행하며 Tensor를 평가(eval)합니다. (C++ Session)
• tf.Session 은 반드시 한 개의 tf.Graph 객체를 포함합니다.
• 특정 tf.Graph 를 명시하지 않은 경우 default graph 가 사용됩니다.
tf.Session 작업
fetch feed
http://www.swig.org/
Google Protocol buffer
• 앞서 본 내용에서는 tf.Graph 정보를 C++로 넘기는 부분이 없습니다.
• tf.Graph 또한 Python 객체이므로 바로 C++ 전달은 불가능합니다.
• tf.Graph 를 Protocol Buffer 타입의 자료형으로 변환한 뒤 전달하게 됩니다.
• 그래프 구성 자체를 기술한 정보가 Serialize된 데이터라고 생각하시면 쉽습니다.
Overview (in C++)
Session 그래프 연산 작업 관리
Device 디바이스 정보를 담고 있는 객체
Graph 연산(op)과 값(tensor)을 그래프 구조로 저장
Executor 그래프 연산을 실제로 수행
OpKernel 그래프 노드에 지정된 연산 (Functor)
Session
• 사용자가 요청한그래프 연산을
실제로 수행하는 객체입니다.
• 현재 2가지 Session이 제공됩니다.
• 로컬 환경 : DirectSession
• 분산 환경 : GrpcSession
• 먼저 로컬 환경부터 살펴봅시다.
Di r ect Sessi on
Sessi on
Gr pcSessi on
Di r ect Sessi on
Fact or y
Gr pcSessi onFact or y
Fact or y
new( ) new( )
Sessi onFact or y
그래프 변환 Overview
Session : 그래프 생성
• Session::Run() 호출시 가장 먼저 GraphDef 를 Graph 객체로 변환합니다.
Rewrite Graph
sess.Run([“relu”], {image:xs})
fetch feed
그런데 Run() 실행시마다 이런 많은 작업을 반복한다고요 ???
i mage
hddn
w1
ReLU
w2
scor e pr ob l oss
l abel
f eed
f et ch
i mage
hddn
w1
ReLU
w2
scor e pr ob l oss
l abel
Rewrite Graph (cont’d)
Sessi on
“ xs, ys- >l oss: st ep/ ”
“ i ni t ” gr aphexecut or
gr aphexecut or gr aphexecut or
Node에 device 설정하기
• 그런데 TensorFlow 는 GPU 환경에서 돌려볼 수 있나요?
• 많은 딥러닝 라이브러리에서 Process 단위 CPU/GPU 모드를 제공합니다.
• 하지만 TensorFlow 에서는 Node 단위로 Device를 선택할 수 있습니다.
• Node 단위 실행을 위해 Graph 객체는 분할될 수 있습니다.
Node에 device 설정하기 (Cont’d)
• 사용자가 명시적으로 코드 상에서 device를 지정할 수 있습니다.
• 이런 구문을 사용하면 해당 Node에 device 정보가 기록됩니다.
• Node에 device 정보가 없는 경우 TensorFlow가 알아서 device를 지정합니다.
Device 할당 제약 사항
• Node에 device를 지정할 때의 제약 사항입니다.
1. 사용자가 코드 상에 명시적으로 device 를 기술한 경우
• 반드시 해당 device 로 노드를 할당해야 합니다.
2. 어떤 노드가 다른 노드의 참조 타입으로 생성된 경우
• 이 경우 두 노드는 동일한 device 로 할당해야 합니다.
3. A와 B노드가 주어지고 B노드에 @A와 같은 colocation이 사용된 경우
• 이 경우도 A와 B 노드는 동일한 device 로 할당되어야 합니다.
SimplePlacer
Di r ect Sessi on
Gr aphSi mpl ePl acer
Devi ceSet
devi ce_set
devi ces
Devi ce
devi ces
Devi ceMgr
LookupDevi ce( )
Li st Devi ces( )
devi ces devi ce_mgr
SimplePlacer (Cont’d)
• 이름대로 간단한 방식으로 작업합니다.
• TensorFow White Paper 에 따르면,
• 노드 할당시 Cost 기반 할당을 수행한다고 되어 있습니다.
• 하지만 현실은 ?
• 일단 device를 할당할 노드는 부모 노드의 device 정보를 얻어 자신의 device 정보로 사용합니다.
• 이 때 부모 노드의 device가 지정되어 있지 않은 경우, 사전 고려된 순서에 따라 할당됩니다.
• 따라서 GPU 장비가 설치되어 있는 장비의 경우 대개 GPU:0 이 할당됩니다.
• 즉, 할당 정책은 형편없다는 뜻입니다. (이후에 더 좋은 Placer 가 나올거라 생각합니다.)
GPU: 0 GPU: 1
CPU: 0
i mage
hddn
w1
ReLU
w2
scor e
pr ob
l oss
l abel
Graph partitioning
• Device 단위로 파티셔닝을 수행합니다.
• 그래프 분할을 완료하기 위해서는 추가 작업이 필요합니다.
• 접점이 되는 노드에 recv, send 노드를 추가하여 그래프 분할을 완성합니다.
• 이 때 서브그래프에서 recv가 여러 노드에서 사용된다면 하나로 치환합니다.
GPU: 0 GPU: 1
CPU: 0
i mage
hddn
w1
ReLU
w2
scor e
pr ob
l oss
l abel
send
r ecv send r ecv
send
r ecv
Executor
• 분할된 그래프들을 실행하는 주체는 Executor 객체입니다.
Executor
• Executor는 서브-그래프 하나마다 생성됩니다.
• Executor는 개별적인 Thread 작업으로 구성됩니다.
• Executor는 서브-그래프의 시작 노드를 찾아 그래프 연산을 수행합니다.
• 모든 Executor의 작업이 끝날 때까지 ExecutorBarrier가 막아줍니다.
• Executor가 하는 일은 좀 더 복잡하지만 이 정도만 알고 넘어갑시다.
랑데뷰 (Rendezvous)
• 서브-그래프 사이의 send와 recv 노드 데이터를 동기화하는 객체입니다.
• 각 Executor 들은 자신의 서브 그래프 내의 send와 recv 객체를 Rendezvous 객체에 등록합니다.
• Send()
• send 노드에 속한 Tensor 데이터를 다른 그래프로 보내줄 때 사용합니다.
• Send() 호출시 이미 다른 Executor 가 해당 노드의 데이터를 요구한 사실이 있다면 바로 데이터를 전달합니다.
• RecvAsync()
• recv 노드에 속한 Tensor 데이터를 다른 그래프로부터 얻어올 때 사용합니다.
• RecvAsync() 호출시 이미 다른 Executor 가 해당 노드를 등록해 놓았다면 바로 데이터를 얻어옵니다.
I nt r aPr ocess
Rendezvous
Send( )
RecvAsync( )
l ocal
Local RendezvousI mpl Rendezvous
Send( )
RecvAsync( )
Rendezvous Table
Device 사이의 데이터 전달
• 앞서 살펴보았지만 각각의 그래프는 device 단위로 나누어집니다.
• 그래프가 서로 주고 받는 데이터는 send와 recv 노드에 속한 Tensor 타입의 자료구조입니다.
• 여기서 Tensor란 차원(dimension) 정보를 가진 메모리 데이터 블록입니다.
• 서로 다른 device 사이의 데이터 복사는 어떻게 해야 할까요?
• Device 라는 객체에는 자신의 Device 타입과 메모리 할당용 Allocator를 가지고 있습니다.
• InterProcessRendezvous 객체에서 Device 타입을 조회하여 적절한 Copy 함수를 호출해 줍니다.
CPU GPUCPU CPU GPUGPU
서브 그래프의 실행
• Executor가 Graph를 실행한다고 했는데 도대체 뭘 실행시키는 걸까요?
• 사실 하나의 노드는 하나의 Operation을 의미하게 됩니다.
• 그리고 이 Operation에는 적절한 연산들이 정의되어 있습니다.
• 입출력 데이터는 Operation에 설정된 Tensor 를 사용합니다.
• 동일한 연산이라도 Device 에 따라 구현이 달라질 수 있습니다.
• 예로 CPU 와 GPU 환경에서 add 연산의 구현은 다릅니다.
Operation
• 노드에 설정된 실제 실행해야 할 작업입니다.
• 사용자가 직접 Operation 을 추가할수도 있습니다. (TensorFlow Tutorial 참고)
• 상황에 따라 Device 별 Operation을 작성해야 하는게 일반적입니다.
• 그리고 특정한 Device 에서만 동작하는 Operation 을 Kernel 이라고 합니다.
• Op는 Math 연산을 위한 Op와 Control Flow를 위한 Op로 나눌 수 있습니다. (사실은 더 있어요.)
• 이 중 Math연산을 위한 기능은 TensorFlow도 다른 라이브러리를 활용합니다.
• CPU : 선형대수 라이브러리인 Eigen을 사용합니다.
• GPU : Cuda 라이브러리 (Cublas/CuDNN/CuFFT 혹은 Cuda Kernel)나 Eigen 을 사용합니다.
Operation example
진짜 돌아가는 코드는 아닙니다.
TensorFlow 분산 버전
• 2016년 3월에 TensorFlow 분산 버전 초안이 공개되었습니다.
• gRPC를 이용한 분산 버전입니다.
• 아직 초기 버전이라 변경 사항이 아주 많습니다.
• 여기서는 아주 개략적인 개념만을 살펴보도록 하겠습니다.
gRPC
• 구글이 만든 RPC 프로토콜입니다. (http://www.grpc.io/)
• 기존 RPC 방식과는 약간 다릅니다.
• 입출력 자료형으로 protocol buffer 데이터 타입을 받습니다.
• 함수 선언을 protocol buffer message 로 정의합니다.
• 실제 네트워크 프로토콜은 SPDY (HTTP2.0)를 사용합니다.
Cluster Concept
GrpcServer
• GrpcServer는 그래프 연산 Process 시작 전에 이미 각 장비에서 구동되어 있어야 합니다.
• Binary 명령어로 실행할수도 있고, python 코드로도 구동 가능합니다. (Binary 는 숨겨져 있어요.)
Mast er
ser vi ce
Mast er St ubRPC Wor ker St ub RPC
Wor ker
ser vi ce
Gr pcSer ver
Local Devi ce I nf o
Distributed Computation Graph
• Client : Master로 GraphDef 객체를 전송합니다.
• Master : Graph 객체를 구성하고 분할하여 Worker에게 전달합니다.
• Worker : 로컬 머신에서 처리한 것과 동일하게 Graph 를 연산합니다.
Cl i ent
Gr pcRemot eMast er
st ub
Mast er 0
Gr pcMast er Ser vi ce
st ubRPC
Gr aphDef
Mast er Sessi on
gr pc_sessi on Wor ker 0
Gr pcRemot eWor ker
st ub
Gr pcWor ker Ser vi ce
st ub
Wor ker 1
Gr pcWor ker Ser vi ce
st ub
RPC
RPC
Gr aphDef
Gr aphDef
Gr aphDef
Cluster example
ember
Gr pcSer ver
ember 0: : 2222
/ j ob: ember / t ask0
pol y
Gr pcSer ver
pol y0: 2222
/ j ob: pol y/ t ask0
ember cpu: 0
gpu: 0
gt x980
gpu: 1
gt x980
pol y cpu: 0
gpu: 0
t i t an x
gpu: 1
t i t an x
분산 코드 구현
그래프 전달
[마스터 서버]
1. SimplePlacer로 각 노드에 디바이스 할당
2. Task 서버 단위 파티셔닝 (recv, send 없음)
3. 생성된 GraphDef 를 각 task 서버에 전달
[워커 서버]
1. Task 서버에서는 각 그래프 개별 실행
2. 결과 반환
RpcRemoteRendezvous
이것만은 기억하자.
• TensorFlow 는 Computation Graph 를 사용합니다.
그래프를 만들고,
정제한뒤,
디바이스에 할당하고,
나누어 실행합니다.
다음에 또 만나요 : Replicated Training
Synchronous data parallelism Asynchronous data parallelism Shared variables between different graphs

More Related Content

What's hot

20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영Tae Young Lee
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlowHaesun Park
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Insuk (Chris) Cho
 
파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트itproman35
 
Cnn 발표자료
Cnn 발표자료Cnn 발표자료
Cnn 발표자료종현 최
 
Writing Fast Code (KR)
Writing Fast Code (KR)Writing Fast Code (KR)
Writing Fast Code (KR)Younggun Kim
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영Tae Young Lee
 
Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Heungsub Lee
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보Young Hoo Kim
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로Oracle Korea
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요KTH
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 genericEunjoo Im
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 

What's hot (20)

20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
Python - Module
Python - ModulePython - Module
Python - Module
 
1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 
Python basic
Python basicPython basic
Python basic
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017
 
파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트
 
Cnn 발표자료
Cnn 발표자료Cnn 발표자료
Cnn 발표자료
 
Writing Fast Code (KR)
Writing Fast Code (KR)Writing Fast Code (KR)
Writing Fast Code (KR)
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
 
Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 generic
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 

Viewers also liked

Tensorflow internal
Tensorflow internalTensorflow internal
Tensorflow internalHyunghun Cho
 
텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)Taejun Kim
 
Advanced Spark and TensorFlow Meetup May 26, 2016
Advanced Spark and TensorFlow Meetup May 26, 2016Advanced Spark and TensorFlow Meetup May 26, 2016
Advanced Spark and TensorFlow Meetup May 26, 2016Chris Fregly
 
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016Taehoon Kim
 
Python으로 한자검색 텔레그램 봇 개발 후기
Python으로 한자검색 텔레그램 봇 개발 후기Python으로 한자검색 텔레그램 봇 개발 후기
Python으로 한자검색 텔레그램 봇 개발 후기DaeHyun Sung
 
플랫폼 강의 노트 Lecture 07
플랫폼 강의 노트 Lecture 07플랫폼 강의 노트 Lecture 07
플랫폼 강의 노트 Lecture 07The Innovation Lab
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHyo jeong Lee
 
자바스크립트 공부를 위한 책 소개
자바스크립트 공부를 위한 책 소개자바스크립트 공부를 위한 책 소개
자바스크립트 공부를 위한 책 소개Ben Heo
 
Places in india which are an exact replica
Places in india which are an exact replicaPlaces in india which are an exact replica
Places in india which are an exact replicaAmit Kumar
 
박스러너 튜토리얼북
박스러너 튜토리얼북박스러너 튜토리얼북
박스러너 튜토리얼북GukHwan Ji
 
E business e e-commerce
E business e e-commerceE business e e-commerce
E business e e-commerceMayara Silva
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API자바8강의 2강. Stream API
자바8강의 2강. Stream APISejong Park
 
트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기종빈 오
 
Platform Strategy & Cases
Platform Strategy & CasesPlatform Strategy & Cases
Platform Strategy & CasesSungHyuk Park
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시태현 김
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
Google Firebase로 레고블럭 조립하기 - IO Extended 2016
Google Firebase로 레고블럭 조립하기 - IO Extended 2016Google Firebase로 레고블럭 조립하기 - IO Extended 2016
Google Firebase로 레고블럭 조립하기 - IO Extended 2016Chiung Choi
 
문지영의 프리젠테이션 클리닉
문지영의 프리젠테이션 클리닉문지영의 프리젠테이션 클리닉
문지영의 프리젠테이션 클리닉JiYoung Moon
 

Viewers also liked (20)

Tensorflow internal
Tensorflow internalTensorflow internal
Tensorflow internal
 
텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)
 
Advanced Spark and TensorFlow Meetup May 26, 2016
Advanced Spark and TensorFlow Meetup May 26, 2016Advanced Spark and TensorFlow Meetup May 26, 2016
Advanced Spark and TensorFlow Meetup May 26, 2016
 
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
 
Python으로 한자검색 텔레그램 봇 개발 후기
Python으로 한자검색 텔레그램 봇 개발 후기Python으로 한자검색 텔레그램 봇 개발 후기
Python으로 한자검색 텔레그램 봇 개발 후기
 
플랫폼 강의 노트 Lecture 07
플랫폼 강의 노트 Lecture 07플랫폼 강의 노트 Lecture 07
플랫폼 강의 노트 Lecture 07
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear Regression
 
자바스크립트 공부를 위한 책 소개
자바스크립트 공부를 위한 책 소개자바스크립트 공부를 위한 책 소개
자바스크립트 공부를 위한 책 소개
 
Places in india which are an exact replica
Places in india which are an exact replicaPlaces in india which are an exact replica
Places in india which are an exact replica
 
Cells and chromosomes
Cells and chromosomesCells and chromosomes
Cells and chromosomes
 
박스러너 튜토리얼북
박스러너 튜토리얼북박스러너 튜토리얼북
박스러너 튜토리얼북
 
E business e e-commerce
E business e e-commerceE business e e-commerce
E business e e-commerce
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API자바8강의 2강. Stream API
자바8강의 2강. Stream API
 
트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기
 
Uncharted4 part1
Uncharted4 part1Uncharted4 part1
Uncharted4 part1
 
Platform Strategy & Cases
Platform Strategy & CasesPlatform Strategy & Cases
Platform Strategy & Cases
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
Google Firebase로 레고블럭 조립하기 - IO Extended 2016
Google Firebase로 레고블럭 조립하기 - IO Extended 2016Google Firebase로 레고블럭 조립하기 - IO Extended 2016
Google Firebase로 레고블럭 조립하기 - IO Extended 2016
 
문지영의 프리젠테이션 클리닉
문지영의 프리젠테이션 클리닉문지영의 프리젠테이션 클리닉
문지영의 프리젠테이션 클리닉
 

Similar to TenforFlow Internals

Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화QooJuice
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버준철 박
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본ssuser0c2478
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
spark database Service
spark database Servicespark database Service
spark database Service창언 정
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기Seokju Na
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)SANG WON PARK
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summitTae Young Lee
 
동기화, 스케줄링
동기화, 스케줄링동기화, 스케줄링
동기화, 스케줄링xxbdxx
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 

Similar to TenforFlow Internals (20)

Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
spark database Service
spark database Servicespark database Service
spark database Service
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
Lec 00, 01
Lec 00, 01Lec 00, 01
Lec 00, 01
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summit
 
동기화, 스케줄링
동기화, 스케줄링동기화, 스케줄링
동기화, 스케줄링
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 

TenforFlow Internals

  • 1. Case Study TensorFlow Internals 2016. 3. Ver. Kiho Hong (swear013@gmail.com)
  • 2. Google TensorFlow • https://www.tensorflow.org • 구글이 오픈 소스로 공개한 딥러닝 플랫폼 • 계산 그래프 모델 • Multi-GPU, 분산 환경 지원 • 구글 클라우드 API 에서도 제공됨 (2016. 3. 24)
  • 3. TensorFlow LOC Module LOC 비 고 core 211,610 C++ 로 작성된 TensorFlow 코어 코드 stream_executor 28,056 GPU CUDA 관련 코드 python 103,113 Python 환경 지원을 위한 파이썬 코드 etc 68,368 contrib, models, tensorbard, tools, user_ops total 411,147 commit : 005386dc198220601293d4821e6de63246527b0c
  • 4. 내 용 • 하고자 하는 것 • 코드 레벨에서의 TensorFlow 동작 방식을 살펴보려고 합니다. • 하지 않는 것 • 딥러닝 이론 자체를 다루지 않습니다. • TensorFlow 사용법을 다루지 않습니다.
  • 5. Simple Neural Network 𝐻 = 𝑅𝑒𝐿𝑈(𝑤1 𝑥) 𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑤2 𝐻) ⋇ 𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑤2 𝑅𝑒𝐿𝑈(𝑤1)) 𝑅𝑒𝐿𝑈 𝑧 = max(0, 𝑧) 𝑠𝑜𝑓𝑡𝑚𝑎𝑥 𝑧 = exp(𝑧𝑖) 𝑗 exp(𝑧𝑗) input : MNIST x1 x2 x3 y1 y2 y3 w1 w2 ReLU Softmax
  • 6. 일반적인 구현 스타일 (with Torch) Net Li near Layer ReLU Layer Li near Layer Wei ght Wei ght Gr ad Gr ad scor e [ cr i t ] i nput updat er
  • 8. TensorFlow Language • Python • 그래프 구성은 Python API 를 이용하여 작성할 것을 권장합니다. • 이 외에도 TensorFlow 를 손쉽게 사용하기 위한 기능들을 제공합니다. • C++ • 성능을 요구하는 실제 연산 작업은 모두 C++ 환경으로 작성됩니다.
  • 9. Python API 로 하는 일 • 그래프를 작성합니다. • Session 을 관리합니다.
  • 10. 그래프 작성 • Python 구문을 이용하여 연산에 사용할 그래프를 구성합니다. • 함수가 호출되는 즉시 내부 연산이 수행되는 것은 아닙니다. • 오로지 연산 그래프가 작성되는 과정을 거치게 됩니다.
  • 11. Session의 역할 • Session은 TensorFlow 그래프 연산을 수행하기 위한 사용자 인터페이스 입니다. • Graph를 생성하고 Operation을 수행하며 Tensor를 평가(eval)합니다. (C++ Session) • tf.Session 은 반드시 한 개의 tf.Graph 객체를 포함합니다. • 특정 tf.Graph 를 명시하지 않은 경우 default graph 가 사용됩니다.
  • 13. Google Protocol buffer • 앞서 본 내용에서는 tf.Graph 정보를 C++로 넘기는 부분이 없습니다. • tf.Graph 또한 Python 객체이므로 바로 C++ 전달은 불가능합니다. • tf.Graph 를 Protocol Buffer 타입의 자료형으로 변환한 뒤 전달하게 됩니다. • 그래프 구성 자체를 기술한 정보가 Serialize된 데이터라고 생각하시면 쉽습니다.
  • 14. Overview (in C++) Session 그래프 연산 작업 관리 Device 디바이스 정보를 담고 있는 객체 Graph 연산(op)과 값(tensor)을 그래프 구조로 저장 Executor 그래프 연산을 실제로 수행 OpKernel 그래프 노드에 지정된 연산 (Functor)
  • 15. Session • 사용자가 요청한그래프 연산을 실제로 수행하는 객체입니다. • 현재 2가지 Session이 제공됩니다. • 로컬 환경 : DirectSession • 분산 환경 : GrpcSession • 먼저 로컬 환경부터 살펴봅시다. Di r ect Sessi on Sessi on Gr pcSessi on Di r ect Sessi on Fact or y Gr pcSessi onFact or y Fact or y new( ) new( ) Sessi onFact or y
  • 17. Session : 그래프 생성 • Session::Run() 호출시 가장 먼저 GraphDef 를 Graph 객체로 변환합니다.
  • 18. Rewrite Graph sess.Run([“relu”], {image:xs}) fetch feed 그런데 Run() 실행시마다 이런 많은 작업을 반복한다고요 ??? i mage hddn w1 ReLU w2 scor e pr ob l oss l abel f eed f et ch i mage hddn w1 ReLU w2 scor e pr ob l oss l abel
  • 19. Rewrite Graph (cont’d) Sessi on “ xs, ys- >l oss: st ep/ ” “ i ni t ” gr aphexecut or gr aphexecut or gr aphexecut or
  • 20. Node에 device 설정하기 • 그런데 TensorFlow 는 GPU 환경에서 돌려볼 수 있나요? • 많은 딥러닝 라이브러리에서 Process 단위 CPU/GPU 모드를 제공합니다. • 하지만 TensorFlow 에서는 Node 단위로 Device를 선택할 수 있습니다. • Node 단위 실행을 위해 Graph 객체는 분할될 수 있습니다.
  • 21. Node에 device 설정하기 (Cont’d) • 사용자가 명시적으로 코드 상에서 device를 지정할 수 있습니다. • 이런 구문을 사용하면 해당 Node에 device 정보가 기록됩니다. • Node에 device 정보가 없는 경우 TensorFlow가 알아서 device를 지정합니다.
  • 22. Device 할당 제약 사항 • Node에 device를 지정할 때의 제약 사항입니다. 1. 사용자가 코드 상에 명시적으로 device 를 기술한 경우 • 반드시 해당 device 로 노드를 할당해야 합니다. 2. 어떤 노드가 다른 노드의 참조 타입으로 생성된 경우 • 이 경우 두 노드는 동일한 device 로 할당해야 합니다. 3. A와 B노드가 주어지고 B노드에 @A와 같은 colocation이 사용된 경우 • 이 경우도 A와 B 노드는 동일한 device 로 할당되어야 합니다.
  • 23. SimplePlacer Di r ect Sessi on Gr aphSi mpl ePl acer Devi ceSet devi ce_set devi ces Devi ce devi ces Devi ceMgr LookupDevi ce( ) Li st Devi ces( ) devi ces devi ce_mgr
  • 24. SimplePlacer (Cont’d) • 이름대로 간단한 방식으로 작업합니다. • TensorFow White Paper 에 따르면, • 노드 할당시 Cost 기반 할당을 수행한다고 되어 있습니다. • 하지만 현실은 ? • 일단 device를 할당할 노드는 부모 노드의 device 정보를 얻어 자신의 device 정보로 사용합니다. • 이 때 부모 노드의 device가 지정되어 있지 않은 경우, 사전 고려된 순서에 따라 할당됩니다. • 따라서 GPU 장비가 설치되어 있는 장비의 경우 대개 GPU:0 이 할당됩니다. • 즉, 할당 정책은 형편없다는 뜻입니다. (이후에 더 좋은 Placer 가 나올거라 생각합니다.) GPU: 0 GPU: 1 CPU: 0 i mage hddn w1 ReLU w2 scor e pr ob l oss l abel
  • 25. Graph partitioning • Device 단위로 파티셔닝을 수행합니다. • 그래프 분할을 완료하기 위해서는 추가 작업이 필요합니다. • 접점이 되는 노드에 recv, send 노드를 추가하여 그래프 분할을 완성합니다. • 이 때 서브그래프에서 recv가 여러 노드에서 사용된다면 하나로 치환합니다. GPU: 0 GPU: 1 CPU: 0 i mage hddn w1 ReLU w2 scor e pr ob l oss l abel send r ecv send r ecv send r ecv
  • 26. Executor • 분할된 그래프들을 실행하는 주체는 Executor 객체입니다.
  • 27. Executor • Executor는 서브-그래프 하나마다 생성됩니다. • Executor는 개별적인 Thread 작업으로 구성됩니다. • Executor는 서브-그래프의 시작 노드를 찾아 그래프 연산을 수행합니다. • 모든 Executor의 작업이 끝날 때까지 ExecutorBarrier가 막아줍니다. • Executor가 하는 일은 좀 더 복잡하지만 이 정도만 알고 넘어갑시다.
  • 28. 랑데뷰 (Rendezvous) • 서브-그래프 사이의 send와 recv 노드 데이터를 동기화하는 객체입니다. • 각 Executor 들은 자신의 서브 그래프 내의 send와 recv 객체를 Rendezvous 객체에 등록합니다. • Send() • send 노드에 속한 Tensor 데이터를 다른 그래프로 보내줄 때 사용합니다. • Send() 호출시 이미 다른 Executor 가 해당 노드의 데이터를 요구한 사실이 있다면 바로 데이터를 전달합니다. • RecvAsync() • recv 노드에 속한 Tensor 데이터를 다른 그래프로부터 얻어올 때 사용합니다. • RecvAsync() 호출시 이미 다른 Executor 가 해당 노드를 등록해 놓았다면 바로 데이터를 얻어옵니다. I nt r aPr ocess Rendezvous Send( ) RecvAsync( ) l ocal Local RendezvousI mpl Rendezvous Send( ) RecvAsync( )
  • 30. Device 사이의 데이터 전달 • 앞서 살펴보았지만 각각의 그래프는 device 단위로 나누어집니다. • 그래프가 서로 주고 받는 데이터는 send와 recv 노드에 속한 Tensor 타입의 자료구조입니다. • 여기서 Tensor란 차원(dimension) 정보를 가진 메모리 데이터 블록입니다. • 서로 다른 device 사이의 데이터 복사는 어떻게 해야 할까요? • Device 라는 객체에는 자신의 Device 타입과 메모리 할당용 Allocator를 가지고 있습니다. • InterProcessRendezvous 객체에서 Device 타입을 조회하여 적절한 Copy 함수를 호출해 줍니다. CPU GPUCPU CPU GPUGPU
  • 31. 서브 그래프의 실행 • Executor가 Graph를 실행한다고 했는데 도대체 뭘 실행시키는 걸까요? • 사실 하나의 노드는 하나의 Operation을 의미하게 됩니다. • 그리고 이 Operation에는 적절한 연산들이 정의되어 있습니다. • 입출력 데이터는 Operation에 설정된 Tensor 를 사용합니다. • 동일한 연산이라도 Device 에 따라 구현이 달라질 수 있습니다. • 예로 CPU 와 GPU 환경에서 add 연산의 구현은 다릅니다.
  • 32. Operation • 노드에 설정된 실제 실행해야 할 작업입니다. • 사용자가 직접 Operation 을 추가할수도 있습니다. (TensorFlow Tutorial 참고) • 상황에 따라 Device 별 Operation을 작성해야 하는게 일반적입니다. • 그리고 특정한 Device 에서만 동작하는 Operation 을 Kernel 이라고 합니다. • Op는 Math 연산을 위한 Op와 Control Flow를 위한 Op로 나눌 수 있습니다. (사실은 더 있어요.) • 이 중 Math연산을 위한 기능은 TensorFlow도 다른 라이브러리를 활용합니다. • CPU : 선형대수 라이브러리인 Eigen을 사용합니다. • GPU : Cuda 라이브러리 (Cublas/CuDNN/CuFFT 혹은 Cuda Kernel)나 Eigen 을 사용합니다.
  • 33. Operation example 진짜 돌아가는 코드는 아닙니다.
  • 34. TensorFlow 분산 버전 • 2016년 3월에 TensorFlow 분산 버전 초안이 공개되었습니다. • gRPC를 이용한 분산 버전입니다. • 아직 초기 버전이라 변경 사항이 아주 많습니다. • 여기서는 아주 개략적인 개념만을 살펴보도록 하겠습니다.
  • 35. gRPC • 구글이 만든 RPC 프로토콜입니다. (http://www.grpc.io/) • 기존 RPC 방식과는 약간 다릅니다. • 입출력 자료형으로 protocol buffer 데이터 타입을 받습니다. • 함수 선언을 protocol buffer message 로 정의합니다. • 실제 네트워크 프로토콜은 SPDY (HTTP2.0)를 사용합니다.
  • 37. GrpcServer • GrpcServer는 그래프 연산 Process 시작 전에 이미 각 장비에서 구동되어 있어야 합니다. • Binary 명령어로 실행할수도 있고, python 코드로도 구동 가능합니다. (Binary 는 숨겨져 있어요.) Mast er ser vi ce Mast er St ubRPC Wor ker St ub RPC Wor ker ser vi ce Gr pcSer ver Local Devi ce I nf o
  • 38. Distributed Computation Graph • Client : Master로 GraphDef 객체를 전송합니다. • Master : Graph 객체를 구성하고 분할하여 Worker에게 전달합니다. • Worker : 로컬 머신에서 처리한 것과 동일하게 Graph 를 연산합니다. Cl i ent Gr pcRemot eMast er st ub Mast er 0 Gr pcMast er Ser vi ce st ubRPC Gr aphDef Mast er Sessi on gr pc_sessi on Wor ker 0 Gr pcRemot eWor ker st ub Gr pcWor ker Ser vi ce st ub Wor ker 1 Gr pcWor ker Ser vi ce st ub RPC RPC Gr aphDef Gr aphDef Gr aphDef
  • 39. Cluster example ember Gr pcSer ver ember 0: : 2222 / j ob: ember / t ask0 pol y Gr pcSer ver pol y0: 2222 / j ob: pol y/ t ask0 ember cpu: 0 gpu: 0 gt x980 gpu: 1 gt x980 pol y cpu: 0 gpu: 0 t i t an x gpu: 1 t i t an x
  • 41. 그래프 전달 [마스터 서버] 1. SimplePlacer로 각 노드에 디바이스 할당 2. Task 서버 단위 파티셔닝 (recv, send 없음) 3. 생성된 GraphDef 를 각 task 서버에 전달 [워커 서버] 1. Task 서버에서는 각 그래프 개별 실행 2. 결과 반환
  • 43. 이것만은 기억하자. • TensorFlow 는 Computation Graph 를 사용합니다. 그래프를 만들고, 정제한뒤, 디바이스에 할당하고, 나누어 실행합니다.
  • 44. 다음에 또 만나요 : Replicated Training Synchronous data parallelism Asynchronous data parallelism Shared variables between different graphs