コンテンツにスキップ

シストリックアレイとは

シストリックアレイとは、単純な演算セルを規則正しく格子状に配置し、計算の途中結果を隣のセルへ直接手渡しながら行列演算を進める仕組みです。 演算器そのものの速さよりも、途中結果の送り先まで含めて設計した配置といえます。

名前から入ると全体像が早くつかめます。日本オペレーションズ・リサーチ学会の学会誌に1992年に載った解説は、systolicを「心臓収縮の」を意味する形容詞とし、心臓が収縮を繰り返しながら血液を全身へ送り、また汲み上げる動きになぞらえて名づけられたとしています。血液にあたるのがデータで、心臓にあたるのが1つ1つの演算セルです。

同じ解説は、シストリックアレイをKungとLeisersonが提案したVLSI向きの並列計算機の仕組みとし、単純なプロセッサを多数、決まった規則で組み合わせた並列計算のシステムと述べています。特徴として挙げられているのは三つです。各セルが左右に隣接するセルとだけ直接つながる局所結合、すべてのセルが単純で同じ構造を持ち実数の四則演算などを1ステップでこなす均一構造、そしてアレイへの入出力を逐次的に、アレイ上での計算を並列に行い、それらがパイプライン化されて重なりながら進むこと、この三つです。

当時の想定も現在に通じます。同解説は、シストリックアレイをノイマン型計算機のシステムバスへつなぐ特定用途向けのハードウェア付加装置として使う形を示しており、その内部には簡単なプロセッサが数千個から数万個、規則正しく並ぶとしています。これは、いまのAIアクセラレータがチップの中で占める位置とよく重なります。

Google Cloudの日本語ドキュメントは、CPUがメモリから値を取り出し、演算し、その結果をふたたびメモリへ書き込む往復を繰り返すものとし、この出入りの遅さがチップ全体の処理量に上限を作る現象をフォンノイマンボトルネックと呼んでいます。GPUは演算器を数千個備えて処理量を稼ぎますが、汎用プロセッサという立場のため、何千もの演算器で行う演算のたびにレジスタや共有メモリへ出入りする点はCPUと共通すると述べています。

シストリックアレイは、この往復を減らします。同ドキュメントは、TPUの数千個の乗算アキュムレータが互いに直につながって1つの大きな格子をなしているとし、この構造をシストリックアレイ アーキテクチャと呼んでいます。そして、乗算が1回済むごとにその答えが次の乗算アキュムレータへ送られ、データとパラメータの乗算結果をすべて足し合わせたものが出力になるとし、行列乗算の処理はメモリアクセスを挟まずに進むと述べています。

途中結果の行き先で、消費電力も速度も決まります
メモリへ戻るか、隣のセルへ渡すか汎用プロセッサ演算器演算器演算器レジスタ/共有メモリ計算のたびに読み書きが挟まりますシストリックアレイセルセルセルセルセル乗算の結果を次のセルへ直接手渡します行列乗算の最中はメモリを挟まずに進みますGoogle Cloudの日本語ドキュメントによれば、TPUの乗算アキュムレータは数千個が直につながり、1つの大きな格子をなします
汎用プロセッサは計算のたびにレジスタや共有メモリへ読み書きしますが、シストリックアレイは途中結果を隣のセルへ直接手渡します。Google Cloudの日本語ドキュメントによれば、この構造により行列乗算の処理中のメモリアクセスが省けます。

升目の大きさと、1サイクルの仕事量

Section titled “升目の大きさと、1サイクルの仕事量”

具体的な数字が入ると規模がつかめます。Google Cloudの日本語ドキュメントは、TPUチップに1つ以上のTensorCoreが入るとし、そのTensorCoreが、行列乗算ユニット(MXU)と、ベクトル用・スカラー用のユニットを備えるとしています。そのMXUは、格子状に並べた乗算アキュムレータの集まりで、大きさはTPU v6eとTPU7xで256×256、それより前の世代で128×128としています。1つのMXUが1サイクルで16,000回の乗累算をこなし、乗算はbfloat16の入力を取り、累積はFP32で行うとも述べています。これらはGoogle CloudがTPUについて公開している仕様値です。

演算の中身そのものは素朴です。NEDOの注釈は、積和演算に特化した演算ユニットについて、大量の積和演算器による並列処理でニューラルネットワークの高速な処理が可能になると述べています。掛けて足す、それだけの回路をひたすら敷き詰めた升目が、シストリックアレイの実体です。

升目を埋めきる難しさが、そのまま代償です

Section titled “升目を埋めきる難しさが、そのまま代償です”

大きさの決まった正方形の升目には、裏返しの弱点が伴います。Google Cloudの日本語ドキュメントは、高い性能に届くCloud TPUプログラムを、密な計算を128×128のかたまりへタイル化できるものとしています。そして、埋まりきらずに余った部分はコンパイラがテンソルをゼロで埋めるとし、その埋め合わせによってTPUコアの利用率が下がるという欠点を挙げています。ゼロを掛けた升目が費やす電力と時間は、そのまま損になります。

同ドキュメントは、XLAコンパイラが最初のバッチで作った計算グラフを使い回すため、テンソルの形が毎回そろっているものがTPUに向くとも述べています。升目の形に計算のほうを合わせる作業が、性能を左右します。

