본문 바로가기

Paper

Compute Solution for Tesla’s Full Self-Driving Computer


Compute Solution for Tesla’s Full Self-Driving Computer

Emil Talpes, Debjit Das Sarma,
Ganesh Venkataramanan, Peter Bannon,
Bill McGee, Benjamin Floering, Ankit Jalote,
Christopher Hsiong, Sahil Arora,
Atchyuth Gorti, and Gagandeep S. Sachdev
Autopilot Hardware, Tesla Motors Inc.

 

Digital Object Identifier 10.1109/MM.2020.2975764 Date of publication 24 February 2020; date of current version 18 March 2020.


Abstract

Tesla의 완전 자율 주행 (FSD) 컴퓨터는 자율 주행의 매우 까다로운 워크로드를 위한 세계 최초의 특수 목적(purpose-built) 컴퓨터입니다. 이는 CPU, ISP 및 GPU와 같은 산업 표준 구성 요소와 맞춤형 신경망 가속기를 통합하는 새로운 SoC (System on a Chip)를 기반으로합니다. FSD 컴퓨터는 초당 최대 2300 프레임을 처리 할 수 있으며, 이는 Tesla의 이전 하드웨어보다 더 낮은 비용으로 21배 향상을 보이고, 완전히 활용하면 새로운 수준의 안전과 자율성을 도로에서 가능하게합니다.

 

PLATFORM AND CHIP GOALS

THE PRIMARY GOAL of Tesla’s full self-driving (FSD) computer 는 완전 자율 주행과 관련된 현재 및 미래의 데이터 처리 수요를 위한 하드웨어 플랫폼을 제공하는 것입니다. 또한 Tesla의 FSD 컴퓨터는 2016년 10월 이후 제작된 모든 Tesla 차량에 개조되도록(be retrofitted) 설계되었습니다. 이로 인해 냉각 기능이 제한된 구형 차량에 적합하도록 폼 팩터와 열 엔벨로프에 대한 주요 제약이 도입되었습니다.

 

FSD 컴퓨터의 핵심은 세계 최초의 자율성을 위해 특별히 제작된 칩입니다. 우리는 신경망 추론을 위해 72TOPs을 가진 하드웨어 가속기를 제공하며, 배치 크기가 1인 초기 워크로드에 대해 80%를 초과하는 사용률을 제공합니다. 또한 제어 요구를 위한 CPU 세트, ISP, GPU 및 다양한 전,후처리 요구를 위한 비디오 인코더를 포함합니다. 이 모든 것이 긴밀하게 통합되어 칩당 40W 미만의 매우 공격적인 TDP를 충족합니다.

 

시스템에는 독립적으로 부팅되고 독립적인 운영 체제를 실행하는 두 개의 FSD 칩 인스턴스가 포함되어 있습니다. 또한이 두 가지 인스턴스는 시스템에게 탁월한 수준의 안전을 보장하는 독립적인 전원 공급 장치 및 센서를 허용합니다. Figure 1에 표시된 컴퓨터는 이전 하드웨어와 형태, 적합성 및 인터페이스 수준 호환성을 충족합니다.

Figure 1. FSD Computer with two Tesla FSD chips in dual configurations including sensors like Cameras.

 

FSD CHIP

FSD 칩은 약 2억 5천만 게이트 또는 60억개의 트랜지스터가있는 260µm² 다이로, 삼성이 14nm FinFet 기술로 제조했습니다. Figure 2에서 볼 수 있듯이 칩은 37.5mm x 37.5mm 플립 칩 BGA 패키지로 패키징됩니다. 이 칩은 AEC-Q100 Grade2 신뢰성 표준에 부합(qualified)합니다.

Figure 2(a)는 칩의 주요 블록을 보여줍니다. 우리는 신경망 가속기(NNA)의 두 인스턴스를 처음부터 설계했으며 나머지 시스템에는 A72 CPU, G71 GPU 및 ISP와 같은 업계 표준 IP를 선택했습니다. 칩의 표시되지 않은 나머지 영역은 주변 장치, NOC 패브릭 및 메모리 인터페이스로 구성됩니다. 각 NNA에는 32MB SRAM과 96 x 96 MAC 어레이가 있습니다. 2GHz에서 각 NNA는 36 개의 TOP을 제공하여 FSD 칩에 대해 총 72 개의 TOP을 추가합니다.

Figure 2 (b)에 표시된대로 FSD SoC는 대부분의 autopilot 알고리즘을 실행하는 범용 CPU 코어를 제공합니다. 몇 밀리 초마다 새로운 입력 프레임이 전용 이미지 신호 프로세서(ISP)를 통해 수신되며 DRAM에 저장되기 전에 전처리됩니다. 메인 메모리에서 새 프레임을 사용할 수 있게 되면 CPU는 NNA 가속기에 프레임 처리를 시작하도록 지시합니다. 가속기는 로컬 SRAM으로 스트리밍되는 데이터와 매개 변수를 제어 할 뿐만 아니라 DRAM으로 다시 스트리밍되는 결과도 제어합니다. 해당 결과 프레임이 DRAM으로 전송되면 가속기가 *CPU complex로 ​​다시 인터럽트를 트리거합니다. GPU는 NNA 가속기에서 지원하지 않는 알고리즘이 요구되는 모든 후처리 작업에 사용할 수 있습니다.

