NVIDIA Tensor コアを用いたテンソルネットワーク型量子回路シミュレーション
大友広幸（東京工業大学 情報理工学院）

第 18 回 HPC-Phys 勉強会 （2023/2/8）

自己紹介
名前：大友広幸
所属：東京工業大学 横田理央研究室 D3
趣味：ピザ窯作り、GPU 熱燗・ローストビーフ
興味
おもしろプロセッサ

Preferred Networks、R-CCS、NVIDIA、PEZY、Fixstars などでそれっぽいインターン。
研究
混合精度演算。特に行列積。乱択数値線形代数と量子回路シミュレーションも。

1 / 17

今日の話
テーマ
深層学習用ハードウェアはそれ以外の用途に使えるか？
深層学習により計算機が発展
低精度・混合精度
行列積専用回路

HPC アプリに応用可能？
単純には難しい。

出典: H. Ltaief, et al., (2022)

Responsibly Reckless Matrix Algorithms for HPC Scientiﬁc Applications
出典: S. Matsuoka, et al. (2022)

Myths and Legends in High-Performance Computing

2 / 17

NVIDIA Tensor コア
混合精度行列積和回路（A · B + C）
最近の NVIDIA GPU にはどれでも搭載されている。
A100 GPU で 312 TFlop/s、H100 GPU で 989.5 TFlop/s。
単精度性能はそれぞれ 19.5 TFlop/s、67 TFlop/s。15 倍ほどの性能差。
FP32

FP16 / TF32
FP32

FP32

指数部 : 8 bit

仮数部 : 23 bit

FP32
TF32
FP165 bit

10 bit3 / 17

NVIDIA Tensor コアで単精度行列積
Tensor コアで単精度行列積和を計算したい
入力行列 A, B の型変換が必要
FP32

FP32

FP16 / TF32
FP32

FP32

型変換

型変換の影響で計算精度が半精度程度まで劣化

4 / 17

単精度行列積エミュレーション
単精度行列積を FP32 の理論ピーク性能よりも速く計算。
（Ootomo and Yokota, 2022）。
計算精度

計算性能

FP32 SIMT
Our method

Markidis' method
TensorCore w/o ErrCor
Performance [TFlop/s]

10 3
10 4Error

Our method(FP16-TC)
Our method(TF32-TC)

10 5
10 6
10 7
26

29
212
215
k : matmul-(16, 16, k)

218

60
50cuBLAS
FP32 peak

NVIDIA A100

4030
201001000

4000
8000
12000
Matrix size m : matmul-(m, m, m)

16000

論文：Recovering single precision accuracy from Tensor Cores while surpassing theFP32 theoretical peak performance, IJHPCA, 2022

5 / 17単精度行列積エミュレーション
既存研究（Markidis, et al. 2018）
型変換により失われる仮数部を計算
これを用いて行列積の精度を補正⇒ が、エミュレートできていない。
我々の研究
Tensor コア内部の「丸め」が悪い

AB

FP32

* 2048FP16/TF32* 2048

Tensor Core

それをソフトウェア的に回避⇒ 単精度をエミュレート

0Accumulator

RNAccumulator/ 2048C

6 / 17

単精度行列積エミュレーション
TF32TCEC: 完全 SGEMM エミュレーション
TF32 入力の Tensor コアを使用。最大 33 TFlop/s 実効。

FP16TCEC: 限定指数部範囲 SGEMM エミュレーション
FP16 入力の Tensor コアを使用。最大 51 TFlop/s 実効。

計算精度

入力行列の表現60
50

cuBLASFP32 peak*48*8')'*48')'NVIDIA A100 4030

FIXXIVPerformance [TFlop/s]

Our method(FP16-TC)
Our method(TF32-TC) 

20
100
1000

4000
8000
12000
Matrix size m : matmul-(m, m, m)

16000

   





FP16TCEC は何かに使えるか？ ⇒ 量子回路シミュレーションはどう？

7 / 17

量子計算機と量子回路シミュレーション
量子計算機
初期状態

量子ゲート

測定

010
量子回路

出力

000001
010
011
100
101
110111
高出現頻度

深さ

量子回路シミュレーション
ビット列が与えられた時、その出現確率 p = |a|2 （正確には振幅 a）を計算

8 / 17テンソルネットワーク縮約によるシミュレーション
量子回路を表現するテンソルネットワークを縮約することにより振幅を計算。
(a) 量子回路(b) テンソルネットワーク(c) 縮約パスの最適化(d) TTGTにより行列積へ変換
単精度行列積エミュレーションを応用

主たる計算は単精度複素行列積 ⇒ SGEMM (CGEMM) を速くしたい。

9 / 17テンソルネットワーク縮約と TTGT
テンソル縮約：ベクトルの内積や行列積の一般形
テンソルネットワーク縮約：連鎖行列積の一般形
縮約順序によって計算量が変わる

計算順序（縮約パス）を決定した後、、計算機上でのテンソル縮約：Transpose-Transpose-GEMM-Transpose (TTGT)Transpose

Transpose

GEMM

Transpose

10 / 17

どれくらいの大きさの行列積が行われているのか？
量子超越性検証で用いられるランダム量子回路で計算時間割合を調査。
ランダム量子回路 10 × 10 量子ビット、深さ 1 + 32 + 1
Google Sycamore 量子回路プロセッサ（53 量子ビット、深さ 1 + 20 + 1）