升目を埋めきれるかどうかが、性能を左右します
升目は固定、計算のほうが可変です乗算アキュムレータの升目(128×128 または 256×256)実際の計算が占める升目コンパイラがゼロで埋める升目ゼロで埋めた升目の代償TPUコアの利用率が下がります電力と時間はそのまま消費されます各MXUは1サイクルで16,000の乗累算をこなします高い性能に届くプログラムは、密な計算を128×128のかたまりへタイル化できるものとGoogle Cloudは述べています升目の形へ計算を合わせられるかどうかが、実効性能を左右します
シストリックアレイの升目は固定で、計算のほうが可変です。Google Cloudの日本語ドキュメントによれば、余った升目はコンパイラがゼロで埋めるため、その分だけTPUコアの利用率が下がります。

国内でも、演算器を格子状に配置しています

Section titled “国内でも、演算器を格子状に配置しています”

NEDOと東京工業大学が2021年8月23日に公表したリリースは、エッジ機器でのCNN推論向けに、入力データの平面シフトを受け持つ整形の仕組みと、直積型の並列演算アレイとを組み合わせたアーキテクチャーを提案したとしています。同リリースは、演算を省いてモデルを小さくするとメモリの読み出し位置が飛び飛びになり、データを使い回しにくくなって演算器の空き時間が増えるため、並列処理の計算効率が落ちる、という課題を出発点に挙げています。升目を敷き詰める設計では、稼働率が共通の関心事になります。

試作LSIの仕様も公開されています。並列演算アレイのサイズを32×32とし、活性値と係数値に4ビット固定小数点(INT4)量子化を採用し、TSMCの40nmプロセスで製作したうえで、電源1.1V・最大534MHzという条件での消費電力を400mW以内と実測したとしています。同リリースは、カーネル要素数を9分の1まで絞り、残した要素だけを演算した条件で、この値が実効効率26.5TOPS/Wに相当するとしています。これらは同リリースが公表した試作LSIの値です。

シストリックアレイとは何ですか?

単純な演算セルを規則正しく格子状に配置し、計算の途中結果を隣のセルへ直接手渡しながら行列演算を進める仕組みです。日本オペレーションズ・リサーチ学会の学会誌に載った解説は、KungとLeisersonが提案したVLSI向きの並列計算機の仕組みとしています。

名前の由来は何ですか?

同じ解説は、systolicが「心臓収縮の」を意味する形容詞とし、心臓が収縮を繰り返しながら血液を全身へ送り、また汲み上げる動きになぞらえて名づけられたとしています。

なぜ行列演算が速く進むのですか?

途中結果の行き先が近いためです。Google Cloudの日本語ドキュメントは、乗算が1回済むごとにその答えが次の乗算アキュムレータへ送られるとし、行列乗算の処理はメモリアクセスを挟まずに進むと述べています。

どれくらいの大きさの升目ですか?

Google Cloudの日本語ドキュメントは、TPUのMXUを格子状に並んだ乗算アキュムレータの集まりとし、その大きさをTPU v6eとTPU7xで256×256、それより前の世代で128×128としています。1つのMXUが1サイクルで16,000回の乗累算をこなすとも述べています。

GPUとどこが異なりますか?

途中結果の行き先です。同ドキュメントは、GPUが汎用プロセッサとして数多くのソフトウェアを支えるため、何千もの演算器で行う演算のたびにレジスタや共有メモリへ出入りすると述べています。

弱点はありますか?

升目を埋めきれるかどうかに性能が左右されます。同ドキュメントは、高い性能に届くCloud TPUプログラムを、密な計算を128×128のかたまりへタイル化できるものとし、余った部分をコンパイラがゼロで埋めるため、TPUコアの利用率が下がるとしています。

国内にも演算器を格子状に配置した例はありますか?

NEDOと東京工業大学が2021年8月に公表したリリースは、CNN推論向けに直積型の並列演算アレイを中核へ据えたアーキテクチャーを提案し、アレイサイズを32×32とした試作LSIで最大26.5TOPS/Wの実効効率を実測したとしています。

この記事の事実は、誰でも読める公開資料を根拠とし、各URLの到達可否をこちらで実測しています。したがって、リンク先が移動または消滅した場合は、その旨をこのページへ反映します。

回答待ち 更新中 公開Q&A

このページの質問窓口

AIに疑問を送る

「匿名で送信する」を押して内容を送ると、受付ID付きの回答URLを発行します。URLでは進捗を追うことができ、通常は1日以内に回答します。個人情報を取り除いて編集した質問と回答だけを、承認済み資料の出典リンクとともに公開Q&A一覧へ掲載します。

通常、1日以内に回答します 回答待ち 更新中

  1. 匿名で送る 分かりにくい箇所、指摘、追加してほしい内容を書きます。
  2. 受付IDと回答URLを保存する 送信後に発行されるURLへ、進捗が順次反映されます。
  3. 進捗と回答を追う URLには、受付済み、回答作成中、解決済みの状態と回答が載ります。
公開Q&A一覧へ 5〜4,000文字。氏名・連絡先などの個人情報、秘密情報は入力禁止です。

このフォームは匿名です。氏名・連絡先・応募情報などの個人情報、秘密情報、社外秘情報、契約情報、非公開資料の入力は禁止です。投稿原文は運営用DBに保存し、公開面には、個人情報・秘密情報・危険な命令を除く安全審査と読みやすい文章への編集を経た質問文と回答だけを載せます。状態は「受付済み」「回答作成中」「解決済み」の3段階です。安全審査の結果によっては公開を保留します。サイト側の機械検査を通った内容だけを運営側のAI回答作成環境へ送り、回答案の作成と、それとは独立したAI審査に使います。機械検査には見落としの可能性があり、回答作成と審査の履歴は利用中の環境に保持されます。IPアドレスや端末情報は送信対象外です。回答URLは公開Q&A用で、共有先からも開けます。送信により、この利用条件と審査後のQ&A公開に同意したものとします。