*CPU Complex란 4개의 코어와 캐시 등으로 구성된 서브유닛 단위

Figure 2. (a) FSD chip die photo with major blocks. (b) SoC block diagram.
Details in Figure 2(a) and NNA @WikiCip : FSD Chip-Tesla

 

Chip Design Methodology

우리의 디자인 접근 방식은 공격적인 개발 일정에 맞춰 조정(tailored)되었습니다. 이를 위해 이전 세대에 비해 성능과 전력 소비를 개선 할 수 있는 가장 큰 레버리지를 제공하는 맞춤형 가속기를 구축하기로 결정했습니다. 나머지 SoC 블록에 대해 기술 노드에서 사용 가능한 hard or soft IPs를 사용하여 schedule risk의 개발을 줄였습니다.

우리는 설계의 광범위한 시뮬레이션을 위해 업계 표준 도구와 verilator와 같은 오픈 소스 도구를 혼합하여 사용했습니다. Verilator 시뮬레이션은 매우 긴 테스트 (예 : 전체 신경망 실행)에 특히 적합했으며, 여기에서 상용 시뮬레이터에 비해 최대 50배의 속도가 향상되었습니다. 반면에 Verilator에서 디자인 컴파일은 매우 느리기 때문에 RTL 개발 단계에서 빠른 처리 및 디버그를 위해 상용 시뮬레이터에 의존했습니다. 시뮬레이션 외에도 하드웨어 에뮬레이터를 광범위하게 사용하여 SoC의 높은 수준의 기능 검증을 보장했습니다.

액셀러레이터의 타이밍 마감(closure)을 위해 최종 배송(shipping) 주파수인 2GHz보다 약 25% 높은 매우 공격적인 목표를 설정했습니다. 이를 통해 설계가 Vmax보다 훨씬 낮게 실행되어 실리콘 특성화 후 측정된대로 전력 예산 내에서 최고의 성능을 제공 할 수 있습니다.

 

NEURAL NETWORK ACCELERATOR

Design Motivation

커스텀 NNA는 플랫폼 목표에 설명한것처럼 매우 높은 프레임 속도와 적절한 전력 예산으로 차선, 보행자, 다양한 종류의 차량을 포함하되 이에 국한되지 않는 미리 정의된 개체 집합을 감지하는 데 사용됩니다.

Figure 3은 일반적인 인셉션 컨벌루션 신경망을 보여줍니다. 네트워크에는 컴퓨팅 데이터나 활성화의 흐름을 나타내는 많은 계층과 커넥션들이 있습니다. 이 네트워크를 통과 할 때마다 들어오는 이미지와 다양한 기능 또는 활성화가 매 계층 이후에 순차적으로 구성됩니다. 최종 레이어 이후에 물체가 감지됩니다.

Figure 3. Inception network, convolution loop, and execution profile.

Figure 3에서 볼 수 있듯이 모든 작업의 ​​98 % 이상이 컨볼루션에 속합니다. 컨볼루션 알고리즘은 7개의 중첩된 루프로 구성됩니다 (Figure 3 참조). 가장 안쪽 루프 내의 계산은 *MAC (multiply-accumulate) 연산입니다. 따라서 우리 설계의 주요 목표는 전력 예산을 늘리지 않고 가능한 많은 수의 MAC 작업을 수행하는 것입니다.
*MAC란 multiply-accumulate 연산이란 A와 B를 곱하고 C를 더하는 과정을 하나의 연산에서 한번에 수행하는 것


컨볼루션 속도를 몇 배로 높이면 *양자화 또는 풀링과 같은 연산의 빈도가 줄어들어 성능이 상당히 저하된다면 전체 성능의 병목이 됩니다. 이러한 작업은 전체 성능을 향상시키기 위해 전용 하드웨어로 최적화됩니다.

*양자화(quantization)란 정확하고 세밀한 단위로 표현한 입력값을 보다 단순화한 단위의 값으로 변환하는 것

  ex) float 2.00013 -> int 2

 

Convolution Refactorization and Dataflow

일부 리팩토링이 적용된 컨볼루션 루프는 Figure 4(a)에 나와 있습니다. 자세히 살펴보면 병렬로 MAC 작업을 처리 할 수 있는 많은 기회를 가진 당황스러운 병렬화 문제임을 알 수 있습니다. 컨볼루션 루프에서 각 내적(dot product)의 길이를 결정하는 3개의 가장 안쪽 루프 내에서 MAC 연산의 실행은 대부분 순차적입니다. 그러나 3개의 외부 루프 내 연산 즉, for each image, for each output channel, for all the pixels within each output channel은 병렬화 할 수 있습니다. 그러나 대용량 메모리 대역폭 요구 사항과 이러한 대용량 병렬 계산을 지원하기위한 상당한 전력 소비 증가로 인해 여전히 어려운 문제입니다. 따라서 논문의 나머지에서 주로 이 두 가지 측면에 초점을 맞출 것입니다.

