- Google TPU v1은 딥러닝 서비스의 추론 비용과 규모를 감당하기 위해, GPU 대비 10배 비용 대비 성능을 목표로 2013년 말부터 15개월 만에 개발된 ASIC임
- 핵심은 1978년 H.T. Kung과 Charles E. Leiserson의 시스톨릭 배열을 256×256 MAC 구조로 구현해, 행렬 곱셈 중간 결과의 메모리 왕복을 줄인 점임
- TPU v1은 PCIe로 호스트와 통신하고 DDR3-2133에 가중치를 저장하며,
Read_Host_Memory, Read_Weights, Matrix_Multiply / Convolve, Activate, Write_Host_Memory 같은 소수 명령으로 추론 흐름을 구성함
- 8-bit×8-bit 정수 곱셈과 양자화로 부동소수점 계산의 다이 면적 부담을 피했고, TensorFlow와 연동되는 User Space Driver·Kernel Driver가 실행을 제어함
- Intel Haswell CPU와 Nvidia K80 GPU가 당시 비교 대상이었으며, TPU v1은 추론에서 약 15~30배 빠르고 GPU 대비 상대적 증분 성능/Watt가 25~29배 높았지만 학습용 장치는 아니었음
추론 비용을 낮추기 위한 TPU v1의 출발점
- TPU v1 프로젝트의 목표는 딥러닝 기반 서비스가 요구하는 대규모 하드웨어 비용을 낮추기 위해 추론용 ASIC을 빠르게 만드는 것이었음
- 목표치는 GPU 대비 추론에서 10배 비용 대비 성능 우위였음
- 빠른 개발, 높은 성능, 대규모 적용, 새로운 워크로드의 즉시 지원, 비용 효율성이 함께 요구됨
- TPU라는 이름은 텐서 연산을 가속하는 장치라는 점에서 나옴
- 실제 TPU v1 하드웨어가 다루는 핵심 계산은 주로 벡터와 행렬 연산임
- 신경망의 은닉층과 출력층은 입력값 벡터와 가중치 행렬의 곱에 활성화 함수를 적용한 결과로 표현될 수 있음
- 여러 입력 데이터가 들어오면 행렬 곱셈 결과의 각 항목에 활성화 함수를 적용하는 형태가 됨
시스톨릭 배열로 행렬 곱셈 처리
- TPU v1은 H.T. Kung과 Charles E. Leiserson의 1978년 논문 Systolic Arrays (for VLSI)에 나온 시스톨릭 시스템 개념을 사용함
- 여러 프로세서가 규칙적인 리듬으로 데이터를 계산하고 전달하는 구조임
- 각 프로세서는 짧은 계산을 수행하면서 데이터를 계속 안팎으로 이동시킴
- 단순한 2×2 행렬 곱셈에서는 입력값을 위쪽과 왼쪽에서 올바른 순서로 넣으면 결과가 2×2 MAC 배열에서 자연스럽게 나옴
- 각 MAC은 곱셈과 누산을 수행함
- 부분합은 배열 안에 저장되고, 최종 결과는 이동하는 대각선 형태로 나타남
- 2×2 예시는 4단계가 필요하지만 실제로는 왼쪽 위 MAC이 비는 즉시 다음 행렬 곱셈을 시작할 수 있어, 2사이클마다 새 행렬 곱셈이 가능함
- 핵심은 데이터를 올바른 순서로 시스톨릭 배열에 공급하면 값과 결과의 흐름 자체가 필요한 계산 순서를 만든다는 점임
- 중간 결과를 메인 메모리에 저장했다가 다시 가져올 필요가 없음
- 행렬 곱셈 유닛의 구조와 입력 순서 덕분에 중간 결과가 필요한 시점에 자동으로 사용 가능함
TPU v1 시스템 구성
- TPU v1은 호스트 컴퓨터와 PCIe 고속 직렬 버스로 통신하고, 자체 DDR3 DRAM에 직접 접근함
- 주요 구성 요소는 다음과 같음
- DDR3 DRAM / Weight FIFO
- 가중치는 DDR3-2133 인터페이스로 연결된 DDR3 RAM 칩에 저장됨
- 호스트 메모리에서 PCIe를 통해 미리 로드된 뒤, Matrix Multiply Unit에서 쓰기 위해 Weight FIFO로 이동함
- Matrix Multiply Unit
- 256×256 MAC으로 구성된 시스톨릭 배열임
- 위쪽에서 256개 가중치, 왼쪽에서 256개 데이터 입력을 받음
- Accumulators
- 시스톨릭 행렬 유닛 아래쪽에서 나온 결과를 저장함
- Activation
- Unified Buffer / Systolic Data Setup
- 활성화 함수 적용 결과를 저장하고, 다음 층 계산을 위해 Matrix Multiply Unit의 입력으로 다시 공급할 준비를 함
계산 형식과 명령어 집합
- TPU v1의 Matrix Multiply Unit은 8-bit×8-bit 정수 곱셈을 수행함
- 양자화를 사용해 더 큰 다이 면적이 필요한 부동소수점 계산을 피함
- 명령어 집합은 약 20개 명령을 가진 CISC 설계임
- 명령어는 메모리에서 가져오지 않고 호스트 컴퓨터가 PCIe를 통해 보냄
- 추론 흐름 대부분은 5개 주요 명령으로 구성됨
Read_Host_Memory
- 입력값을 호스트 메모리에서 PCIe를 통해 Unified Buffer로 읽음
Read_Weights
- 가중치 메모리에서 Weight FIFO로 가중치를 읽음
Matrix_Multiply / Convolve
- Unified Buffer의 입력을 Accumulators로 보내며 행렬 곱셈 또는 컨볼루션을 수행함
- B×256 입력과 256×256 상수 가중치 입력을 곱해 B×256 출력을 만들고, B개의 파이프라인 사이클이 걸림
Activate
- Accumulators의 입력에 ReLU, Sigmoid 등 인공 뉴런의 비선형 함수를 적용하고 결과를 Unified Buffer에 출력함
Write_Host_Memory
- Unified Buffer의 결과를 PCIe를 통해 호스트 메모리에 씀
- 이 흐름은 대략 다음 형태로 볼 수 있음
Read_Host_Memory
Read_Weights
Loop_Start
Matrix_Multiply
Activate
Loop_End
Write_Host_Memory
- 행렬 유닛은 Unified Buffer 읽기·쓰기를 줄여 에너지를 아끼기 위해 시스톨릭 실행을 사용함
- 데이터는 왼쪽에서 들어오고, 가중치는 위쪽에서 로드됨
- 256개 원소의 MAC 연산은 대각선 파면처럼 행렬을 통과함
TensorFlow와 드라이버 스택
- TPU v1 하드웨어를 실제 서비스에서 쓰려면 이를 지원하는 소프트웨어 스택이 필요했음
- Google은 TensorFlow를 개발·사용했기 때문에, TensorFlow가 TPU v1과 동작하도록 드라이버를 만드는 일이 핵심 단계였음
- TPU 소프트웨어 스택은 CPU와 GPU용 스택과 호환되어야 했음
- 애플리케이션을 TPU로 빠르게 이식할 수 있어야 했음
- TPU에서 실행되는 애플리케이션 부분은 일반적으로 TensorFlow로 작성되고, GPU 또는 TPU에서 실행 가능한 API로 컴파일됨
- GPU처럼 TPU 스택도 User Space Driver와 Kernel Driver로 나뉨
- Kernel Driver는 가볍게 유지되며 메모리 관리와 인터럽트만 처리하고 장기 안정성을 목표로 함
- User Space Driver는 자주 바뀌며 TPU 실행 설정과 제어, TPU 순서에 맞춘 데이터 재형식화, API 호출의 TPU 명령 변환, 애플리케이션 바이너리 생성을 담당함
28nm 공정과 다이 배치
- TPU v1은 TSMC의 비교적 성숙한 28nm 공정으로 제조됨
- 당시 Google 데이터센터에서 쓰던 Intel Haswell CPU와 Nvidia K80 GPU 칩은 더 진보된 공정으로 만들어졌음
- Google에 따르면 TPU v1의 다이 면적은 이들 칩 다이 면적의 절반 미만임
- 단순한 ISA는 디코딩과 관련 작업에 필요한 다이 오버헤드를 낮췄음
control 영역은 다이 면적의 2% 만 차지함
- Matrix Multiply Unit은 24%, Unified Buffer는 29% 를 차지함
성능 비교와 명확한 한계
- TPU v1은 이미 학습된 모델을 Google 규모의 실제 서비스에서 더 효율적으로 쓰기 위한 추론용 장치임
- 학습 속도나 효율을 개선하기 위해 설계된 장치가 아님
- 추론과 학습은 특화 하드웨어 개발에서 서로 다른 과제를 만듦
- 2013년 기준 핵심 비교 대상은 Intel Haswell CPU와 Nvidia K80 GPU였음
- TPU v1은 K80 GPU보다 MAC 수가 25배 많음
- TPU v1은 K80 GPU보다 온칩 메모리가 3.5배 많음
- TPU v1은 K80 GPU와 Haswell CPU보다 추론에서 약 15~30배 빠름
- GPU 대비 상대적 증분 성능/Watt는 25~29배임
- 맞춤형 아키텍처 덕분에 TPU v1은 당시 CPU와 GPU보다 높은 추론 성능과 낮은 에너지 사용을 달성함
- 빠른 추론과 전력 효율이라는 단일 목표에 집중한 첫 세대 설계였기 때문에, 학습용으로는 설계되지 않았다는 한계가 남아 있음