『半導体業界の第一人者,AI業界を行く!』 Vol.9:Xilinx社 新FPGA Versal -Part1-

『半導体業界の第一人者,AI業界を行く!』  Vol.9:Xilinx社 新FPGA Versal -Part1-

こんにちは,HACARUS 東京R&Dセンター所属のエッジ・エバンジェリスト 田胡治之です.この連載では,半導体業界で長年知識や情報を得てきた私,田胡がこれまでと異なるAI業界に飛び込み,そこから感じる業界のニュースやトピックを独自の視点で紹介したいと思います.今回のテーマは,Xilinx社の新FPGA Versal の インテリジェントエンジン(Intelligent Engines) についてです.次回,Versal チップ構造の特徴について述べます.

 

Xilinx Versal Industry’s First ACAP (Adaptive Computer Acceleration Platform) [1]

Versal の位置付け

Xilinx社は,ACAP (Adaptive Compute Acceleration Platform) コンセプトを 2018年に発表し,2019年6月にACAPに基づく最初の製品 Versal の先行顧客への出荷を開始しました.Versal は製品シリーズ名です.

同社によれば,「こ のたび発表し た Versal ACAP は, ス カ ラー エンジン, 適応型エンジン, およびイ ンテ リ ジ ェ ン ト エンジン を組み合わせた完全に ソフ ト ウ ェ ア プ ロ グ ラ マブルなヘテ ロ ジニア ス演算プ ラ ッ ト フ ォームで, データセン ター, 有線ネ ッ ト ワー ク , 5G 無線, および先進運転支援シ ステムなどのアプ リ ケーシ ョ ンにおいて現在最速のFPGA イ ンプ リ メ ンテーシ ョ ンに比べ最大 20 倍, 現在最速の CPUイ ンプ リ メ ンテーシ ョ ンに比べ 100 倍以上 という劇的な性能向上を実現 し ます.」[1] です.Zynq Ultrascale+ MPSoC の次世代 FPGA位置付けです.

本稿では Versal の特長のうち,インテリジェントエンジン(Intelligent Engines) を取り上げます.Hisa Ando 著 [2][3] を多くの点で参考にさせて頂きました.紙上を借りてお礼申し上げます.

Xilinx社は,Versalを従来のFPGAやSoCに続く第3カテゴリの Adaptive Compute Acceleration Platform (ACAP)における最初の製品群と,位置付けます(Figure 1).Versal製品群で最初に発表されたのが VC1902 デバイス(チップ)で,それについて考察します.

 

Figure 1 Xilinx社 FPGA デバイスのカテゴリー [2]

Figure 1 Xilinx社 FPGA デバイスのカテゴリー [2]

Figure 2 Versal Series Overview [2]に加筆

前世代FPGAでの PS (Processor System) が Scalar Engines に,PL (Programmable Logic) が Adaptable Engines に名前が変わりました.Scaler Engines は,プロセサとして前世代の Cortex A-53 2コアから Cortex-A72 2コアへ進化し,リアルタイムOS用には前世代と同じ Cortex-R5 を2コア搭載しています.PL (Programmable Logic) は,CLB (Configurable Logic Block) 他が改良されました.

前世代(UltraScale+ MPSoC)は TSMC 16nm 半導体プロセスで製造されていましたが,Versal はTSMC 7nm で製造されます.

Versal の新機軸は,インテリジェントエンジン(Figure 2 ブロック図の一番右)です.なお文献によって, インテリジェントエンジンは AIエンジンとも呼ばれています.本稿でも両方の名称を使います.

 

インテリジェントエンジンのアーキテクチャ

Versalの特徴は,従来のFPGAにAIエンジンを追加すると共に,従来のFPGAにも搭載されていたDSPをAI向けに改良した点です.また,AIエンジンは高いメモリバンド幅を必要とするのでチップ内のメモリアクセスネットワークを高速化しています(Figure 3).

 

Figure 3 AIエンジンで行うタスク [4]

