Cloud 텐서 처리 장치(TPU)
TPU(텐서 처리 장치)는 Google에서 맞춤 개발한 ASIC(Application-Specific Integrated Circuits)로서 머신러닝 워크로드를 빠르게 처리하는 데 사용됩니다. TPU는 Google이 머신러닝 분야에서 쌓은 심화된 경험과 경쟁력을 바탕으로 설계되었습니다.
Cloud TPU를 사용하면 TensorFlow를 통해 Google의 TPU 가속기 하드웨어에서 머신러닝 워크로드를 실행할 수 있습니다. Cloud TPU는 연구원, 개발자, 기업이 CPU, GPU, TPU를 사용할 수 있는 TensorFlow 컴퓨팅 클러스터를 빌드할 때 최대의 성능과 유연성을 발휘하도록 설계되었습니다. 고급 Tensorflow API 덕분에 Cloud TPU 하드웨어에서 모델을 쉽게 실행할 수 있습니다.
TPU의 이점
Cloud TPU 리소스는 머신러닝 애플리케이션에서 주로 사용되는 선형대수 연산 성능을 가속화합니다. TPU를 사용하면 복잡한 대형 신경망 모델을 학습시킬 때 정확성 달성 시간을 최소화할 수 있습니다. 다른 하드웨어 플랫폼에서는 학습하는 데 몇 주가 걸렸던 모델이 TPU에서는 몇 시간이면 수렴 단계에 도달할 수 있습니다.
사용 가능 여부
Cloud TPU 리전 및 영역은 Cloud TPU를 사용할 수 있는 위치를 보여줍니다.
Cloud TPU 프로그래밍 모델
Cloud TPU는 조밀 벡터 및 행렬 연산을 매우 빠르게 수행합니다. Cloud TPU와 호스트 메모리 간 데이터 전송은 연산 속도에 비해 느립니다. PCIe 버스의 속도는 Cloud TPU 교차점과 온칩 고대역폭 메모리(HBM)에 비해 훨씬 느립니다. 호스트와 기기 사이를 오가며 실행되는 모델의 부분 컴파일은 PCIe 버스로 데이터가 도달하기를 기다리면서 대부분의 시간 동안 TPU를 유휴 상태로 만듭니다. 이 문제를 완화하기 위해 Cloud TPU의 프로그래밍 모델은 TPU에서 대부분의 학습을 실행하도록 설계되었으며 이상적인 조건에서는 전체 학습 루프를 학습시킬 수 있습니다.
TPU 프로그래밍 모델의 핵심적인 특징은 다음과 같습니다.
- 모든 모델 매개변수는 온칩 고대역폭 메모리에 저장됩니다.
- Cloud TPU에서 연산을 실행하는 비용은 많은 학습 단계를 루프로 실행하는 것으로 분할 상쇄됩니다.
- 입력 학습 데이터는 Cloud TPU에서 '인피드' 큐로 스트리밍됩니다. Cloud TPU에서 실행되는 프로그램은 각 학습 단계 중에 이러한 큐에서 배치를 가져옵니다.
- 호스트 머신(Cloud TPU 기기에 연결된 CPU)에서 실행되는 TensorFlow 서버는 Cloud TPU 하드웨어로 '인피드'하기 전에 데이터를 가져와서 사전 처리합니다.
- 데이터 동시 로드: Cloud TPU의 코어가 각각의 자체 HBM에 상주하는 동일한 프로그램을 동기적으로 실행합니다. 모든 코어의 각 신경망 단계 마지막에 축소 작업이 수행됩니다.
TPU 사용 시기
Cloud TPU는 특정 워크로드에 최적화되어 있습니다. 상황에 따라 Compute Engine 인스턴스에서 GPU 또는 CPU를 사용하여 머신러닝 워크로드를 실행해야 할 수 있습니다. 일반적으로 다음 가이드라인을 기반으로 워크로드에 가장 적합한 하드웨어를 결정할 수 있습니다.
CPU
- 최대 유연성이 필요한 신속한 프로토타입 생성
- 학습에 오랜 시간이 걸리지 않는 단순 모델
- 유효 배치 크기가 작은 소형 모델
- 대부분 C++로 작성된 커스텀 TensorFlow 작업으로 구성된 모델
- 호스트 시스템의 사용 가능한 I/O 또는 네트워킹 대역폭으로 제한된 모델
GPU
- 소스가 존재하지 않거나 변경이 번거로운 모델
- CPU에서 최소한 부분적으로라도 실행되어야 하는 커스텀 TensorFlow 작업이 대다수인 모델
- Cloud TPU에서 사용할 수 없는 TensorFlow 작업으로 구성된 모델(사용 가능한 TensorFlow 작업 목록 참조)
- 유효 배치 크기가 비교적 큰 중대형 모델
TPU
- 행렬 연산이 주를 이루는 모델
- 기본 학습 루프 내에 커스텀 TensorFlow 작업이 없는 모델
- 몇 주 또는 몇 달간 학습시키는 모델
- 효과적인 배치 크기가 매우 큰 대형, 초대형 모델
Cloud TPU는 다음 워크로드에 적합하지 않습니다.
- 빈번한 브랜치 생성이 필요하거나 요소별 대수가 대부분인 선형대수 프로그램. TPU는 대량의 행렬 곱셈을 신속하게 수행하는 데 최적화되어 있으므로 행렬 곱셈에 치우치지 않은 워크로드의 경우 다른 플랫폼에 비해 TPU에서 우수한 성능을 보일 확률이 적습니다.
- TPU에서 사용할 수 없는 분산 방식으로 메모리에 액세스하는 워크로드
- 고정밀 연산이 필요한 워크로드. 예를 들어 배정밀도 연산은 TPU에 적합하지 않습니다.
- C++로 작성된 커스텀 TensorFlow 작업을 포함하는 신경망 워크로드. 특히 기본 학습 루프 본문의 커스텀 작업은 TPU에 적합하지 않습니다.
신경망 워크로드는 TPU에서 전체 학습 루프를 반복적으로 여러 번 실행할 수 있어야 합니다. TPU 자체의 근본적인 요건은 아니지만 효율성을 위해 TPU 소프트웨어 생태계상 필요한 현재 제약조건 중 하나입니다.
기존 학습과의 차이
일반적인 텐서플로우 학습 그래프는 다음과 같은 다양한 기능을 제공하는 중복된 여러 하위 그래프로 구성되어 있습니다.
- 학습 데이터를 읽는 I/O 오퍼레이션
- 대부분 대기열로 연결된 입력 사전 처리 단계
- 모델 변수
- 변수의 초기화 코드
- 모델 자체
- 손실 함수
- 기울기 코드(일반적으로 자동 생성됨)
- 학습 모니터링을 위한 요약 오퍼레이션
- 체크포인트를 위한 저장/복원 오퍼레이션
Cloud TPU에서 TensorFlow 프로그램은 XLA JIT(Just-In-Time) 컴파일러에 의해 컴파일됩니다. Cloud TPU에서 학습할 때 하드웨어에서 컴파일되고 실행되는 유일한 코드는 모델의 조밀한 부분에 해당하는 손실 및 기울기 하위 그래프입니다. TensorFlow 프로그램의 모든 기타 부분은 호스트 머신(Cloud TPU 서버)에서 일반 분산형 TensorFlow 세션의 일부로 실행됩니다. 이 세션은 일반적으로 학습 데이터, 모든 사전 처리 코드(예: 압축 이미지 디코딩, 무작위 샘플링/자르기, 학습 미니배치 조합), 그래프의 모든 유지보수 부분(예: 체크포인트 저장/복원)을 읽는 I/O 작업으로 구성되어 있습니다.
모델 개발 권장사항
단일 Cloud TPU 칩에 2개의 코어가 포함되어 있으며, 각 코어는 대부분 조밀 행렬 곱셈과 컨볼루션으로 이루어진 프로그램을 신속하게 처리하도록 설계된 여러 행렬 단위(MXU)로 구성됩니다(시스템 아키텍처 참조). 일반적으로 행렬 곱셈을 수행하는 데 소비하는 실행 시간의 비율이 높은 프로그램이 Cloud TPU에 적합합니다. 연산의 대부분이 비행렬 작업(예: 추가, 구조 변경, 연결)인 프로그램은 높은 MXU 사용률을 달성할 가능성이 별로 없습니다. 아래에는 Cloud TPU에 적합한 모델을 선택하고 빌드하는 데 도움이 되는 몇 가지 가이드라인이 나와 있습니다.
단일 Cloud TPU 기기가 4개의 칩으로 구성되어 있으며, 각 칩에 2개의 TPU 코어가 포함되어 있습니다. 따라서 Cloud TPU를 효율적으로 활용하려면 프로그램이 각 8개의 코어를 활용해야 합니다.
레이아웃
XLA 컴파일러는 행렬 곱셈을 더 작은 단위의 블록 타일로 나누는 작업을 비롯한 코드 변환을 수행하여 MXU(행렬 단위)에서 효과적으로 연산을 실행합니다. MXU 하드웨어의 구조인 128x128 시스톨릭 배열과 TPU 메모리 하위 시스템의 설계는 8배수의 차원을 선호하며 효과적인 타일 생성 작업을 위해 XLA 컴파일러에서 사용됩니다. 따라서 타일 생성에 보다 도움이 되는 특정한 레이아웃도 있지만, 타일을 생성하려면 먼저 형태 변경이 필요한 레이아웃도 있습니다. 형태 변경 오퍼레이션은 Cloud TPU에서 메모리의 제약을 받는 경우가 많습니다.
형태
XLA 컴파일러는 첫 번째 배치에 대해 적시에 텐서플로우 그래프를 컴파일합니다. 후속 배치에 다른 형태가 있으면 모델이 작동하지 않습니다. 형태가 바뀔 때마다 그래프를 다시 컴파일하는 작업이 오래 걸리기 때문입니다. 따라서 실시간으로 변경되는 동적 형태의 텐서가 포함된 모델은 TPU에 적합하지 않습니다.
패딩
고성능 Cloud TPU 프로그램을 사용하면 조밀 연산을 128x128 조각 타일로 쉽게 나눌 수 있습니다. 행렬 연산이 전체 MXU를 차지하지 못하는 경우 컴파일러는 0(영)으로 텐서를 패딩합니다. 패딩에는 두 가지 취약점이 있습니다.
- 0(영)으로 패딩된 텐서는 TPU 코어 사용률이 낮습니다.
- 패딩은 텐서에 필요한 온칩 메모리 저장용량을 늘려 최악의 경우 메모리 부족 오류로 이어질 수 있습니다.
패딩은 필요에 따라 XLA 컴파일러에서 자동으로 수행되지만 op_profile 도구의 수단으로 수행되는 패딩의 양을 결정할 수도 있습니다. TPU에 적절하게 맞는 텐서 차원을 선택하여 패딩을 피할 수 있습니다.
크기
적절한 텐서 크기를 선택하는 것만으로 TPU 하드웨어, 특히 MXU의 성능을 끌어올리는 데 큰 도움이 됩니다. XLA 컴파일러는 배치 크기 또는 특징 차원을 사용하여 MXU를 최대한 활용하려고 합니다. 따라서 이 중 하나는 128의 배수여야 합니다. 그렇지 않으면 컴파일러가 이 중 하나를 128로 패딩합니다. 이상적으로는 특징 차원과 배치 크기가 모두 8의 배수여야 메모리 하위 시스템에서 높은 성능을 끌어낼 수 있습니다.
작업
사용 가능한 TensorFlow 작업 목록을 참조하세요.
VPC 서비스 제어 통합
Cloud TPU VPC 서비스 제어를 사용하면 Cloud TPU 리소스 주위에 보안 경계를 정의하고 경계를 넘는 데이터 이동을 제어할 수 있습니다. VPC 서비스 제어에 대한 자세한 내용은 VPC 서비스 제어 개요를 참조하세요. Cloud TPU를 VPC 서비스 제어와 함께 사용할 때의 제한사항을 알아보려면 지원되는 제품 및 제한사항을 참조하세요.
Edge TPU
클라우드에서 학습된 머신러닝 모델은 점차 에지(사물 인터넷(IoT)의 에지에서 작동하는 기기)에서 추론을 실행해야 합니다. 이러한 기기에는 실시간 데이터를 수집하고 지능형 결정을 내린 다음 다른 기기나 클라우드에 조치를 취하거나 정보를 전달하는 센서 및 기타 스마트 기기가 포함됩니다.
이러한 기기는 배터리 전원 등 제한된 전력으로 작동해야 하므로 Google은 저전력 기기에서 ML 추론을 가속화하도록 Edge TPU 보조 프로세서를 설계했습니다. 개별 Edge TPU는 2와트의 전력만 사용하여 초당 4조 작업(4TOPS)을 수행할 수 있습니다. 즉, 와트당 2TOPS를 얻습니다. 예를 들어, Edge TPU는 MobileNet V2와 같은 최첨단 모바일 비전 모델을 초당 거의 400프레임으로 전력 효율적으로 실행할 수 있습니다.
저전력 ML 가속기는 Cloud TPU와 Cloud IoT를 보완하여 AI 기반 솔루션을 지원하는 엔드 투 엔드(클라우드 투 에지, 하드웨어와 소프트웨어) 인프라를 제공합니다.
Edge TPU는 단일 보드 컴퓨터, 시스템 온 모듈, PCIe/M.2 카드, 표면 장착 모듈 등 다양한 폼 팩터의 프로토타입 제작 및 프로덕션 기기에 사용할 수 있습니다. Edge TPU 및 사용 가능한 모든 제품에 대한 자세한 내용은 coral.ai를 방문하세요.
다음 단계
- TPU 빠른 시작을 참조하여 Cloud TPU 리소스 사용 시작하기
- Cloud TPU 튜토리얼 중 하나를 완료하여 Cloud TPU 리소스에서 일반적인 머신러닝 워크로드를 실행하는 방법 알아보기