GEMM (8192, 16384, 4096) GEMM (8192, 2048, 8192)
10 × 10d=1 + 32 + 1

47.0

23.4

Sycamore

44.55

22.290GEMM (16384, 16384, 8192)
GEMM (8192, 32768, 16384)
20406080100
Breakdown [%]大きな行列積が支配的
単純に TF32TCEC を適用するだけでも高速化されるが、、11 / 17

自動精度選択
入力行列の指数部分布を見て、
2

何もせず FP16TCEC が使える場合は「FP16TCEC」

FP16 min10
Number of elements

Scaling すれば FP16TCECが使える場合は「Scaling+FP16TCEC」

1e8210080

1e840

200200FP16 range width

1010080

1e7

FP16TCEC が使えない場
合は「TF32TCEC」

60
Exponent

42060
Exponent

40

FP16 range width
1008060
Exponent

4020012 / 17

自動精度選択のテスト
Type-2[s]1.00.80.6
0.4
0.2
0.0

1.0
0.8
0.6
0.4
0.20.0Type-3betterRelative error[s]Type-1[s]1.00.80.6
0.4
0.2
0.010101021010 34
1051010 67
10GEMM mode
CUBLAS
TF32TCEC
AUTO-0.1
AUTO-0.5
FP16TCEC_SCALING
FP16TCEC
DataAverage
Raw

ランダムに生成したテンソルネットワーク

Ti ∈ C128×···×128 、ネットワーク ⇒Type-1: 正規分布 N (0, 10−4 ) から生成
Type-2: Type-1 の初期化の後、全ての要素を 10−6 倍
Type-3: Type-2 の初期化の後、10 ∼ 20 要素を 1 へ

13 / 17

ランダム量子回路
量子超越性検証ベンチマーク
初期状態

深さPSI0Single
CZHadamard層 : 1

ランダム層 : d量子ゲート

Hadamard層 : 114 / 17

ランダム量子回路

1010
1010 2310 410 51010 6

Data
AverageRaw

209 × 9, d = 1 + 32 + 1 10 × 10, d = 1 + 32 + 1

100 500 1000

Accuracy

8 × 8, d = 1 + 40 + 1

Kernel breakdown
Transpose
GEMM, etc

betterRelative error

Time [s]0 10 20

7 × 7, d = 1 + 40 + 1

FP16TCEC_SCALING
FP16TCEC

0 500 1000

GEMM mode
AUTO-0.1
AUTO-0.5

0CUBLAS
TF32TCEC

FP16TCEC 又は Scaling+FP16TCEC が自動選択
計算精度そのままで最大 1.86 倍高速化

15 / 17Google Sycamore シミュレーション
Kernel breakdown
Transpose
GEMM, etc

2010101021010 341051010 6710Raw

Accuracy
betterExecution time / slice
4[s]GEMM mode
CUBLAS
TF32TCEC
AUTO-0.1
AUTO-0.5
FP16TCEC_SCALING
FP16TCEC

Data
Average

Google Sycamore 回路の縮約の 1 スライス
FP16TCEC が自動選択
計算精度そのままで 1.44 倍高速化

16 / 17

まとめテーマ
深層学習用ハードウェアはそれ以外の用途に使えるか？

⇒ 使えた（単精度）量子回路シミュレーションでは、
TF32TCEC は SGEMM に置き換え可能
FP16TCEC を使えるときに使うことでさらなる高速化
混合精度演算器の利点
精度補正手法により細かく・部分的に計算精度調整が可能
仮数部も指数部も単精度が必要ですか？

17 / 17

[おまけ] 倍精度計算はできる？
残念ながら、今回の手法を単純には倍精度拡張できない。
ハードウェアサポートが必要
FP32 入力、FP64 出力みたいな Tensor コア

ソフトウェア的にどうにかできないの？
尾崎スキーム同様に仮数部を分割する方法
分割の仕方を工夫することで、一部の計算を丸め誤差なく計算”DGEMM on Tensor Cores” by Mukunoki et al., 2020
TESLA V100 では DGEMM より遅いが、TITAN RTX 上では速い。

17 / 17

[おまけ] 精度エミュレーション以外に何ができるか？
例えば、、、Randomized SVD by SHGEMM

Randomized SVD : 行列の低ランク近似 Algorithm
SHGEMM : “FP32 行列 · FP16 行列” を Tensor コアで高速にランダム行列は低精度（FP16）で良くない？

Time breakdown [%]RSVD FP32m

RSVD SHGEMM-TF32

RSVD SHGEMM-FP16

Time breakdown of Randomized SVD-11.3% -16.1%

10080
6040
2002
512= 51
nk =rank
92, ra768,
2
3n=m=

81
=n=-8.5% -10.7%

rank

48-11.3% -16.1%

= 20
m=

k=56, ran553
n=612-8.5% -10.7%

rank

48= 20RSVD TF32-18.8% -22.1%

rank

96

= 40

[1] Random projection[2] QR(Y)[3] matmul Q A[4] SVD(B)[5] matmul QU
Accuracy
HighLow

Input matrix shape

必要な部分に必要な精度だけ

17 / 17