AIエンジンは,ベクタ演算コア(AI Core)とメモリから構成されるタイルを単位とし,タイルが2次元メッシュトポロジでつながっています(Figure 4).さらに,上下,左右に隣接したタイル間にメモリを通じて専用の接続が設けられています.AIエンジンの数は400個で,INT8では133TOPS(Tera-Operation Per Second)のピーク性能を持ちます.メッシュはノンブロッキングのデータ転送ができます.

 

Figure 4 AIエンジンのアレイ構造 [4]

AIエンジンはノンブロッキングの2次元メッシュネットワークで接続されています.合計で12.5MBの分散メモリを持ちます.分散メモリですが,自ノードのメモリ以外に直結リンクのある隣接する4タイルのメモリもアクセスできます.AIエンジンのコアは,32bit RISCプロセサに512bit SIMDのベクタユニットが付いています(Figure 5).

 

Figure 5 AIエンジンの一つのタイルとインターコネクト [4]

AIエンジンのプロセッサコアは,32-bit スカラ RISC プロセッサと 512-bit 幅SIMD演算を含む 7-way VLIW(Very Long Instruction Word)プロセッサから構成されます(Figure 6).

 

Figure 6 AI Engine Processor Core の中身 [4]

AIエンジン内部の総メモリバンド幅は, 各タイルの SRAM と プロセッサコアが密に結合しているため,38TB/s と非常に高いです.AIエンジンは1.5TB/s(Tera Byte per second)のバンド幅で L1 SRAMにつながっています.更に L1 SRAM から L2 SRAM につながり,L2 SRAM は DRAM につながる階層構造になっています.また,L2 SRAM から L1 SRAM への転送では,マルチキャストやブロードキャストができます(Figure 7).

 

Figure 7 AIエンジンのメモリ階層 [3]

シストリックアレイ

演算タイルを二次元状に並べて,データを隣接するタイル間で移動させつつ計算する仕組みは,昔から研究されていました.一例として,1978~1979年頃のシストリックアレイ(Systolic Array)を紹介します[5][6].

シストリック(Systolic)とは,心臓の収縮期の意味ですが,[6]では,「・・前略・・ すべてのプロセッサは,短い計算を実行するたびにリズミカルにデータを出し入れするため,ネットワーク内でデータの定期的な流れが維持されます.・・中略・・もともと心臓と収縮期の計算は,データの移動,特にパイプライニングに重点を置いていることが特徴です.」の意味で使われています.2行2列の行列乗算例を Figure 8 に示します.

 

Figure 8 行列の乗算(2行2列の例)

 

シストリックアレイのタイルとして Figure 9 を考えます.六角形のタイルは,3つの入力端子(i0, i1, i2),3つの出力端子(o0, o1, o2)を持ちます.タイル内部には乗算器,加算器と,出力端子の手前にデータを保持するレジスタ(Register)があります.

動作を Figure 9 右側タイムチャートに示します.入力端子 i0 上のデータ a は,入力された時刻(Figure 9 右図の T0 )から 1 クロック遅れて,出力端子 o0 上に現れます(Figure 9 右図の T1 )

データ b についても同様です.入力端子 i2 上のデータ c は,内部で a x b + c の演算を施され,次のクロックに出力端子 o2 に現れます.入力端子 i0 に データ a,入力端子 i1 に データ b,入力端子 i2 に データ c がある状態を,Figure 9 左 Simplified notation のように表します.

 

Figure 9 シストリックアレイのタイルと動作タイミング図

 