Figure 4. Convolution refactoring and dataflow.

가장 먼저 주목할 점은 여러 이미지를 병렬로 작업하는 것은 불가능하다는 것입니다. 물체 감지 지연 시간이 증가하므로 안전상의 이유로 모든 이미지가 도착하여 컴퓨팅을 시작할 때까지 기다릴 수 없습니다. 이미지가 도착하자마자 처리를 시작해야합니다. 대신, 다중 출력 채널과 각 출력 채널 내의 다중 출력 픽셀에 걸쳐 계산을 병렬화합니다.

 

Figure 4(a)는 데이터 재사용을 최적화하여 전력을 줄이고 실현된 계산 대역폭을 개선하는 리팩토링된 컨볼루션 루프를 보여줍니다. 그림 4(a)의 2단계에 표시된 것처럼 각 출력 채널의 두 차원을 병합하고 행 우선(row-major form) 형식의 한 차원으로 평면화합니다. 이는 필요한 입력 데이터의 로컬 연속성을 잃지 않고 병렬로 작업 할 수 있는 많은 출력 픽셀을 제공합니다.

또한 그림 4(a)의 2와 3단계에서 볼 수 있듯이 출력 채널들을 반복하는 루프를 각 출력 채널 내의 픽셀을 반복하는 루프로 바꿉(swap)니다. 고정된 출력 픽셀 그룹의 경우, 다음 패스를 위해 다음 출력 픽셀 그룹으로 이동하기 전에, 먼저 출력 채널들의 하위 집합(subset)을 반복(iterate)합니다. 출력 채널의 한 하위 집합 내에서 출력 픽셀 그룹을 결합하는 이 패스 하나는 병렬 계산으로 수행 될 수 있습니다. 출력 채널의 첫 번째 하위 집합 내에서 모든 픽셀을 소진 할 때까지 이 프로세스를 계속합니다. 모든 픽셀이 소진되면 출력 채널의 다음 하위 집합으로 이동하여 프로세스를 반복합니다. 이를 통해 모든 출력 채널 내의 동일한 픽셀 집합에 대한 계산이 동일한 입력 데이터를 사용하므로 데이터 공유를 극대화 할 수 있습니다.

그림 4 (b) – (d)는 컨볼루션 레이어에 대해 위의 리팩토링을 사용한 데이터 흐름도 보여줍니다. 연속되는 출력 채널의 동일한 출력 픽셀은 입력 활성화를 공유하면서 계산되고, 동일한 출력 채널 내의 연속되는 출력 픽셀은 입력 가중치(weights)를 공유하여 계산됩니다. 내적 계산을 위한 이러한 데이터 및 가중치 공유는 대규모 컴퓨팅 대역폭을 활용하는 동시에 데이터 이동을 위한 부하(loads)의 수를 최소화하여 전력을 줄이는 데 중요한 역할을합니다.

 

Compute Scheme

리팩토링 된 컨볼루션을 사용하는 마지막 섹션에서 설명한 알고리즘은 Figure 5와 같이 데이터 흐름을 사용하는 컴퓨팅 체계에 적합합니다. 공간의 간결성을 위해 중간에 물리적 96 x 96 MAC 어레이의 축소 버전이 표시됩니다. 여기서 각 셀은 단일 사이클 피드백 루프로 MAC 연산을 실행(implement)하는 유닛으로 구성됩니다. 상단과 왼쪽의 직사각형 그리드는 가상이며 데이터 흐름을 나타냅니다. 여기에서 데이터 그리드(input data)라고 하는 상단 그리드는 각 행에 96개 데이터 요소의 축소된 버전을 나타내고, 여기서 가중치 그리드라고 하는 왼쪽 그리드는 각 열에 96개의 가중치를 축소 한 버전을 보여줍니다. 데이터 및 가중치 그리드의 높이와 너비는 내적의 길이와 같습니다.

계산은 다음과 같이 진행됩니다. 데이터 그리드의 첫 번째 행과 가중치 그리드의 첫 번째 열은 파이프 라인 방식으로 몇주기(cycle)에 걸쳐 MAC 어레이의 96개 행과 96개 열에 각각 브로드캐스트(broadcast)됩니다. 각 셀은 로컬에서 브로드 캐스트 데이터와 가중치를 사용하여 MAC 연산을 계산합니다. 다음 사이클에서는 데이터 그리드의 두 번째 행과 가중치 그리드의 두 번째 열이 파이프 라인 방식으로 브로드 캐스트되고 각 셀의 MAC 계산이 유사하게 실행됩니다. 이 계산 프로세스는 데이터 및 가중치 그리드의 모든 행과 열이 브로드 캐스트되고 모든 MAC 작업이 완료 될 때까지 계속됩니다. 따라서 각 MAC 장치는 다른 많은 프로세서에서 구현된 수축기 배열(systolic array) 계산과 달리 MAC 배열 내에서 데이터 이동없이 내적을 로컬로 계산합니다. 그 결과 수축기 어레이 구현보다 전력과 셀 면적이 적습니다.

