Tenstorrent 논문 요약
기존의 Shared Memory 방식과는 전혀 다른 설계 구조로 만들어진 Tenstorrent의 AI 가속기가 어떤 물건인지 대략적으로 알아볼 수 있는 논문 Compute Substrate for Software 2.0 을 읽고 핵심 내용을 요약해 보겠습니다.
Introduction
컴퓨팅 능력이 무어의 법칙에 따라 계속 발전하였지만 그동안 오직 단조적인 shared memory model에 의존해 왔습니다. Tenstorrent에서는 인간의 뇌와 유사하게 “불필요한 연산을 포기”하고 “오직 입력과 관련 있는 것만 계산”할 수 있는 두 가지 접근 방식인 dynamic computation 및 massive scaleout을 디자인했다고 합니다. 구체적으로는 shared memory model에서 multicore private memory model로의 패러다임 시프트를 통해, 또한 push-based data movement의 구축을 통해 필요한 요구를 충족시킬 수 있는 하드웨어 - 소프트웨어 구조 설계를 해냈다고 합니다.
논문은 Hardware, Software, Full Stack Performance Optimizations, Dynamic Execution, Results, Conclusion 섹션으로 구성되어 있습니다.
논문이 작성된 당시 출시된 Tenstorrent 칩은 Wormhole이 최신 세대였고, 시장에 널리 풀린 Tenstorrnet 디바이스가 Grayskull 세대였기 때문에 Hardware 섹션에서는 이 Grayskull 칩을 중심으로 하드웨어 디테일을 설명하고 있습니다. Software 섹션에서는 소프트웨어 스택을, Full Stack Performance Optimizations 섹션에서는 하드웨어와 소프트웨어의 연계로 이루어진 풀 스택 성능 최적화를 분석하고 있습니다. 또 Dynamic Execution 섹션에서는 Tenstorrnet 아키텍쳐가 가져다 주는 다양한 동적 실행 방식에 대해 기술합니다. Results에서는 성능 평가 결과가, Conclusion 에서는 결론이 적혀 있습니다.
Hardware
Grayskull 칩은 칩 내에 120개의 컴퓨팅 코어(!=Tensix 코어?)가 들어 있으며, 각 코어가 독립적으로 동작한다고 합니다. 즉 각각의 코어가 고유한 instruction queue를 갖고 있으며 자신의 페이스대로 처리를 수행합니다. 그리고 각 코어간의 데이터 전송을 위해 Network-on-Chip (NoC) 기술이 사용되었다고 합니다. NoC는 2D의 양방향 원환체(torus) 라고 하며 노드당 bandwidth가 192GBps라고 합니다. NoC는 각 코어들을 연결할 뿐만 아니라 off-chip communication 및 memory controller block들 까지 연결해 주기 때문에 PCIe와 DRAM에 120개 코어가 각각 접근할 수 있다고 합니다.
이러한 통신 기반 아키텍쳐가 단일 디바이스에서의 AI 컴퓨팅과 converged networking이라는 비전을 실현시킨다고 합니다. 예를 들어 Wormhole에는 독점 통신 링크가 많이 탑재되어 있기 때문에 중앙 호스트 CPU나 이더넷 스위치의 도움 없이 직접 Wormhole 디바이스를 연결하기만 함으로써 many-device scale out이 쉽게 가능한 것입니다.
Tensix Core
Tenstorrent 아키텍쳐는 패킷 기반으로 동작합니다. NoC를 타고 메모리 간에 이동하는 데이터의 단위는 패킷입니다. 특히 텐서를 ‘미니 텐서’들로 작게 나눠서 작은 크기의 패킷으로 보내는 것이 이후 언급할 ** 의 핵심 기능입니다. 또한 Tensix 코어(특히 내부의 Packet Compute Engine)의 계산 역시 패킷에 대해 직접적으로 실행됩니다.
단일 Tensix 코어는 packer processor, packet manager, SRAM, 5개의 RISC 프로세서로 구성됩니다. RISC 프로세서들은 런타임 소프트웨어 (이후 언급됨 -> 링크로 변경 예정) 를 실행하는데, 이 런타임 소프트웨어가 packet manager와 packet processor에게 instruction들을 디스패치합니다. Grayskull 기준 SRAM의 용량은 1MB이며, 384GBps bandwidth를 갖고 있습니다. 물론 이후의 세대에서는 이 SRAM 용량이 더욱 늘어납니다.
여기서 알 수 있는 것은 RISC-V 코어는 tensor 및 벡터 기반 연산에 직접 관여하지는 않는다는 것입니다. 여기서 RISC-V 코어는 철저히 control plane만 담당하고 있습니다. 물론 그렇다고 해서 RISC-V 코어가 성능에 기여하는 영향이 작은 것은 아닙니다. 이후 언급할 Runtime software(펌웨어)의 실행을 RISC-V 코어가 담당하고 있기 때문이죠. 한편, Tensor 및 벡터(를 잘개 쪼갠 ‘패킷’)에 대한 계산은 packet compute engine이 담당하게 됩니다. 그렇다면 이 packet compute engine의 ISA는 무엇이 채택되었을까요?: Gemini에 의하면,
Tenstorrent 고유의 최적화된 명령어 세트를 가집니다. 이 명령어들은 딥러닝 워크로드에 특화되어 있으며, 텐서 및 벡터 연산을 매우 효율적으로 수행하도록 설계되었습니다. 외부에는 이 고유 ISA에 대한 상세한 문서가 많이 공개되어 있지는 않지만, 내부적으로는 컴파일러가 PyTorch/TensorFlow 연산을 이 저수준의 고유 명령어로 변환하여 발행합니다.
라고 합니다.
Packet Compute Engine
Packet compute engine는 SIMD 기반 매트릭스(텐서) 및 벡터 엔진이며 높은 유연성과 programmability를 갖고 있습니다. Packet compute engine은 연관된 RISC 코어를 통해 software-programmable 하다고 합니다. 그리고 이 RISC 코어들이 앞서 언급했듯이 펌웨어 및 C언어로 작성된 커널을 돌리며 matrix, vector 연산 명령어를 compute engine으로 보냅니다. 여기서 많은 수의 PyTorch 및 TensorFlow 명령어가 지원된다고 합니다 (TT-forge 등을 통한 컴파일 과정이 필요하지만).
Packet compute engine에서는 기본적으로 멀티코어 시스템 전반에 걸친 실행의 큰 흐름이 보이지 않습니다. packet compute engine이 수행하는 연산은 주로 packet manager에 의해 결정됩니다. Packet manager에서 보낸 패킷을 계산하고 다시 packet manager로 보내 데이터 전송으로 이어집니다.
Packet Manager Engine
Full Stack Performance Optimizations
Pull-based 데이터 전송 모델을 도입한 전통적인 멀티코어 디바이스들과 다르게 Tenstorrent는 push-based 모델을 사용합니다. 프로듀서 코어 (output buffer를 생성하는 코어)가 consumer 코어를 인지하고 능동적으로 버퍼를 consumer 코어에 복사한다. 이러한 접근 방식이 consumer core의 idle time(리퀘스트를 보내고 기다리는 시간)을 최소화할 수 있게 합니다.
참고문헌
J. Vasiljevic et al., “Compute Substrate for Software 2.0,” in IEEE Micro, vol. 41, no. 2, pp. 50-55, 1 March-April 2021, doi: 10.1109/MM.2021.3061912. keywords: {Artificial intelligence;Software;Computer architecture;Data transfer;Runtime;Random access memory;Computational modeling;Substrates;machine learning;compilers;multi-core architecture},