シストリックアレイのタイルを二次元状に配置し各端子を接続します(Figure 10).これをシストリックアレイと呼びます.これを使って2行2列の行列演算をステップ毎に示します(Figure 10 T0~T5).

  • time T0 行列の要素を図のように配置します.黄色と緑の数字は Figure 8 Example の要素に対応します.中央列一番下のタイルの c (ピンク色)の初期値に 0 を設定します.
  • time T1 黄色の要素はそれぞれ右斜め下のタイルに移動します.緑の要素は,それぞれ左斜め下のタイルに移動します. c は,真上のタイルに移動します.中央やや下のタイルでは,i0=1, i1=5, i2=0 となっています.
  • time T2 黄色の要素は,T1 と同じくそれぞれ右斜め下のタイルに移動します.緑の要素は,それぞれ左斜め下のタイルに移動します. 中央のタイル内で行われた計算結果 5(1×5 + 0 )が,真上のタイル i2 端子に現れます.同じタイルには,i0=2, i1=7 が現れています.
  • time T3 黄色の要素は更に右斜め下のタイルに,緑色の要素は左斜め下のタイルに移動します.黄色のデータ,緑色のデータ,ピンク色のデータが揃ったタイルは次の計算準備ができました.中央列一番上のタイル i2 には,計算結果 19 (2×7 + 5) が現れています. 左から4列目下から2行目のタイルでは, c に 15(3×5 + 0), a に4,b に 7 が現れています.左から6列目下から2行目のタイルでも,同様な状況です.
  • time T4 更に計算が進み,3要素の計算が終わった状態です.
  • time T5 最後の計算が終わり,19, 22, 43, 50 が得られました.これは Figure 8 Example 右端の結果と一致します.5クロック(T1~T5)で,2×2行列乗算が行えました.

 

Figure 10 シストリックアレイの動作(2行2列の行列乗算 time: T0 ~ T5)

 

Versal AIエンジンの二次元アレイ構造では,東西南北の隣接タイルのメモリによってデータ移動が行われ(Figure 4),インターコネクト(Figure 5)により隣接タイル以外のタイル間でも柔軟なデータ移動ができます.またタイルの演算器は乗算器よりはるかに強力ですが,筆者には,シストリックアレイ(Figure 9, 10)の進化系に映ります.

消費電力(エネルギー消費)を考えてみましょう.通常のコンピュータで行列乗算を行う場合,データはメインメモリ上にあり,演算器との間で長距離移動を繰り返します.一方,シストリックアレイでは上に示したように,隣接タイル間のデータ移動とタイル内部での積和演算(a x b + c)のみで構成されています.データは距離が短い隣接タイル間を移動するのみで,長距離の移動はありません.従ってデータ移動にかかるエネルギーは少ないと考えられます.

半面,シストリックアレイは行列乗算のような規則正しいデータアクセスと演算のパターンでは効率がよいものの,非規則的演算パターンでは劣ります.それがシストリックアレイがレーダー信号処理などの限られた応用に留まっていた理由だと考えます.

近年の深層学習処理では,行列演算や積和演算( a x b + c を繰り返すパターン)が処理の大部分(~95%とも)を占めるため,それらの演算の高速化と低消費電力化が重要になりました.つまり状況が変わったわけです.そこでアレイ型アーキテクチャに脚光があたり,FPGAでも取り入れられ実用化に至ったと考えます.なお,Google社TPU もシストリックアレイを使っています[7].

 

AIエンジンの性能

Xilinx社前世代の UltraScale+ MPSoC(左側縦棒) と,Versal VC1902 の深層学習推論性能(右側縦棒) の比較です(Figure 11).GoogleNetでのイメージ認識では7倍強の性能で,ResNet-50でのイメージ認識では約5倍の性能です.ただし,Versalは実測ではなく,VC1902 AIエンジンを使った場合の予測値です.

 

Figure 11 Versal VC1902 AIエンジンの予測性能[3]

AIエンジンのプログラミング

AIエンジンのプロセッサコアは,7way VLIW (Very Long Instruction Word)構造であり,多数の演算器,ローカルメモリ,インターコネクトをタイミング合わせて制御する必要があります(Figure 6).[9][10][11]によれば,「AI Engineプログラムは,C++で記述されたデータフローグラフ(適応可能なデータフローグラフ)仕様で構成されています.