모든 MAC 작업이 완료되면 누산기(accumulator) 값은 후처리를 위해 *SIMD 장치로 푸시 다운 될 준비를 합니다. 이렇게하면 Figure 5와 같이 첫 번째 96 x 96 output 슬라이스가 생성됩니다. 가장 일반적으로 양자화 작업을 포함하는 후처리는 96-wide SIMD 장치에서 수행됩니다. 96-wide SIMD 장치는 각 출력 채널과 관련된 96개 요소 누산기 출력과 일치하는 대역폭입니다. MAC 어레이의 누산기 행(accumulator rows)은 주기 당 한 행의 비율로 SIMD unit으로 이동(shift down)됩니다. 물리적으로 누산기 행은 8개의 그룹으로 8주기마다 한 번 씩만 이동합니다. 이렇게하면 누산기 데이터를 이동하는 데 소비되는 전력이 크게 줄어 듭니다.

*SIMD(Single Instruction Multiple Data)란 CPU에서 지원되는 명령어 셋으로 하나의 명령어로 동일한 형태/구조의 여러 데이터를 한번에 처리하는 병렬처리기법 (<-> SISD)

MAC 엔진의 또 다른 중요한 기능은 MAC 및 SIMD 작업의 중복(overlap)입니다. 누산기 값이 후처리를 위해 SIMD 장치로 푸시되는 동안 다음 컨볼루션 패스가 MAC 어레이에서 즉시 시작됩니다. 이 중복 계산은 계산 대역폭의 전체 사용률을 증가시켜 데드 사이클을 제거합니다.

Figure 5. Compute scheme.

 

Design Principles and Instruction Set Architecture

이전 섹션에서는 계산의 데이터 흐름을 설명합니다. 제어 흐름의 경우 단순성과 전력 효율성에 중점을 두었습니다. 최신 비 순차적 CPU 및 GPGPU에서 실행되는 평균 애플리케이션은 계산 유닛 외부에서 명령과 데이터 그리고 캐시, 레지스터 파일 및 분기 예측기와 같은 값비싼 구조에서 이동하는데 대부분의 에너지를 사용합니다. 또한 이러한 제어 구조는 상당한 설계 복잡성을 유발합니다. 우리의 목표는 거의 모든 전문 제어 구조가 제거되고 워크로드 실행이 성능에 가장 중요한 MAC 엔진에 모든 에너지를 소비하는 컴퓨터를 설계하는 것이 었습니다. 이를 위해 루프 구성 및 퓨전과 같은 모든 값비싼 제어 흐름이 상태 시스템(state machine)에 내장된 매우 유연하면서도 능숙한 상태 시스템을 구현했습니다.

 

또 다른 매우 중요한 성능 및 전력 최적화 기능은 컨볼루션 흐름 중에 DRAM 읽기 및 쓰기를 제거하는 것입니다. 추론에서, 각 레이어의 출력 데이터는 종속 레이어에서 사용되며 덮어 쓸 수 있습니다. 초기 활성화 데이터 세트를 로드한 후 이 머신은 컴퓨팅 엔진 자체에 내장된 SRAM에서 전적으로 작동합니다.

 

이 디자인 철학은 마지막 섹션에 설명되어 있습니다. 우리는 거친 프로그래밍 기능을 갖춘 유연한 상태 머신에 값 비싼 제어 구조가 필요한 세밀한 프로그래밍 기능을 절충합니다. 상태 머신 구동 제어 메커니즘은 매우 작지만 강력하고 유연한 ISA에 적합합니다. 여러 작업을 수행하기 위해 상태 머신을 설정하는 여러 추가 제어 필드가 있는 7개의 기본 명령만 있습니다: data movement in and out of the SRAM (DMA-read and DMA-write), dot product (CONVOLUTION, DECONVOLUTION, INNER-PRODUCT ), and pure SIMD (SCALE, ELTWISE ).

 

데이터 이동(Data movement) 명령어는 32 바이트 길이이며 소스 및 대상 주소, 길이 및 종속성 플래그를 인코딩합니다. 계산(compute) 명령어는 256 바이트 길이이며 최대 3개의 텐서 (input activations and weights or two activations tensors, output results), 텐서 모양(shape) 및 종속성 플래그에 대한 입력 주소를 인코딩합니다. 또한 계산의 특성 (패딩, 스트라이드, 확장, 데이터 유형 등), 처리 순서 (행 우선 또는 열 우선), 최적화 힌트 (입력 및 출력 텐서 패딩, 미리 계산 된 상태 머신 필드), 복합 작업 (스케일, 바이어스, 풀링)를 설명하는 다양한 매개 변수를 인코딩합니다. 모든 계산 명령 뒤에는 모든 내적 출력에서 실행할 SIMD 프로그램을 설명하는 여러개의 SIMD 명령이 올 수 있습니다. 결과적으로 내적 레이어 (CONVOLUTION, DECONVOLUTION)는 간단한 연산 (양자화, 스케일, ReLU) 또는 Sigmoid, Tanh 등과 같은 더 복잡한 수학 함수와 퓨전 될 수 있습니다.

 

