텐서플로우(Tensor flow)
태그 : 텐서플로우
- 개념
- TensorFlow 정의 - 2015년 11월 구글이 공개한 연산을 데이터 흐름 그래프로 표현하는 머신러닝을 위한 오픈 소스 라이브러리
## Ⅰ. 구글딥러닝 오픈소스 소프트웨어 TensorFlow의 개요
### 가. TensorFlow 정의
- 2015년 11월 구글이 공개한 연산을 데이터 흐름 그래프로 표현하는 머신러닝을 위한 오픈 소스 라이브러리
### 나. TensorFlow 특징
| **특징** | **내용** |
| -------- | -------- |
| **확장성** | Android, iOS, Linux, OS X, 여러 CPU, GPU(CUDA) 활용 가능 |
| **쉬운 API** | Python API 제공(아파치 2.0 라이센스) |
| **Data flow graph** | 데이터 흐름 그래프(data flow graph)이용한 연산 표현 |
| **방향성 그래프** | 클라이언트 종류에 따라 프론트엔드 언어로 개발 가능 |
## Ⅱ. TensorFlow 구성도 및 구성 요소
### 가. TensorFlow 구성요소
| **항목** | **설명** | **비고** |
| -------- | -------- | -------- |
| **Tensors** | 그래프의 모서리들이 갖는 일반적인 값
다양한 요소 값을 가질 수 있음
선언되거나 선언되지 않은 부호를 가질 수 있음 | 8bits 에서 64bits
float, int, string | | **Operation** | 임의의 계산을 수행하는 것으로 다양한
속성 값(attribute)을 가짐 | 속성을 가질 수 있음| | **Kernel** | operation을 디바이스 별로 실제 구현한
것으로 가속화를 위해 다양한 분산 최적화
알고리즘을 활용 | CPU, GPU에 따라 다른 구현| | **Variable** | 학습을 통해 변화하는 배열 값을 저장하기
위한 operation | 명시적으로 type 지정| | **Session** | 다양한 실행 환경(CPU, CPU/GPU,
원격 분산처리) 하에서 처리하기 위해서
Client 에서 session을 만들어 전달함| TensorFlow 그래프 구성 후 실제 수행 시| | **노드** | 방향성 그래프에 연결되어 있는 구조체
각각의 노드는 0이나 그 이상의 인풋과
아웃풋을 가지며 실행명령을 나타냄| 0 혹은 그 이상의 입력물과 출력물 | | **Control dependencies** | 그래프에 존재하는 특별한 모서리
제어 종속성으로 인해 목적지 노드에
도착하기 전에 종료 되어야함 | 제어 종속 | ### 나. TensorFlow 구성도 ![](/upload/editor/images/tensorflow구성도.png) - 텐서플로우의 프로그래밍 모델과 기본 컨셉 ### 다. Tensorflow stack 구조 ![](/upload/editor/images/tensorflowstack구조.png) **Keras is an open source neural network library written in Python** ## Ⅲ. TensorFlow의 수행 ### 가. 텐서플로우의 연산 |연산 종류 | 개념도 | 설명 |
| -------- | -------- | -------- |
| **single-
device
execution** | ![](/upload/editor/images/single개념도.png) | 하나의 워커가 하나의 디바이스 수행 | | **multi-
Device
execution** | ![](/upload/editor/images/multi개념도.png) | 하나의 시스템에서 여러 디바이스를 갖는 경우,
노드 배치와 Cross-Device Communication 지원
TCP/RDMA같은 원격 메커니즘 사용
**이슈1)** 그래프의 각각의 노드에 어떤
디바이스를 매치할 지 결정해야함.
**이슈2)** 데이터와 디바이스의 커뮤니케이션
바운더리 결정| | **Distributed Execution** | multi-Device execution과 유사. 노드를 배치 시킨 후, 디바이스 마다
subgraph생성, send/receive 노드쌍으로 워커프로세스들과 커뮤니케이션 | | ### 나. Fault Tolerance 1) Send/Receive 노드쌍 사이의 커뮤니케이션 에러
2) 하나의 마스터 프로세스로부터 각각의 워커 프로세스들의 정기적 상태체크 오류 탐지시 전체의 그래프 실행이 제한되고 스크랫치로부터 재실행됨.
3) 각각의 노드들은 Save node와 연결되어 재시작 상태의 지속적인 체크포인팅과 복구 지원(매 n번의 반복과 n초 동안 지원)
4) 재시작 후 첫 iteration에서는 Restore node와 연결되어 복구 지원
## Ⅳ. TensorFlow의 제반 사항 ### 가. Gradient Computation ![](/upload/editor/images/GradientComputation.png) **일반적인 머신 러닝 훈련 알고리즘으로 텐서플로우에서는 그라디언트 연산을 기본적으로 지원함** - 휴리스틱한 방식이 비효율 적일 경우 그라디언트가 자동적으로 그래프를 추가하여 사용자 제어 범위를 줄임. - 불필요한 GPU메모리의 한계치를 계산해 둔 후 휴리스틱하게 결정할 수 있는 옵션 제공 ### 나. Partial Execution ![](/upload/editor/images/PatialExecution.png) - 그래프는 입력물과 출력물의 가치에 기반하여 변화함
- 각각의 노드 : 명확한 입력물에는 feed node 로 대체, 아웃풋 역시 특별한 fetch 노드로 조정되어 출력물을 반환함 ### 다. Device 제약 - 텐서플로우 클라이언트는 장비가 실행 될 때 부분적 제약을 걸 수 있음. - 제약이나 대체로 인해 빠른 실행과 연산 속도 보장
Ex) A노드에서는 GPU타입의 장비만 가능함.
초콜릿은varialbe13 이라는 노드 네임으로 사용 ### 라. Control flow - 텐서플로우 runtime은 MIT tagged Token machine과 비슷한 컨셉의 태그와 프레임을 가짐. - 각각의 루프의 반복은 태그에 의해 고유하게 식별되고 실행 상태는 프레임에 의해 표시됨. - Control flow를 사용하여 그래프 실행하기 위해 분산처리메커니즘 사용 - 루프가 노드들을 포함할 때 서로 다른 다양한 장비를 수용함 ### 마. Queues - Enqueue operataions는 큐가 사용 가능해질때까지 차단 - Dequeue는 요소들의 최소한의 숫자가 큐에서 가능할 때까지 차단 - 입력데이터가 디스크에서 미리 실행시킴 ### 바. Containers : 텐서플로의 긴 수명의 가변적인 상태에 대한 관리 메커니즘 ## Ⅴ. TensorFlow의 최적화 |**항목** | **설명** | **비고** |
| -------- | -------- | -------- |
| common subexpression
Elimination | 다양한 다른 추상화 층이나 같은 계산의
복사본들을 제어하여 일반적인 subexpression
pass수행 시 계산 그래프와 다중 복사본들을
읽어 들여 하나의 식별 가능한 입력물과 수행
타입들을 그래프 모서리에 재배치 | Click 알고리즘| | controlling Data
Communication and
Memory Usage | 섬세한 텐서플로우 실행 스케쥴로 시스템 성능 보장
ASAP/ALAP 계산, Critical paths 지원| Critical paths| | Asynchronous Kernels | 일반적인 동기식 커널지원(non-blocking)
많은 활성화 쓰레드를 처리할 수 있는
최적화된 환경을 제공하여 메모리나 리소스
가용성 보장 | Receive kernel
Enqueue
Dequeue| | Optimized Libraries for
Kernel Implementations | 커널 수행을 위한 가장 최적화된 라이브러리 사용 | BLAS
cuBLAS
GPU
cuDNN| | Lossy Compression | 장비 간 데이터 전송 시 손실 압축 사용 | 노이즈 허용 | ## Ⅵ. TensorFlow의 도구 ### 가. 텐서보드 : 그래프의 구조와 통계 요약 가시화 ### 나. EEG : 실적 추적을 위한 내부 툴 - 텐서플로우 그래프 실행의 기능적 실적과 정확한 요구사항 가시화 - 연산 시 병목현상과 프로그램의 커뮤니케이션 패턴에 이해도가 높음 - 시스템에 포함된 다양한 소스(ftrace, 구글의 경량화 쓰레드 추척툴, CUDA Profiling Tools Interface, CUPTI)를 수집함 - Traces는 빠른 이벤트 추출과 정확하고 상세한 레벨의 UI 해상도를 갖도록 설계된 가상화 서버에 분리되어 있음. ![](/upload/editor/images/텐서플로우도구.png)
다양한 요소 값을 가질 수 있음
선언되거나 선언되지 않은 부호를 가질 수 있음 | 8bits 에서 64bits
float, int, string | | **Operation** | 임의의 계산을 수행하는 것으로 다양한
속성 값(attribute)을 가짐 | 속성을 가질 수 있음| | **Kernel** | operation을 디바이스 별로 실제 구현한
것으로 가속화를 위해 다양한 분산 최적화
알고리즘을 활용 | CPU, GPU에 따라 다른 구현| | **Variable** | 학습을 통해 변화하는 배열 값을 저장하기
위한 operation | 명시적으로 type 지정| | **Session** | 다양한 실행 환경(CPU, CPU/GPU,
원격 분산처리) 하에서 처리하기 위해서
Client 에서 session을 만들어 전달함| TensorFlow 그래프 구성 후 실제 수행 시| | **노드** | 방향성 그래프에 연결되어 있는 구조체
각각의 노드는 0이나 그 이상의 인풋과
아웃풋을 가지며 실행명령을 나타냄| 0 혹은 그 이상의 입력물과 출력물 | | **Control dependencies** | 그래프에 존재하는 특별한 모서리
제어 종속성으로 인해 목적지 노드에
도착하기 전에 종료 되어야함 | 제어 종속 | ### 나. TensorFlow 구성도 ![](/upload/editor/images/tensorflow구성도.png) - 텐서플로우의 프로그래밍 모델과 기본 컨셉 ### 다. Tensorflow stack 구조 ![](/upload/editor/images/tensorflowstack구조.png) **Keras is an open source neural network library written in Python** ## Ⅲ. TensorFlow의 수행 ### 가. 텐서플로우의 연산 |
device
execution** | ![](/upload/editor/images/single개념도.png) | 하나의 워커가 하나의 디바이스 수행 | | **multi-
Device
execution** | ![](/upload/editor/images/multi개념도.png) | 하나의 시스템에서 여러 디바이스를 갖는 경우,
노드 배치와 Cross-Device Communication 지원
TCP/RDMA같은 원격 메커니즘 사용
**이슈1)** 그래프의 각각의 노드에 어떤
디바이스를 매치할 지 결정해야함.
**이슈2)** 데이터와 디바이스의 커뮤니케이션
바운더리 결정| | **Distributed Execution** | multi-Device execution과 유사. 노드를 배치 시킨 후, 디바이스 마다
subgraph생성, send/receive 노드쌍으로 워커프로세스들과 커뮤니케이션 | | ### 나. Fault Tolerance 1) Send/Receive 노드쌍 사이의 커뮤니케이션 에러
2) 하나의 마스터 프로세스로부터 각각의 워커 프로세스들의 정기적 상태체크 오류 탐지시 전체의 그래프 실행이 제한되고 스크랫치로부터 재실행됨.
3) 각각의 노드들은 Save node와 연결되어 재시작 상태의 지속적인 체크포인팅과 복구 지원(매 n번의 반복과 n초 동안 지원)
4) 재시작 후 첫 iteration에서는 Restore node와 연결되어 복구 지원
## Ⅳ. TensorFlow의 제반 사항 ### 가. Gradient Computation ![](/upload/editor/images/GradientComputation.png) **일반적인 머신 러닝 훈련 알고리즘으로 텐서플로우에서는 그라디언트 연산을 기본적으로 지원함** - 휴리스틱한 방식이 비효율 적일 경우 그라디언트가 자동적으로 그래프를 추가하여 사용자 제어 범위를 줄임. - 불필요한 GPU메모리의 한계치를 계산해 둔 후 휴리스틱하게 결정할 수 있는 옵션 제공 ### 나. Partial Execution ![](/upload/editor/images/PatialExecution.png) - 그래프는 입력물과 출력물의 가치에 기반하여 변화함
- 각각의 노드 : 명확한 입력물에는 feed node 로 대체, 아웃풋 역시 특별한 fetch 노드로 조정되어 출력물을 반환함 ### 다. Device 제약 - 텐서플로우 클라이언트는 장비가 실행 될 때 부분적 제약을 걸 수 있음. - 제약이나 대체로 인해 빠른 실행과 연산 속도 보장
Ex) A노드에서는 GPU타입의 장비만 가능함.
초콜릿은varialbe13 이라는 노드 네임으로 사용 ### 라. Control flow - 텐서플로우 runtime은 MIT tagged Token machine과 비슷한 컨셉의 태그와 프레임을 가짐. - 각각의 루프의 반복은 태그에 의해 고유하게 식별되고 실행 상태는 프레임에 의해 표시됨. - Control flow를 사용하여 그래프 실행하기 위해 분산처리메커니즘 사용 - 루프가 노드들을 포함할 때 서로 다른 다양한 장비를 수용함 ### 마. Queues - Enqueue operataions는 큐가 사용 가능해질때까지 차단 - Dequeue는 요소들의 최소한의 숫자가 큐에서 가능할 때까지 차단 - 입력데이터가 디스크에서 미리 실행시킴 ### 바. Containers : 텐서플로의 긴 수명의 가변적인 상태에 대한 관리 메커니즘 ## Ⅴ. TensorFlow의 최적화 |
Elimination | 다양한 다른 추상화 층이나 같은 계산의
복사본들을 제어하여 일반적인 subexpression
pass수행 시 계산 그래프와 다중 복사본들을
읽어 들여 하나의 식별 가능한 입력물과 수행
타입들을 그래프 모서리에 재배치 | Click 알고리즘| | controlling Data
Communication and
Memory Usage | 섬세한 텐서플로우 실행 스케쥴로 시스템 성능 보장
ASAP/ALAP 계산, Critical paths 지원| Critical paths| | Asynchronous Kernels | 일반적인 동기식 커널지원(non-blocking)
많은 활성화 쓰레드를 처리할 수 있는
최적화된 환경을 제공하여 메모리나 리소스
가용성 보장 | Receive kernel
Enqueue
Dequeue| | Optimized Libraries for
Kernel Implementations | 커널 수행을 위한 가장 최적화된 라이브러리 사용 | BLAS
cuBLAS
GPU
cuDNN| | Lossy Compression | 장비 간 데이터 전송 시 손실 압축 사용 | 노이즈 허용 | ## Ⅵ. TensorFlow의 도구 ### 가. 텐서보드 : 그래프의 구조와 통계 요약 가시화 ### 나. EEG : 실적 추적을 위한 내부 툴 - 텐서플로우 그래프 실행의 기능적 실적과 정확한 요구사항 가시화 - 연산 시 병목현상과 프로그램의 커뮤니케이션 패턴에 이해도가 높음 - 시스템에 포함된 다양한 소스(ftrace, 구글의 경량화 쓰레드 추척툴, CUDA Profiling Tools Interface, CUPTI)를 수집함 - Traces는 빠른 이벤트 추출과 정확하고 상세한 레벨의 UI 해상도를 갖도록 설계된 가상화 서버에 분리되어 있음. ![](/upload/editor/images/텐서플로우도구.png)