Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

Tenstorrentのコンパイラ技術、RESPAPE/TRANSPOSE/SQUEEZEをデータ移動に押し込む

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

Linley Fall Processor Conference 2020の講演ビデオ:Tenstorrent: Relegating the Important Stuff to the Compiler
www.youtube.com

では、Tenstorrentのチップ(Hardware)ではなく、GRAPH COMPILERについて詳しく説明しています。
Tenstorrentのチップには、120個のコアが入っていて、それら120個のコアを使って、

  • Pipeline Parallelism
  • Data Parallelism
  • Model Parallelism

ができます。これら3つの Parallelism は、Cerebras や Graphcore でもできるので、AI アクセラレータとしては当たり前の機能になってきたと思います。

また、Tenstorrent の Graph Compiler では、1つの Tensor を Mini-Tensor に分解して、分解した Mini-Tensor を1つのPacket として扱い、この Packet の コア間で移動するためのスケジューリングもやっているようです。
Packetには、

  • Packet headers
  • Packet IDs
  • Routing information

が付いているようです。

また、Graph Compiler には、チップ内部のNoCの情報も組み込まれています。なので、Routing infomation というものが出てくるのでしょう。
Packet は、NoC によって、Re-order される場合もあるようです。

では、何故? Tensor を Min-Tensor に分割して、Packetとしてコア間を移動するのでしょうか?
それは、RESHAPE, TRANSPOSE, SQUEEZE のような演算は伴わないがデータの並び替えを Packet の移動によって実現しているからのようです。
この部分に関してはコアでは演算を行う必要がなくなり、その分、全体の処理性能が向上できるということになりますね。。
一つのアイデアとしてはいいですね。