NETWORK PROGRAMS

가속기(accelerator)는 DMA 및 Compute 명령어를 동시에 실행할 수 있습니다. 각 종류별로 명령어는 순서대로 실행되지만 동시성(concurrency)을 위해 명령어간에 순서를 변경할 수 있습니다. 생산자/소비자 순서(producer/consumer ordering)는 명시적인 종속성 플래그를 사용하여 유지됩니다.

*DMA(Direct Memory Access)

 

일반적인 프로그램은 Figure 6에 나와 있습니다. 이 프로그램은 여러 DMA-read 작업으로 시작하여 데이터와 가중치를 가속기의 SRAM으로 가져옵니다. 파서(parser)는 이를 대기열(queue)에 삽입하고 첫 번째 계산 명령에서 중지합니다. 보류중인 컴퓨팅 명령어에 대한 데이터 및 가중치가 SRAM에서 사용 가능해지면 해당 종속성 플래그가 설정되고 컴퓨팅 명령어가 다른 대기열의 DMA 작업과 병렬 실행을 시작할 수 있습니다.

 

종속성 플래그는 데이터 가용성과 버퍼 사용을 모두 추적하는 데 사용됩니다. 6단계의 DMA-in 작업은 Figure 6과 같이 이전 컨볼루션(5 단계)에 의해 제공된 버퍼 중 하나를 덮어 씁니다. 따라서 컨볼루션이 끝나고 distination flag(F0)가 지워지기 전에 실행을 시작하면 안됩니다. 그러나 destination buffer and flag를 사용하면 DMA-in 작업이 이전 컨볼루션과 병렬로 실행될 수 있습니다.

 

우리의 컴파일러는 Caffe 형식의 높은 수준의 네트워크 표현을 가져 와서 Figure 6와 유사한 일련의 명령어로 변환합니다. 컴퓨팅 그래프를 분석하고 데이터 흐름, 융합 또는 분할 계층에 따라 정렬하여 하드웨어 기능과 일치시킵니다. 중간 결과를 위해 SRAM 공간을 할당하고 텐서에 가중치를 부여하고 종속성 플래그를 통해 실행 순서를 관리합니다.

Figure 6. Typical network program.

  F0 F1 F2 F3 F4 F5 F6
1 dma_in SRAM0            
2 dma_in   SRAM1          
3 dma_in     SRAM2        
4 dma_in       SRAM3      
5 conv Clear Clear     SRAM4    
6 dma_in SRAM0            
7 conv     Clear        
8 dma_in     SRAM1        
9 conv       Clear   SRAM2  
10 pooling         Clear   SRAM7
11 conv Clear     SRAM6   Clear  
12 conv   SRAM0 Clear Clear      
13 dma_out   DRAM6         Clear

Fig 6.의 이해를 돕기위한 테이블

(이해한대로 구성한 것이기 때문에 정확한지는 모르겠다.)

NNA MICROARCHITECTURE

Figure 7에 표시된 것처럼 NNA는 두 개의 주요 데이터 경로(main datapaths)(dot-product engine and SIMD unit)와 프로그램을 해석하고 메모리 요청 스트림을 생성하며 데이터 경로로 들어오고 나가는 데이터 이동을 제어하는 상태 머신을 중심으로 구성됩니다.

Figure 7. NNA Microarchitecture.

 

Dot Product Engine

"Compute Scheme" 섹션에서 설명한 것처럼 내적 엔진은 96 x 96의 MAC 셀 배열입니다. 각 셀은 두 개의 8 비트 정수 입력 (signed or unsigned)을 받아서 곱하고 결과를 30-bit 폭 로컬 누산기 레지스터에 더합니다. Single precision or half-precision floating-point (FP) 데이터와 추론을 위한 가중치를 사용하여 부동 소수점 연산을 전개(deploy)하는 많은 프로세서가 있습니다. 우리의 integer MAC 컴퓨팅은 모든 Tesla 워크로드를 원하는 정확도로 실행하기에 충분한 범위와 정밀도를 가지고 있으며 FP 산술(arithmetic)을 사용하는 것보다 훨씬 낮은 전력을 소비합니다.

 

모든주기 동안 배열은 각각 96개의 요소가 있는 두 벡터를 수신하고 첫 번째 벡터의 모든 요소와 두 번째 벡터의 모든 요소를 곱합니다. 추가 처리를 위해 SIMD 엔진으로 언로드 될 때 결과는 내적 시퀀스가 끝날 때까지 제자리에 누적됩니다.

 

각 누산기 셀은 누산기와 시프트 레지스터라는 두 개의 30-bit 레지스터로 구성됩니다. 컴퓨팅 시퀀스가 완료되면 내적 결과가 시프트 레지스터에 복사되고 누산기는 비워집니다. 이를 통해 다음 계산 페이즈가 내적 엔진에서 시작되는 동안 내적 결과는 SIMD 엔진을 통해 이동할 수 있습니다.

 