この仕様は,AIエンジンコンパイラを使用してコンパイルおよび実行できます.適応データフロー(ADF)グラフアプリケーションは,ノードとエッジで構成され,ノードは計算カーネル関数を表し,エッジはデータ接続を表します.アプリケーションのカーネルは,AIエンジンで実行するようにコンパイルでき,ADFグラフ仕様の基本的な構成要素です. ADFグラフは,AIエンジンカーネルが並行して動作する Kahn process networks [12]です.」,とのことです.

Xilinx社は,AI Engine v2.0 LogiCORE IP も準備しています(Figure 12) [8]. これは,Xilinx社が開発済の AXI に接続される機能ブロック(IP)です.ユーザは機能ブロック仕様を理解すればよく,AI Engine をプログラムする必要はないと思われます.

 

Figure 12 AI Engine v2.0 LogiCORE IP Product Guide [8]

まとめ

Xilinx社は,Versalを従来のFPGAやSoCに続く第3カテゴリのAdaptive Compute Acceleration Platform (ACAP)における最初の製品群と,位置付けます.

Xilinx社の前世代FPGA(UltraScale+ MPSoC)と比べると,スカラーエンジン(従来の PS),適応型エンジン(従来の PL)に加えて,新しくインテリジェントエンジン (AIエンジン) が追加されました,
前世代は TSMC 16nm 半導体プロセスで製造されていましたが,Versal は,TSMC 7nm で製造されています.

インテリジェントエンジンは,512bit SIMD演算器を含む 7-way VLIW 構造の CPU とローカルメモリをタイルとして,2次元アレイ状にタイルを配置した構造です.

タイル間はノンブロッキングのデータ転送が可能な二次元メッシュトポロジーで接続されており,隣接タイル間はメモリを通じた専用の接続も設けられています.

Versal VC1902 の深層学習推論性能は,UltraScale+MPSoC FPGAと比較して,GoogleNetでのイメージ認識では7倍強,ResNet-50でのイメージ認識では約5倍の性能,と予測されています.

Intelligent Engineのプログラミングには,Kahn process networks に基づくC++ で記述されたデータフローグラフを使います.Xilinx社が開発済の AI Engine v2.0 LogiCORE IP も使えます.

 

参考文献

[1] Xilinx Versal
https://japan.xilinx.com/products/silicon-devices/acap/versal.html

[2] A[Iエンジンを持ったXilinxの「Versal FPGA」
https://news.mynavi.jp/article/hotchips31_ml-14/

[3] さまざまな分野におけるAIアプリニーズに対する答えとなる「Versal」
https://news.mynavi.jp/article/hotchips31_ml-15/

[4] Xilinx Developer Forum Versal:AI Engine & Programming Environment
https://www.xilinx.com/publications/events/developer-forum/2018-frankfurt/versal-ai-engine-and-programming-environment.pdf

[5] SYSTOLIC ARRAYS FOR (VLSI)
H.T. Kung, C.E. Leiserson, CMU, April,1978
https://apps.dtic.mil/dtic/tr/fulltext/u2/a066060.pdf

[6] H.T.Kung CMU, Jan. 1979, “Let’s Design Algorithms for VLSI Systems”
https://caltechconf.library.caltech.edu/192/1/HTKung.pdf

[7] FIRST IN-DEPTH LOOK AT GOOGLE’S TPU ARCHITECTURE
https://www.nextplatform.com/2017/04/05/first-depth-look-googles-tpu-architecture/

[8] AI Engine v2.0 LogiCORE IP Product Guide
https://www.xilinx.com/support/documentation/ip_documentation/ai_engine/v2_0/pg358-versal-ai-engine.pdf

[9] Versal ACAP AI Engine Architecture Manual
https://www.xilinx.com/support/documentation/architecture-manuals/am009-versal-ai-engine.pdf

[10] Versal ACAP AI Engine Programming Environment User Guide
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2020_2/ug1076-ai-engine-environment.pdf

[11] AI Engine Kernel Coding Best Practices Guide
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2020_2/ug1079-ai-engine-kernel-coding.pdf

[12] Kahn process networks, Wikipedia
https://en.wikipedia.org/wiki/Kahn_process_networks

 

ニュースレター購読Newsletter

登録はこちら