Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TenforFlow Internals

3,591 views

Published on

Google TensorFlow 분석 자료.

Published in: Engineering
  • Dating direct: ♥♥♥ http://bit.ly/369VOVb ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ♥♥♥ http://bit.ly/369VOVb ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://urlzs.com/UABbn } ......................................................................................................................... Download Full EPUB Ebook here { https://urlzs.com/UABbn } ......................................................................................................................... ...................................ALL FOR EBOOKS................................................. Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • ACCESS that WEBSITE Over for All Ebooks (Unlimited) ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... DOWNLOAD FULL EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

TenforFlow Internals

  1. 1. Case Study TensorFlow Internals 2016. 3. Ver. Kiho Hong (swear013@gmail.com)
  2. 2. Google TensorFlow • https://www.tensorflow.org • 구글이 오픈 소스로 공개한 딥러닝 플랫폼 • 계산 그래프 모델 • Multi-GPU, 분산 환경 지원 • 구글 클라우드 API 에서도 제공됨 (2016. 3. 24)
  3. 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. 4. 내 용 • 하고자 하는 것 • 코드 레벨에서의 TensorFlow 동작 방식을 살펴보려고 합니다. • 하지 않는 것 • 딥러닝 이론 자체를 다루지 않습니다. • TensorFlow 사용법을 다루지 않습니다.
  5. 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. 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
  7. 7. TensorFlow : Computation Graph
  8. 8. TensorFlow Language • Python • 그래프 구성은 Python API 를 이용하여 작성할 것을 권장합니다. • 이 외에도 TensorFlow 를 손쉽게 사용하기 위한 기능들을 제공합니다. • C++ • 성능을 요구하는 실제 연산 작업은 모두 C++ 환경으로 작성됩니다.
  9. 9. Python API 로 하는 일 • 그래프를 작성합니다. • Session 을 관리합니다.
  10. 10. 그래프 작성 • Python 구문을 이용하여 연산에 사용할 그래프를 구성합니다. • 함수가 호출되는 즉시 내부 연산이 수행되는 것은 아닙니다. • 오로지 연산 그래프가 작성되는 과정을 거치게 됩니다.
  11. 11. Session의 역할 • Session은 TensorFlow 그래프 연산을 수행하기 위한 사용자 인터페이스 입니다. • Graph를 생성하고 Operation을 수행하며 Tensor를 평가(eval)합니다. (C++ Session) • tf.Session 은 반드시 한 개의 tf.Graph 객체를 포함합니다. • 특정 tf.Graph 를 명시하지 않은 경우 default graph 가 사용됩니다.
  12. 12. tf.Session 작업 fetch feed http://www.swig.org/
  13. 13. Google Protocol buffer • 앞서 본 내용에서는 tf.Graph 정보를 C++로 넘기는 부분이 없습니다. • tf.Graph 또한 Python 객체이므로 바로 C++ 전달은 불가능합니다. • tf.Graph 를 Protocol Buffer 타입의 자료형으로 변환한 뒤 전달하게 됩니다. • 그래프 구성 자체를 기술한 정보가 Serialize된 데이터라고 생각하시면 쉽습니다.
  14. 14. Overview (in C++) Session 그래프 연산 작업 관리 Device 디바이스 정보를 담고 있는 객체 Graph 연산(op)과 값(tensor)을 그래프 구조로 저장 Executor 그래프 연산을 실제로 수행 OpKernel 그래프 노드에 지정된 연산 (Functor)
  15. 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
  16. 16. 그래프 변환 Overview
  17. 17. Session : 그래프 생성 • Session::Run() 호출시 가장 먼저 GraphDef 를 Graph 객체로 변환합니다.
  18. 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. 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. 20. Node에 device 설정하기 • 그런데 TensorFlow 는 GPU 환경에서 돌려볼 수 있나요? • 많은 딥러닝 라이브러리에서 Process 단위 CPU/GPU 모드를 제공합니다. • 하지만 TensorFlow 에서는 Node 단위로 Device를 선택할 수 있습니다. • Node 단위 실행을 위해 Graph 객체는 분할될 수 있습니다.
  21. 21. Node에 device 설정하기 (Cont’d) • 사용자가 명시적으로 코드 상에서 device를 지정할 수 있습니다. • 이런 구문을 사용하면 해당 Node에 device 정보가 기록됩니다. • Node에 device 정보가 없는 경우 TensorFlow가 알아서 device를 지정합니다.
  22. 22. Device 할당 제약 사항 • Node에 device를 지정할 때의 제약 사항입니다. 1. 사용자가 코드 상에 명시적으로 device 를 기술한 경우 • 반드시 해당 device 로 노드를 할당해야 합니다. 2. 어떤 노드가 다른 노드의 참조 타입으로 생성된 경우 • 이 경우 두 노드는 동일한 device 로 할당해야 합니다. 3. A와 B노드가 주어지고 B노드에 @A와 같은 colocation이 사용된 경우 • 이 경우도 A와 B 노드는 동일한 device 로 할당되어야 합니다.
  23. 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. 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. 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. 26. Executor • 분할된 그래프들을 실행하는 주체는 Executor 객체입니다.
  27. 27. Executor • Executor는 서브-그래프 하나마다 생성됩니다. • Executor는 개별적인 Thread 작업으로 구성됩니다. • Executor는 서브-그래프의 시작 노드를 찾아 그래프 연산을 수행합니다. • 모든 Executor의 작업이 끝날 때까지 ExecutorBarrier가 막아줍니다. • Executor가 하는 일은 좀 더 복잡하지만 이 정도만 알고 넘어갑시다.
  28. 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( )
  29. 29. Rendezvous Table
  30. 30. Device 사이의 데이터 전달 • 앞서 살펴보았지만 각각의 그래프는 device 단위로 나누어집니다. • 그래프가 서로 주고 받는 데이터는 send와 recv 노드에 속한 Tensor 타입의 자료구조입니다. • 여기서 Tensor란 차원(dimension) 정보를 가진 메모리 데이터 블록입니다. • 서로 다른 device 사이의 데이터 복사는 어떻게 해야 할까요? • Device 라는 객체에는 자신의 Device 타입과 메모리 할당용 Allocator를 가지고 있습니다. • InterProcessRendezvous 객체에서 Device 타입을 조회하여 적절한 Copy 함수를 호출해 줍니다. CPU GPUCPU CPU GPUGPU
  31. 31. 서브 그래프의 실행 • Executor가 Graph를 실행한다고 했는데 도대체 뭘 실행시키는 걸까요? • 사실 하나의 노드는 하나의 Operation을 의미하게 됩니다. • 그리고 이 Operation에는 적절한 연산들이 정의되어 있습니다. • 입출력 데이터는 Operation에 설정된 Tensor 를 사용합니다. • 동일한 연산이라도 Device 에 따라 구현이 달라질 수 있습니다. • 예로 CPU 와 GPU 환경에서 add 연산의 구현은 다릅니다.
  32. 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. 33. Operation example 진짜 돌아가는 코드는 아닙니다.
  34. 34. TensorFlow 분산 버전 • 2016년 3월에 TensorFlow 분산 버전 초안이 공개되었습니다. • gRPC를 이용한 분산 버전입니다. • 아직 초기 버전이라 변경 사항이 아주 많습니다. • 여기서는 아주 개략적인 개념만을 살펴보도록 하겠습니다.
  35. 35. gRPC • 구글이 만든 RPC 프로토콜입니다. (http://www.grpc.io/) • 기존 RPC 방식과는 약간 다릅니다. • 입출력 자료형으로 protocol buffer 데이터 타입을 받습니다. • 함수 선언을 protocol buffer message 로 정의합니다. • 실제 네트워크 프로토콜은 SPDY (HTTP2.0)를 사용합니다.
  36. 36. Cluster Concept
  37. 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. 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. 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
  40. 40. 분산 코드 구현
  41. 41. 그래프 전달 [마스터 서버] 1. SimplePlacer로 각 노드에 디바이스 할당 2. Task 서버 단위 파티셔닝 (recv, send 없음) 3. 생성된 GraphDef 를 각 task 서버에 전달 [워커 서버] 1. Task 서버에서는 각 그래프 개별 실행 2. 결과 반환
  42. 42. RpcRemoteRendezvous
  43. 43. 이것만은 기억하자. • TensorFlow 는 Computation Graph 를 사용합니다. 그래프를 만들고, 정제한뒤, 디바이스에 할당하고, 나누어 실행합니다.
  44. 44. 다음에 또 만나요 : Replicated Training Synchronous data parallelism Asynchronous data parallelism Shared variables between different graphs

×