SIMD Unit

SIMD 장치는 전체 산술 명령어 세트를 실행할 수있는 96-wide 데이터 경로입니다. 내적 엔진(누산기 행 하나)에서 한 번에 96개의 값을 읽고 명령 시퀀스(SIMD 프로그램)로 후처리 작업을 실행합니다. SIMD 프로그램은 SRAM에 직접 액세스 할 수 없으며 흐름 제어 명령(branches)을 지원하지 않습니다. MAC 어레이에서 언로드 된 96개 값의 모든 그룹에 대해 동일한 프로그램이 실행됩니다.

 

SIMD 장치는 다양한 데이터 유형, 8-bit, 16-bit, and 32-bit integers and single-precision floating point (FP32)이 있는 풍부한 명령어 세트로 프로그래밍 할 수 있습니다. 명령 세트는 제어 흐름에 대한 조건부 실행도 제공합니다. 입력 데이터는 항상 30-bit 너비 (int32로 캐스트)이고 최종 출력은 항상 8-bit 너비 (signed or unsigned int8)이지만 중간 데이터 형식은 입력 또는 출력과 다를 수 있습니다.

 

대부분의 일반적인 SIMD 프로그램은 FusedReLu (fused quantization, scale, ReLU)라고하는 단일 명령어로 표현 될 수 있으므로 명령어 형식을 사용하면 산술 연산을 시프트 및 출력 연산과 융합 할 수 있습니다. FusedReLu 명령은 완전히 파이프 라인되어 전체 96 x 96 내적 엔진을 96 주기로 언로드 할 수 있습니다. 보다 복잡한 후처리 시퀀스에는 추가 지침이 필요하므로 Dot Product Engine의 언로드 시간이 늘어납니다. 일부 복잡한 시퀀스는 FP32 명령어 및 조건부 실행으로 구성됩니다. 30-bit 누산기 값은 이러한 SIMD 프로그램의 시작 부분에서 FP32 피연산자로 변환되고 FP32 결과는 SIMD 프로그램 끝에서 다시 8-bit int 출력으로 변환됩니다.

 

Pooling Support

SIMD 장치에서 후처리 한 후 출력 데이터는 풀링 유닛을 통해 조건부로 라우팅 될 수도 있습니다. 이를 통해 가장 빈번한 소형 커널 풀링 작업(2x2 및 3x3)이 데이터를 생성하는 이전 레이어와 병렬로 SIMD 실행의 그림자(shadow)에서 실행될 수 있습니다. 풀링 하드웨어는 컨볼루션을 최적화하기 위해 재배열된 출력 픽셀을 원래 형식으로 다시 정렬하는 정렬기(aligners)를 구현합니다. 풀링 유닛에는 바이트 수준 제어 기능이 있는 3개의 96-byte x 96-byte 풀링 어레이가 있습니다. 덜 빈번한 더 큰 커널 풀링 작업은 내적 엔진에서 컨볼루션 레이어로 실행됩니다.

 

Memory Organization

NNA는 32MB 로컬 SRAM을 사용하여 가중치 및 활성화를 저장합니다. 높은 대역폭과 고밀도를 동시에 달성하기 위해 SRAM은 비교적 느린 단일 포트 뱅크를 사용하여 구현됩니다. 이러한 여러 뱅크는 매 사이클마다 액세스 할 수 있지만 높은 셀 밀도를 유지하기 위해 뱅크는 연속적인 사이클에서 액세스 할 수 없습니다.

매 사이클마다 SRAM은 256byte 와 128byte 너비의 두 개의 독립적인 읽기 포트를 통해 최대 384byte의 데이터를 제공 할 수 있습니다. 중재자(arbiter)는 여러 소스 (weights, activations, program instructions, DMA-out, etc.)의 요청 우선 순위를 지정하고 두 포트를 통해 요청들을 정렬합니다. 동일한 소스에서 오는 요청은 재정렬 할 수 없지만 다른 소스에서 오는 요청은 우선 순위를 지정하여 뱅크 충돌을 최소화 할 수 있습니다.

추론하는 동안 가중치 텐서는 항상 정적이여서 효율적인 읽기 패턴을 보장하기 위해 SRAM에 배치 될 수 있습니다. 활성화(activation)의 경우 항상 가능한 것은 아니므로 가속기는 최근에 읽은 데이터를 1KB 캐시에 저장합니다. 이것은 동일한 데이터의 연속적인 읽기를 제거함으로써 SRAM 뱅크 충돌을 최소화하는 데 도움이됩니다. 뱅크 충돌을 더욱 줄이기 위해 가속기는 네트워크 프로그램에서 암시하는 다른 패턴을 사용하여 입력 및 / 또는 출력 데이터를 채울 수 있습니다.

 

Control Logic

Figure 7에서 볼 수 있듯이 제어 로직은 여러 개별 상태 시스템으로 나뉩니다. : Command Sequencer, Network Sequencer, Address and Data sequencers, and SIMD Unit.

