티스토리 뷰

앞의 포스팅을 간단하게 살펴보자면 기본적으로 텐서플로우의 라이브러리를 활용해 프린트를 했을 때 텐서의 정보가 출력 되었다.

여기서 멘붕이 오게 되는데.. 차분히 생각해보자. 왜그러는지는 텐서플로우의 아키텍쳐를 살펴보면 그 이유를 알 수 있다.

(그래프와 세션의 개념도 여기서 알 수 있다)


텐서플로우의 아키텍쳐는 다음과 같다.



갑자기 그림이 덩그러니 하나 나오는데 대충 훑어보고...... 넘어가자



텐서플로우의 API Documentation을 보면 Python, C++, Java, Go 의 언어를 지원하고 있다.

나는 그중에 Python을 이용하여 텐서플로우 프로그래밍을 진행하고 있는데 다음을 보자


1
2
3
4
5
6
7
= 5
= 10
= 7
= a * b + c
 
print(d)

cs


이 코드를 보자면 d를 프린트해본 결과 57이 출력될 것이라는 것은 알고 있다.



그리고 텐서플로우에서 앞의 포스팅에서 잠깐 등장했던 constant의 개념을 빌려 비슷하게 작성해보자면..


1
2
3
4
5
6
7
= tf.constant([5])
= tf.constant([10])
= tf.constant([7])
 
= a * b + c
 
print(d)
cs


그리고 첫번째 코드와 동일하게 d를 프린트 하자면 

Tensor("add_10:0", shape=(1,), dtype=int32) 와 같이 출력이 된다.

이는 앞에서도 언급한바와 같이 텐서의 정보가 출력된다.


기본적으로 텐서플로우는 텐서의 정보만을 반환한다. 즉, 파이썬 레벨에서는 절대 연산을 수행하지 않는다.

값이 할당되었음에도 불구하고 보여주지 않고 텐서의 정보만 출력되는 것이다.

텐서플로우가 연산하는 방법은 따로 존재한다. 그것이 바로 세션(Session)과 그래프(Graph)를 이용하는 것이다.


d = a * b + c 가 일반적으로 파이썬 문법에서는 연산을 한 결과가 d 로 할당 되는 것이지만


텐서플로우의 라이브러리를 활용한 텐서의 연산 끼리는 그래프(Graph) 라는 것을 그린다.

이게 무슨 소리냐? 밑의 그림을 보자.



이와 같이 하나의 방향성 그래프(Directed Graph)를 생성하게 되는데 이것이 곧 하나의 세션(Session) 임을 의미한다.

그리고 이렇게 생성된 하나의 세션은 연산장치(CPU, GPU) 로 올라가서 연산을 수행하게 된다.

즉, 위의 그래프를 세션의 형태로 담아서 연산장치에 심어주는 것이다.


1. Python에서 작성한 코드에서 텐서를 생성하고 텐서를 통하여 연산을 정의한다. 이는 곧 그래프의 생성과 동시에 세션이 할당됨을 의미한다.


2.  생성된 세션이 연산장치(CPU, GPU) 에 의하여 연산이 할당 (Embedding) 시킨다.


3. 펌웨어 레벨에서 고속 연산을 수행한다. 실제로 C에서 연산을 처리하는 것이며 이를 통하여 파이썬의 속도한계를 극복한다.


4. 그리고 연산의 결과가 반환된다.



즉, 위의 텐서플로우 레이어를 다시한번 살펴보자면


Client 단 에서는 데이터의 흐름을 그래프로 정의하여 세션을 만드는 것

Distributed Master 는 Session.run() 을 통하여 그래프의 부분부분을 나누어 분산 처리하여 각 Worker Services 에 보낸다.

Worker Services는 Distributed Master 단에서 받은 각 그래프의 부분조각의 작업을 커널(Kernel) 단에서 처리하기 위해 스케쥴링을 실시한다.

Kernel Implementations 에서는 Worker Services 에서 스케쥴된 작업 즉, 연산을 수행한다.



이것으로 텐서플로우의 동작 방식을 어느정도 이해하지 않았나 싶다.

개인적으로 텐서플로우 한글 번역 문서편을 보면 머신러닝의 입문으로 MNIST 데이터를 경사하강법(gradient descent)의 최적화 방법을 써서 손글씨를 검출하는 예제가 있는데 처음부터 그 예제를 보고 많이 헤매었으나 이 글을 정리하면서 많은 도움이 된 것 같다.

완벽하게 정리된 것이라고 생각하지는 않지만 틀린부분이 있다면 누군가 반드시 지적해주었으면 좋겠다ㅜㅜ

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함