각 NNA는 여러 네트워크 프로그램을 큐에 넣고 순서대로 실행할 수 있습니다. 명령 시퀀서(Command Sequencer)는 이러한 프로그램과 해당 상태 레지스터의 대기열을 유지합니다. 네트워크가 완료되면, 가속기는 호스트 시스템의 인터럽트를 트리거합니다. CPU 중 하나에서 실행되는 소프트웨어는 완료 상태를 검사하고 네트워크를 다시 활성화하여 새 입력 프레임을 처리 할 수 ​​있습니다.

네트워크 시퀀서(Network Sequencer)는 프로그램 명령을 해석합니다. 앞에서 설명한대로 명령어는 실행 상태 머신을 초기화하기에 충분한 정보를 인코딩하는 긴 데이터 패킷입니다. 네트워크 시퀀서는 이 정보를 디코딩하여 적절한 소비객체에게 전달하고 종속성을 부여하고 프로듀서와 컨슈머 레이어 간의 잠재적인 race-condition을 방지하기 위해 머신을 동기화합니다.

컴퓨팅 명령이 디코딩되고 실행 상태 머신으로 전달되면 주소 시퀀서(Address Sequencer)가 다운 스트림 계산을 위한 SRAM 주소 및 명령 스트림을 생성합니다. 출력 공간을 최대 96 x 96개 요소의 섹션으로 분할하고 각 섹션에 대해 해당 내적의 모든 항을 통해 시퀀스합니다.

가중치 패킷은 실행과 일치하도록 SRAM에서 사전 주문되므로 상태 머신은 단순히 연속된 96bytes의 그룹으로 스트리밍합니다. 그러나 활성화는 항상 연속된 주소에서 오는 것은 아니며 종종 최대 96개의 개별 SRAM 위치에서 수집해야합니다. 이러한 경우 주소 시퀀서는 각 패킷에 대해 여러 load 주소를 생성해야합니다. 구현을 단순화하고 높은 클럭 주파수를 허용하기 위해 96개 요소 패킷은 각각 8개 요소의 12개 슬라이스로 분할됩니다. 각 슬라이스는 단일 로드 작업에 의해 서비스되므로 첫 번째 요소와 마지막 요소 사이의 최대 거리는 256 바이트보다 작아야합니다. 결과적으로 1~12개의 독립적인 로드 작업을 실행하여 96개의 활성화 패킷을 구성 할 수 있습니다.

제어 정보와 함께 로드 데이터는 데이터 시퀀서(Data Sequencer)로 전달됩니다. 가중치는 prefetch 버퍼에서 캡처되고 필요에 따라 실행될 이슈입니다. 활성화는 96개의 요소가 수집되어 MAC 어레이로 전송되는 데이터 캐시에 저장됩니다. 데이터 경로에 대한 명령은 데이터 시퀀서에서 유입되어 실행 활성화, 누산기 시프트, SIMD 프로그램 시작, 저장 주소 등을 제어합니다.

SIMD 프로세서는 MAC 어레이에서 언로드 된 96개의 누산기 결과의 각 그룹에 대해 동일한 프로그램을 실행합니다. 주소 시퀀서 내에서 생성된 제어 정보에 의해 동기화되며 SIMD 산술 명령어 스트림을 디코딩, 발행 및 실행할 수 있습니다. SIMD 장치에는 자체 레지스터 파일이 있고 데이터 경로에서 데이터 이동을 제어하지만 결과가 저장되는 대상 주소는 제어하지 않습니다. 작업할 96 x 96 출력 슬라이스를 선택할 때 주소 시퀀서에서 저장소 주소 및 풀링 제어를 생성합니다.

 

ARCHITECTURAL DECISIONS AND RESULTS

MAC 어레이 및 SIMD 프로세서와 같은 매우 광범위한 시스템을 구현할 때 주요 관심사는 항상 작동 클럭 주파수와 관련이 있습니다. 클록 주파수가 높으면 목표 성능을 더 쉽게 달성 할 수 있지만 일반적으로 일부 로직 단순화가 필요하므로 특정 알고리즘의 활용도를 떨어 뜨립니다.

우리는 입력 및 출력 채널이 많은 심층 컨볼루션 신경망에 대해 이 설계를 최적화하기로 결정했습니다. SRAM이 매 사이클마다 MAC 어레이에 제공하는 192 바이트의 데이터 및 가중치는 stride가 1 또는 2인 레이어에만 완전히 활용 될 수 있으며 stride가 높은 레이어는 사용률이 떨어지는 경향이 있습니다.

액셀러레이터의 사용률은 Figure 8에 표시된 것처럼 MAC 어레이의 크기와 모양에 따라 크게 달라질 수 있습니다. inception-v4 및 Tesla Vision 네트워크는 모두 MAC 어레이의 높이(Figure 8, right)에 상당한 민감도를 나타냅니다. 동시에 더 많은 출력 채널을 처리하면 전체 사용률이 저하 될 수 있지만, 모두 동일한 입력 데이터를 공유하기 때문에 해당 기능을 추가하는 것은 상대적으로 저렴합니다. 어레이의 너비(Figure 8, left)를 늘려도 활용도가 크게 떨어지지는 않지만 훨씬 더 많은 하드웨어 리소스가 필요합니다. 선택한 설계 지점 (96 x 96 MAC 어레이)에서 이러한 네트워크의 평균 사용률은 80%를 약간 넘습니다.

Figure 8. Achieved utilization versus MAC array dimension.

평가해야 할 또 다른 트레이드 오프는 SRAM 크기입니다. 신경망의 규모가 커지고 있으므로 가능한 한 많은 SRAM을 추가하는 것이 설계의 미래를 보장하는 방법이 될 수 있습니다. 그러나 훨씬 더 큰 SRAM은 파이프 라인 깊이와 칩의 전체 영역을 증가시켜 전력 소비와 시스템의 총 비용을 모두 증가시킵니다. 반면에 SRAM에 맞지 않는 너무 큰 컨볼루션 레이어는 항상 여러 개의 작은 구성 요소로 나눌 수 있으며, 잠재적으로 DRAM에게 spilling and filling data로 약간의 불이익을 줄 수 있습니다. 현재 네트워크의 요구 사항과 중기적 확장 계획에 따라 가속기 당 32MB의 SRAM을 선택했습니다.

 

CONCLUSION

Tesla의 FSD 컴퓨터는 25 %의 추가 전력으로 비용을 절감하면서 이전 하드웨어에서 사용된 상용 솔루션에 비해 탁월한 21배 성능 향상을 제공합니다. 이 수준의 성능은 우리가 시작한 디자인 원칙을 타협하지 않고 고수함으로써 달성되었습니다. 모든 단계에서 높은 수준의 데이터 재사용과 제어 흐름을 위한 최소한의 설계를 통해 사용 가능한 컴퓨팅 대역폭의 활용도를 극대화했습니다. 이 FSD 컴퓨터는 FSD feature set을 발전시키기위한 기반이 될 것입니다.

이 작업에서 배운 핵심은 효율성(efficiency)과 유연성(flexibility) 사이의 균형이었습니다. 고정 기능 하드웨어가있는 맞춤형 솔루션은 최고의 효율성을 제공하는 반면, 완전히 프로그래밍 가능한 솔루션은 더 유연하지만 훨씬 덜 효율적입니다. 우리는 마침내 가장 일반적인 기능을 매우 효율적으로 실행하는 구성 가능한 고정 기능 하드웨어가있는 솔루션을 결정했지만 덜 일반적인 기능을 낮은 효율로 실행하는 프로그래밍 가능한 SIMD 장치를 추가했습니다. 추론을 위해 배포된 Tesla 워크로드에 대한 우리의 지식을 통해 높은 수준의 확신을 가지고 그러한 절충안을 만들 수 있었습니다.

 

Tesla’s FSD Computer provides an exceptional 21x performance uplift over commercially available solutions used in our previous hardware while reducing cost, all at a modest 25% extra power. This level of performance was achieved by the uncompromising adherence to the design principle we started with.

 


REFERENCES

1. Y. LeCun, P. Haffner, L. Bottou, and Y. Bengio, “Object recognition with gradient-based learning,” in Proceeding: Shape,Contour andGrouping inComputer Vision. New York,NY, USA: Springer-Verlag, 1999.

2. W. Rawat and Z. Wang, “Deep convolutional neural networks for image classification: A comprehensive review,” Neural Comput., vol. 29, no. 9, , pp. 2352–2449, Sep. 2017.
3. K. Sato, C. Young, and D. Patterson, “An in-depth look at Google’s first tensor processing unit,” Google Cloud Platform Blog, May 12, 2017.
4. N. P. Jouppi et al., “In-datacenter of a performance analysis tensor processing unit,’’ in Proc. 44th Annu. Int. Symp. Comput. Archit., 2017, vol. 1, pp. 1–12.
5. I. Cutress, “AMD zen 2 microarchitecture analysis: Ryzen 3000,’’ AnandTech, Jun. 10, 2019.
6. “NVIDIA volta AI architecture,” NVIDIA, 2018. [Online]. Available: https://www.nvidia.com/en-us/data-center/
volta-gpu-architecture/
7. J. Choquette, “Volta: Programmability and performance,” Nvidia, Hot Chips, 2017. [Online]. Available: https://www.hotchips.org/wp-content/uploads/hc_archives/hc29/ HC29.21-Monday-Pub/HC29.21.10-GPU-Gaming-Pub/ HC29.21.132-Volta-Choquette-NVIDIA-Final3.pdf
8. M. Horowitz, “Computing’s energy problem,” in IEEE Int. Solid-State Circuits Conf. Dig. Tech. Papers, 1999,
pp. 10–14.
9. M. Komorkiewicz, M. Kluczewski, and M. Gorgon, “Floating point HOG implementation of for real-time multiple object detection,” in Proc. 22nd Int. Conf. Field Programm. Logic Appl., 2012, pp. 711–714.