Slide 1

Slide 1 text

1 KYOTO UNIVERSITY KYOTO UNIVERSITY 深層モデルの高速化 佐藤 竜馬

Slide 2

Slide 2 text

2 KYOTO UNIVERSITY 深層モデルの高速化方法を紹介します ◼ このサーベイスライドでは、深層モデルを高速化するための様々 な手法を紹介します。 ◼ ますます大きなサイズのモデルが用いられる現代、モデルを高速 化することは、お金と時間の両面の節約になります。

Slide 3

Slide 3 text

3 KYOTO UNIVERSITY 推論の高速化に集中する ◼ 高速化には二種類あります。 ⚫ 訓練の高速化 ⚫ 推論の高速化 ★ ◼ このサーベイでは、推論の高速化に焦点を当てます。 ◼ 理由 1: 推論の高速化の方が単純なのでまずはこちらから 入ると分かりやすい。 ◼ 理由 2: 推論の高速化のいくつかは、そのまま、あるいは 多少の変形で訓練の高速化にも用いることができる。

Slide 4

Slide 4 text

4 KYOTO UNIVERSITY CPU と GPU の両方を考える ◼ 主に二種類の実行方式があります。 ⚫ GPU 上での推論 ★ ⚫ CPU 上での推論 ★ ◼ このサーベイでは両方の方式を扱います。 ◼ どちらを用いるかでアプローチが大きく異なる場合があります。 ◼ 訓練は GPU 上で行われることが大半ですが、 推論は CPU 上で行うことも一般的であることに注意。 GPU 上での推論も一般的で、実用上どちらもありえます。

Slide 5

Slide 5 text

5 KYOTO UNIVERSITY 量子化・低精度計算

Slide 6

Slide 6 text

6 KYOTO UNIVERSITY 量子化は浮動小数点数を整数に丸める 3.25 1.98 −2.11 2.15 0.11 3.01 −0.25 1.55 1.33 3 2 −2 2 0 3 0 2 1 量子化 float32 int8

Slide 7

Slide 7 text

7 KYOTO UNIVERSITY 量子化は係数を用いることもある(1 float + 多 int) 0.12 0.11 0.31 0.25 −0.14 0.19 −0.13 0.21 0.09 1 1 3 3 −1 2 −1 2 1 量子化 float32 int8 0.1 × float32

Slide 8

Slide 8 text

8 KYOTO UNIVERSITY なぜ量子化により高速化されるのか? ◼ なぜ量子化を行うと高速化されるのでしょうか? ◼ 計算の型が変わるだけで、掛け算や足し算など 演算の回数と種類は量子化をしたとて同じです。 ◼ 理由をきちんと理解することは実際に高速化を チューニングする上で大切です。

Slide 9

Slide 9 text

9 KYOTO UNIVERSITY 量子化は様々な側面から高速化を達成する ◼ なぜ量子化を行うと高速化されるのでしょうか? 演算の回数と種類は量子化をしたとて同じです。 ⚫ 量子化によりメモリ消費量が下がる → バッチサイズを大きくできるようになる → スループットが大きくなる ⚫ (CPU 上で)SIMD をより活用できるようになる ⚫ (GPU 上で)Tensor コアをより活用できるようになる ⚫ 通信コストが減少する。 ⚫ キャッシュ効率が向上する。

Slide 10

Slide 10 text

10 KYOTO UNIVERSITY 量子化は様々な側面から高速化を達成する ◼ なぜ量子化を行うと高速化されるのでしょうか? 演算の回数と種類は量子化をしたとて同じです。 ⚫ 量子化によりメモリ消費量が下がる → バッチサイズを大きくできるようになる → スループットが大きくなる ⚫ (CPU 上で)SIMD をより活用できるようになる ⚫ (GPU 上で)Tensor コアをより活用できるようになる ⚫ 通信コストが減少する。 ⚫ キャッシュ効率が向上する。

Slide 11

Slide 11 text

11 KYOTO UNIVERSITY バッチサイズの向上はスループットの向上につながる GPU 上のモデル x y GPU 上のモデル x y 10.0 msec x y 10.1 msec 並列計算が飽和していない限り ほとんど同じ時間でできる → スループットは倍増

Slide 12

Slide 12 text

12 KYOTO UNIVERSITY 量子化によりメモリ削減 → バッチサイズを大きくできる ◼ メモリ制限のために、いくらでもバッチサイズを大きくできるというこ とはありません。 ◼ 量子化により、必要なメモリが小さくなるため、 バッチサイズの限界を向上させることができます。

Slide 13

Slide 13 text

13 KYOTO UNIVERSITY バッチサイズを上げてもレイテンシは良くならない ◼ スループット(単位時間に処理できるデータの個数)は向上 するが、レイテンシ(1 つのデータの処理をはじめてから処理が 終わるまでの時間)は向上しないことに注意してください。 ◼ バッチサイズを上げるとむしろレイテンシは悪くなります。 ◼ 処理すべきデータがたくさん控えているとき、例えばデータベース のすべてのデータにモデルを適用するときや、ユーザーからすごい 勢いでクエリが到着するとき、にはスループットの向上は嬉しい。 ◼ スループットとレイテンシのどちらを向上させるべきかは、 チューニングにおいて意識するべきです。

Slide 14

Slide 14 text

14 KYOTO UNIVERSITY バッチサイズを上げると訓練も早くなる ◼ バッチサイズを増やすと訓練も早くなります。 ◼ モデルの精度は、モデルが訓練中に見たサンプル数でおおむね 決まります。もちろん、様々な要因にもよります。 例えば tuning playbook が参考になります。 https://github.com/google-research/tuning_playbook ◼ バッチサイズを倍増させると、半分の時間で同じサンプル数を見 せることができます。 ◼ FP32 の代わりに FP16 を用いたり、混合精度 (FP16 + FP32) で訓練することは一般的な戦略です。

Slide 15

Slide 15 text

15 KYOTO UNIVERSITY 量子化は様々な側面から高速化を達成する ◼ なぜ量子化を行うと高速化されるのでしょうか? 演算の回数と種類は量子化をしたとて同じです。 ⚫ 量子化によりメモリ消費量が下がる → バッチサイズを大きくできるようになる → スループットが大きくなる ⚫ (CPU 上で)SIMD をより活用できるようになる ⚫ (GPU 上で)Tensor コアをより活用できるようになる ⚫ 通信コストが減少する。 ⚫ キャッシュ効率が向上する。

Slide 16

Slide 16 text

16 KYOTO UNIVERSITY 通常の 64 bit int の足し算 0000101110100010100000111111000011101100001111100111110000010011 0000010011001001010101111010000000010101011111010000000010010100 0001000001101011110110111001000100000001101110110111110010100111 + 64 bit Arithmetic Logic Unit (ALU) int64 int64 int64

Slide 17

Slide 17 text

17 KYOTO UNIVERSITY 64 bit 演算器で 8 個の int8 の足し算が同時にできる 0000101110100010100000111111000011101100001111100111110000010011 0000010011001001010101111010000000010101011111010000000010010100 0001000001101011110110101001000000000001101110110111110010100111 + 64 bit Arithmetic Logic Unit (ALU) int8 int8 int8 int8 int8 int8 int8 int8 繰り上げ を切る

Slide 18

Slide 18 text

18 KYOTO UNIVERSITY SIMD は低精度の演算を同時にこなす ◼ 現代の CPU は 256 ~ 512 bit のレジスタと ALU を持って います。 ◼ 現代の CPU はそれらを使って、低精度の演算を同時に複数 こなすことができます。例)AVX2 ◼ この種の命令のことを SIMD (Single Instruction / Multiple Data) と言います。 ◼ 例えば、 AVX2 は 32 個の int8 演算を一度にできます。

Slide 19

Slide 19 text

19 KYOTO UNIVERSITY 量子化は様々な側面から高速化を達成する ◼ なぜ量子化を行うと高速化されるのでしょうか? 演算の回数と種類は量子化をしたとて同じです。 ⚫ 量子化によりメモリ消費量が下がる → バッチサイズを大きくできるようになる → スループットが大きくなる ⚫ (CPU 上で)SIMD をより活用できるようになる ⚫ (GPU 上で)Tensor コアをより活用できるようになる ⚫ 通信コストが減少する。 ⚫ キャッシュ効率が向上する。

Slide 20

Slide 20 text

20 KYOTO UNIVERSITY Tensor コア は行列積を行う装置 ◼ NVIDIA GPU は CUDA コア と Tensor コア からなります。 ◼ Tensor コアは行列積に特化した装置です。 ▲ A100 GPU のホワイトペーパーより

Slide 21

Slide 21 text

21 KYOTO UNIVERSITY Tensor コアは int8 演算をより多くできる ◼ Tensor コアは float 演算より int8 演算をより多くできます。 理由は CPU の SIMD で述べたことと基本的には同じです。 ▲ A100 GPU のホワイトペーパーより

Slide 22

Slide 22 text

22 KYOTO UNIVERSITY QAT と後処理の二種類の量子化がある ◼ いつ量子化を行うかについて二種類の選択があります。 ⚫ 量子化を意識した訓練 (QAT) ⚫ 後処理による量子化 ◼ 後処理よりも QAT の方が効果的です。 ◼ しかし、すでにモデルを訓練し終わっている場合もあります。 この時には後処理の方を選択する必要があります。

Slide 23

Slide 23 text

23 KYOTO UNIVERSITY 高速化を意識した訓練 vs 後処理による高速化 ◼ 推論の高速化を意識した訓練 vs 後処理による高速化 という構図は、量子化に限らず、様々な高速化のアプローチで 出てきます。 ◼ ただし、いくつかのアプローチでは、後処理には対応できず、 訓練時から採用する必要が生じます。

Slide 24

Slide 24 text

24 KYOTO UNIVERSITY STE が QAT のための基本的な道具 ◼ QAT の基本的なアプローチ: Straight-Through Estimator (STE) [Bengio+ 2013] w = 2.14 q = 2 量子化 x = 1.4 h = 2.8 Forward: w を生パラメータとして持つ (float) 乗算

Slide 25

Slide 25 text

25 KYOTO UNIVERSITY STE が QAT のための基本的な道具 ◼ QAT の基本的なアプローチ: Straight-Through Estimator (STE) [Bengio+ 2013] w = 2.14 q = 2 量子化 x = 1.4 h = 2.8 Forward: 乗算 w = 2.14 q = 2 x = 1.4 h = 2.8 Backward: 勾配なし 𝜕𝐿 𝜕ℎ = 2.1 ෢ 𝜕𝐿 𝜕𝑤 = 1.5 𝜕𝐿 𝜕𝑞 = 1.5 コピー STE w を生パラメータとして持つ (float)

Slide 26

Slide 26 text

26 KYOTO UNIVERSITY STE により連続的にパラメータを更新できる ◼ 直感的には、q (量子化後のパラメータ) を上げるべきならば、 w(量子化前のパラメータ)も上げるべきだろうという考え ◼ 生パラメータを float として持ち、STE を使うことで、連続的に 最適化ができます。 w = 2.14 q = 2 x = 1.4 h = 2.8 𝜕𝐿 𝜕ℎ = 2.1 ෢ 𝜕𝐿 𝜕𝑤 = 1.5 𝜕𝐿 𝜕𝑞 = 1.5 コピー q を (lr *1.5) だけ減らすべきことを示唆し ているが、(lr * 1.5) < 0.5 は小数である

Slide 27

Slide 27 text

27 KYOTO UNIVERSITY STE により連続的にパラメータを更新できる ◼ 直感的には、q (量子化後のパラメータ) を上げるべきならば、 w(量子化前のパラメータ)も上げるべきだろうという考え ◼ 生パラメータを float として持ち、STE を使うことで、連続的に 最適化ができます。 w = 2.14 q = 2 x = 1.4 h = 2.8 𝜕𝐿 𝜕ℎ = 2.1 ෢ 𝜕𝐿 𝜕𝑤 = 1.5 𝜕𝐿 𝜕𝑞 = 1.5 コピー q を (lr *1.5) だけ減らすべきことを示唆し ているが、(lr * 1.5) < 0.5 は小数である この量だけ w を減ら す。 これにより q は変わ らないかもしれない。 しかし、勾配が正で ある傾向が続けば、 変化が積み重なって 最終的に q が下が ることになる。

Slide 28

Slide 28 text

28 KYOTO UNIVERSITY 重みのみ量子化するか、活性化も量子化するかの選択 ◼ どこを量子化するかについて二種類の選択があります。 ⚫ 重みのみの量子化 ⚫ 重みと活性化値の量子化 ◼ 重みのみの量子化では、モデルサイズは小さくなるが、計算は float で行います。 → モデルのロード時間は短縮されるが、計算時間はさほど 変わらない モデルによっては、小さいデバイスに乗らないことがあります。 モデルサイズの削減はエッジでの推論では有用です。

Slide 29

Slide 29 text

29 KYOTO UNIVERSITY どれだけ量子化するかについてはいくつも選択肢がある ◼ どれだけ量子化するかについていくつかの選択肢があります。 ⚫ FP16, BP16 (16bit float フォーマット) ⚫ Int8 ⚫ 二値化 ◼ Update: H100 GPU は FP8 もサポートしました。 ◼ Int4 など、これ以外で量子化することもしばしばあります。 ◼ 上記の 3 つの精度について詳しく見ていきます。 正確にいえば量子化ではなく低精度計算

Slide 30

Slide 30 text

30 KYOTO UNIVERSITY FP16 は簡単に使えるのでまず最初の一歩におすすめ ◼ FP16, BP16 (16bit float) 32bit のモデルはナイーブに FP16 や BP16 にキャストしても 大丈夫なことが多いです。 低精度計算をする上ではまずこれを試すのがおすすめです。 ◼ 約 1.5 倍の高速化が期待できます。 ◼ Tensor コアは Volta アーキテクチャ(V100など)から FP16 と BP16 をサポートしました。 Tensor コアがうまく活用できる計算環境・モデルであればさら に高速化される場合があります。 model = model.half()

Slide 31

Slide 31 text

31 KYOTO UNIVERSITY Int8 は効率がよく精度の低下もほとんどない ◼ Int8 int8 モデルに変換するのはやや込み入った操作が必要でし。 ただし、慎重に変換すると、精度の低下は無視できる程度です。 [Jacob+ CVPR 2018] ◼ 2 ~ 4 倍の高速化が期待できます。 ◼ Tensor コアは Turing アーキテクチャ (RTX20xx など) から int8 をサポートしました。 [Jacob+ CVPR 2018] Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference.

Slide 32

Slide 32 text

32 KYOTO UNIVERSITY 二値化は究極的に高速だが精度は低下する ◼ 二値化 (1bit) 掛け算をビット演算で実行でき、非常に高速です。 洗練された方法で変換しても精度低下は免れません。 ◼ CPU では 30 ~ 60 倍の高速化が期待できます。 [Rastegari+ ECCV 2016]. ◼ GPU では 2 ~ 7 倍の高速化が期待できます。 [Courbariaux+ NeurIPS 2016]. ◼ どうしても速度が欲しいときにおすすめです。 [Rastegari+ ECCV 2016] XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks. [Courbariaux+ NeurIPS 2016] Binarized Neural Networks.

Slide 33

Slide 33 text

33 KYOTO UNIVERSITY 二冪の量子化によりさらに早くなる ◼ 量子化方法によっては、重みやバッチ正則化の係数を 2 冪に 量子化することがあります (…, 1/4, 1/2, 1, 2, 4, …)。 [Courbariaux+ NeurIPS 2016] ◼ このとき、掛け算はビットシフトでできるようになるので、さらに計 算が早くなります。 [Courbariaux+ NeurIPS 2016] Binarized Neural Networks.

Slide 34

Slide 34 text

34 KYOTO UNIVERSITY Reference ◼ 有名論文紹介: ◼ [Jacob+ CVPR 2018] Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. Pytorch と TensorFlow の量子化実装はこの論文に基づきます。

Slide 35

Slide 35 text

35 KYOTO UNIVERSITY Reference ◼ [Courbariaux+ NeurIPS 2015] BinaryConnect: Training Deep Neural Networks with binary weights during propagations. 重みのみの二値化を提案しました。 ◼ [Courbariaux+ NeurIPS 2016] Binarized Neural Networks. 重みと活性化の二値化を提案し GPU を扱っています。 ◼ [Rastegari+ ECCV 2016] XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks. 重みと活性化の二値化を提案し CPU を扱っています。

Slide 36

Slide 36 text

36 KYOTO UNIVERSITY 知識蒸留

Slide 37

Slide 37 text

37 KYOTO UNIVERSITY 蒸留は大きなモデルを小さなモデルに変換する 知識蒸留 大きなモデル 小さな モデル ◼ 推論は小さなモデルだけでできるので、高速になります。

Slide 38

Slide 38 text

38 KYOTO UNIVERSITY 知識蒸留は 2 ステップからなる ◼ 知識蒸留は 2 ステップからなります: 1. 大きなモデルを訓練する。 2. 大きなモデルの出力をターゲットに小さなモデルを訓練する。

Slide 39

Slide 39 text

39 KYOTO UNIVERSITY 知識蒸留は回りくどい ◼ 知識蒸留は回りくどいことをしているように見えます。 なぜ最初から小さいモデルを訓練しないのでしょうか?

Slide 40

Slide 40 text

40 KYOTO UNIVERSITY 知識蒸留は回りくどいがノイズのために必要 ◼ 知識蒸留は回りくどいことをしているように見えます。 なぜ最初から小さいモデルを訓練しないのでしょうか? [Ba+ NeurIPS 2014] Do Deep Nets Really Need to be Deep? 訓練データ (確率的) 教師モデルの 出力 (決定的) 小さいモデルはノイジーなデータに 当てはまるのに苦労します。 小さいモデルにとっては、決定的な信号に 当てはまる方が簡単です。

Slide 41

Slide 41 text

41 KYOTO UNIVERSITY モデルの枝刈り

Slide 42

Slide 42 text

42 KYOTO UNIVERSITY 枝刈りは重みを疎にする 3.25 0.19 −2.11 2.15 0.11 3.01 −0.25 1.55 0.12 枝刈り 3.25 0 −2.11 2.15 0 3.01 0 1.55 0

Slide 43

Slide 43 text

43 KYOTO UNIVERSITY 枝刈りは 3 ステップからなる。ファインチューニングが重要 ◼ 枝刈りは 3 ステップからなります: 1. モデルを訓練する 2. いくつかの重みを削除する 3. モデルをファインチューニングする ファインチューニングの最中では、削除された重みは 0 に 固定される ◼ ファインチューニングが精度のために重要です。

Slide 44

Slide 44 text

44 KYOTO UNIVERSITY 強度枝刈りが最もスタンダードな方法 ◼ 枝刈りの基準はさまざまなものが提案されています。 ◼ 最も基本的なものは強度枝刈りです。 絶対値の小さな重みを枝刈ります。 つまり、|w| < ε なら w を枝刈ります。 ◼ Lasso 的な L1 正則化などを用いて、訓練中に動的に パラメータを枝刈りすることもよくやられます。

Slide 45

Slide 45 text

45 KYOTO UNIVERSITY 構造枝刈りはチャンネルやフィルタごとに枝刈りする ◼ 枝刈りの方式には二種類あります ⚫ 非構造的枝刈りは次元ごとに枝刈りします。 ⚫ 構造枝刈りはチャンネルやフィルタごとに枝刈りします。

Slide 46

Slide 46 text

46 KYOTO UNIVERSITY 畳み込み層は F x C x 3 x 3 のパラメータを持つ ◼ 3x3 畳み込み層の復習: K C x H x W F x C x 3 x 3 ∗ F x H x W チャンネル数 フィルタ数 各フィルタはチャンネルごとに重 みをもっている convolution

Slide 47

Slide 47 text

47 KYOTO UNIVERSITY フィルタ枝刈りは K[f, :, :, :] をグループとする ◼ フィルタ枝刈りは K[f, :, :, :] という形のグループを用いて 疎性を作ります。 K F x C x 3 x 3 K- F- x C x 3 x 3 フィルタ枝刈り [Wen+ NeurIPS 2016] Learning Structured Sparsity in Deep Neural Networks.

Slide 48

Slide 48 text

48 KYOTO UNIVERSITY チャンネル枝刈りは K[:, c, :, :] をグループとする ◼ チャンネル枝刈りは K[:, c, :, :] という形のグループを 用いて疎性を作ります。 K F x C x 3 x 3 K- F x C- x 3 x 3 チャンネル枝刈り [Wen+ NeurIPS 2016] Learning Structured Sparsity in Deep Neural Networks.

Slide 49

Slide 49 text

49 KYOTO UNIVERSITY 位置枝刈りは K[:, c, h, w] をグループとする ◼ 位置枝刈りは K[:, c, h, w] という形のグループを用いて 疎性を作ります。 K F x (C x 3 x 3) K- F x D 位置枝刈り [Wen+ NeurIPS 2016] Learning Structured Sparsity in Deep Neural Networks.

Slide 50

Slide 50 text

50 KYOTO UNIVERSITY 位置枝刈りをなぜするのか ◼ 位置枝刈りをするモチベーションは何でしょうか? ◼ 位置枝刈りは非構造枝刈りに近く、一見すると、これを行って も効率よく計算ができるようにならないように思えます。

Slide 51

Slide 51 text

51 KYOTO UNIVERSITY 畳み込み層は行列積により実現する ◼ 畳み込み層の詳細な流れ: K C x H x W F x C x 3 x 3 F x HW X 各位置について パッチを抽出 X’ (H x W) x (C x 3 x 3) = HW x 9C flatten K’ F x (C x 3 x 3) = F x 9C 行列積 Y’ unflatten F x H x W Y

Slide 52

Slide 52 text

52 KYOTO UNIVERSITY 位置枝刈りにより列の数を削減することができる ◼ 位置枝刈りにより列の数を削除することができます。 C x H x W F x HW X X’ (H x W) x (C x 3 x 3) = HW x 9C K- F x D Y’ unflatten F x H x W Y X’’HW x D 列を削除 各位置について パッチを抽出 行列積

Slide 53

Slide 53 text

53 KYOTO UNIVERSITY 構造枝刈りはチャンネルやフィルタごとに枝刈りする ◼ 枝刈りの方式には二種類あります(再掲) ⚫ 非構造的枝刈りは次元ごとに枝刈りします。 ⚫ 構造枝刈りはチャンネルやフィルタごとに枝刈りします。

Slide 54

Slide 54 text

54 KYOTO UNIVERSITY 非構造枝刈りは主に CPU 向け ◼ 非構造化枝刈り 細かい単位でパラメータを削り取ることで、積み重なって より高い疎性を達成することができます。 GPU 計算には向いていません。 Tensor コアではどうせ密形式で計算するので、 ところどころ 0 になったところで速度に影響しません。 主に CPU 向けの技術です。

Slide 55

Slide 55 text

55 KYOTO UNIVERSITY 構造枝刈りは GPU 向きだがあまり効果的ではない ◼ 構造枝刈り 行列のサイズが小さくなるので GPU 計算でも効きます。 もちろん CPU 計算でも効きます。 精度を守ろうと思うとほとんど枝刈りすることができません。 あるいは、フィルタやチャンネル単位で削除すると 精度は大きく下がる可能性があります。

Slide 56

Slide 56 text

56 KYOTO UNIVERSITY Ampere アーキテクチャから疎行列が採用 ◼ 朗報:今では GPU でも疎行列計算ができるようになりました ◼ 疎行列積は Ampere アーキテクチャ (A100 など) からサポートされています。 ◼ ただし、最大 50% の疎性までで、 効果は限定的です。 ▲ A100 GPU のホワイトペーパーより

Slide 57

Slide 57 text

57 KYOTO UNIVERSITY 枝刈りは回りくどい ◼ 枝刈りは周りくどいように見えます。 なぜ最初から小さい(小さくて密)なモデルを 使わないのでしょうか?

Slide 58

Slide 58 text

58 KYOTO UNIVERSITY 枝刈りは回りくどいが過パラメータのために必要 ◼ 枝刈りは周りくどいように見えます。 なぜ最初から小さいモデルを使わないのでしょうか? ◼ 深層モデルはパラメータ過多です。 ◼ パラメータ過多であることが、最適化の容易さや汎化にとって 重要であることが知られています。 宝くじ仮説や二重降下現象を参照。 ◼ 良いモデルを得るために最初の訓練ではパラメータ過多である 必要があるのですが、一度手に入るとあとは余分なパラメータを 枝刈りによって削除することができます。

Slide 59

Slide 59 text

59 KYOTO UNIVERSITY 構造枝刈りは意味がないという批判がある ◼ 構造枝刈りついての批判: ◼ 後でフィルタを消すくらいなら最初からフィルタ数をその分小さく しておいた方がよい場合もあるようなので、気を付けましょう。 [Liu+ ICLR 2019] Rethinking the Value of Network Pruning. For all state-of-the-art structured pruning algorithms we examined, fine-tuning a pruned model only gives comparable or worse performance than training that model with randomly initialized weights [Liu+ ICLR 2019]. Zhuang Liu

Slide 60

Slide 60 text

60 KYOTO UNIVERSITY 低ランク近似

Slide 61

Slide 61 text

61 KYOTO UNIVERSITY 行列 W を細長い行列 A と B で近似する W 低ランク近似 A B ×

Slide 62

Slide 62 text

62 KYOTO UNIVERSITY CNN のフィルタは低ランク構造を持っている ◼ CNN の第一層の重みは連続的で、多様性もそこまで大きくな いことが知られています (cf. Gabor filter) ◼ ゆえに、重みをまとめたテンソルは比較的低ランクでかなり精度 よく近似できます [Denton+ NeurIPS 2014, Denil+ NeurIPS 2013] [Denil+ NeurIPS 2013] Predicting Parameters in Deep Learning. [Denton+ NeurIPS 2014] Exploiting Linear Structure within Convolutional Networks for Efficient Evaluation. ▲ from AlexNet paper ImageNet Classification with Deep Convolutional Neural Networks. マスクされた値を 推測できる → パラメータは 冗長である

Slide 63

Slide 63 text

63 KYOTO UNIVERSITY アテンション計算の高速化 ◼ 続いて、アテンションの高速化を考えます。 Y Softmax Q KT V =

Slide 64

Slide 64 text

64 KYOTO UNIVERSITY アテンション行列 A の計算に時間がかかる ◼ 続いて、アテンションの高速化を考えます。 ◼ アテンション行列 A (n x n 行列)の計算に時間がかかります。 Y Softmax Q KT V = A

Slide 65

Slide 65 text

65 KYOTO UNIVERSITY アテンション行列 A はグラム行列のようだ ◼ 続いて、アテンションの高速化を考えます。 ◼ A ij はクエリ Q i とキー K j の類似度を表しています。 A はほぼグラム行列とみなすことができます。 一旦、 A はガウスカーネルのグラム行列とみなしましょう。 Y Softmax Q KT V = A

Slide 66

Slide 66 text

66 KYOTO UNIVERSITY グラム行列は効率よく近似することができる ◼ 続いて、アテンションの高速化を考えます。 ◼ グラム行列はランダム特徴量 [Rahimi+ NeurIPS 2008] や Nystrom 近似 [Williams+ NeurIPS 2000] などで高速に近似で きます。 Y Softmax Q KT V ≈ Q’ [Rahimi+ NeurIPS 2008] Random Features for Large-Scale Kernel Machines. [Williams+ NeurIPS 2000] Using the Nyström Method to Speed Up Kernel Machines. K’T Q のランダム特徴量 K のランダム特徴量

Slide 67

Slide 67 text

67 KYOTO UNIVERSITY ランダム特徴量はアテンション行列にも適用できる ◼ アテンション行列はガウスカーネルのグラム行列ではありません。 ◼ しかし、ほぼ同じテクニックがアテンション行列に適用することがで きます。 ⚫ FAVOR+ and Performers [Choromanski+ ICLR 2021] ⚫ Random Feature Attention [Peng+ ICLR 2021] [Choromanski+ ICLR 2021] Rethinking Attention with Performers. [Peng+ ICLR 2021] Random Feature Attention.

Slide 68

Slide 68 text

68 KYOTO UNIVERSITY ランダム特徴量によるアテンションは線形時間 ◼ Y = Attention(Q, K, V) の近似 1. ランダム特徴量を計算する 2. 細長い行列を掛け算する 計算量: O(n d’ (d + d’)) → n について線形 Q′ = 𝜓 𝑄 ∈ ℝ𝑛×𝑑′ 𝐾′ = 𝜓 𝐾 ∈ ℝ𝑛×𝑑′ ෠ 𝑌 = 𝑄′𝐾′⊤𝑉

Slide 69

Slide 69 text

69 KYOTO UNIVERSITY アテンションのランダム特徴量の導出 ◼ をガウスカーネルのランダム特徴量とします。 以下のように定義します。 すると、 𝜙 𝑥 ∈ ℝ𝑑 𝜙 𝑞 𝑇𝜙 𝑘 ≈ exp − q − 𝑘 2 𝜓 𝑥 = exp 𝑥 2 𝜙 𝑥 𝜓 𝑞 𝑇𝜓 𝑣 ≈ exp 𝑞𝑇𝑣 正規化されていない アテンション

Slide 70

Slide 70 text

70 KYOTO UNIVERSITY 正規化定数は線形時間で計算できる ◼ 正規化定数は Z = ෍ 𝑖 exp 𝑞𝑇𝑘𝑖 ≈ ෍ 𝑖 𝜓 𝑞 𝑇𝜓 𝑘𝑖 = 𝜓 𝑞 𝑇 ෍ 𝑖 𝜓(𝑘𝑖 ) ランダム特徴量近似 この和の計算には線形 時間かかるが、すべての クエリ q で使いまわせる → 全体で線形時間

Slide 71

Slide 71 text

71 KYOTO UNIVERSITY 効率のよいアーキテクチャ

Slide 72

Slide 72 text

72 KYOTO UNIVERSITY 従来の畳み込み層フィルタはチャンネルごとに重みをもつ ◼ 3x3 畳み込み層の復習: K C x H x W F x C x 3 x 3 ∗ F x H x W チャンネル数 フィルタ数 各フィルタはチャンネルごとに重 みをもっている convolution

Slide 73

Slide 73 text

73 KYOTO UNIVERSITY Mobilenets は空間方向とチャンネル方向に分ける ◼ MobileNets: K1 C x H x W C x 3 x 3 ∗ F x H x W d C x H x W 深さごとの 畳み込み K2 F x C x 1 x 1 ∗ 標準の 畳み込み 1/F の削減 1/9 の削減

Slide 74

Slide 74 text

74 KYOTO UNIVERSITY NAS により良いアーキテクチャを見つけることができる [Tan+ ICML 2019] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. ◼ 精度が高く、かつ高速に実行できるアーキテクチャは、 ニューラルアーキテクチャ探索 (NAS) で自動で見つけることが しばしばあります [Tan+ ICML 2019]

Slide 75

Slide 75 text

75 KYOTO UNIVERSITY FLOPs は良い評価指標ではない Irwan Bello [Bello+ NeurIPS 2021] Revisiting ResNets: Improved Training and Scaling Strategies. [Dehghani+ ICLR 2022] The Efficiency Misnomer. FLOPs is not a good indicator of latency on modern hardware. [Bello+ NeurIPS 2021] ◼ アーキテクチャの効率はしばしば FLOPs で評価されます。 ◼ 批判:

Slide 76

Slide 76 text

76 KYOTO UNIVERSITY FLOPs ではなく実時間で測るべき ◼ Tensor コアは密行列積を非常に速い時間で処理することが できます。 ◼ 複雑な近似手法は、密行列積を Tensor コアに送るナイーブ な計算よりも遅い場合がしばしばあります。 ◼ FLOPs ではなく実時間で速度は評価するべきです。

Slide 77

Slide 77 text

77 KYOTO UNIVERSITY テクニックの組み合わせ

Slide 78

Slide 78 text

78 KYOTO UNIVERSITY 異なるテクニックは組み合わせることができる ◼ 高速化の種々のテクニックは組み合わせることができます。 ◼ Deep Compression [Han+ ICLR 2016] は枝刈りと量子化を 組み合わせて高い圧縮率を達成します。 [Han+ ICLR 2016] Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding.

Slide 79

Slide 79 text

79 KYOTO UNIVERSITY 組み合わせにより効果が逓減することがある ◼ 効果が逓減する場合があることには注意が必要です。 ResNet はそもそも冗長なので、精度低下なしにある程度 圧縮するのは簡単です。 MobileNets は圧縮するのは難しいです [Jacob+ CVPR 2018]。 ◼ 「精度低下なしに〇倍圧縮しました」という主張は、元が何で あるかを吟味するのが重要です。 [Jacob+ CVPR 2018] Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference.

Slide 80

Slide 80 text

80 KYOTO UNIVERSITY まとめ

Slide 81

Slide 81 text

81 KYOTO UNIVERSITY 量子化は浮動小数点数を整数に変換 0.12 0.11 0.31 0.25 −0.14 0.19 −0.13 0.21 0.09 1 1 3 3 −1 2 −1 2 1 量子化 float32 int8 0.1 × float32

Slide 82

Slide 82 text

82 KYOTO UNIVERSITY 蒸留は大きなモデルを小さなモデルに変換する 知識蒸留 大きなモデル 小さな モデル

Slide 83

Slide 83 text

83 KYOTO UNIVERSITY 重み枝刈りは重みをいくつか消し去る 枝刈り 枝刈り

Slide 84

Slide 84 text

84 KYOTO UNIVERSITY 低ランク近似は細長い行列で近似する W 低ランク近似 A B ×

Slide 85

Slide 85 text

85 KYOTO UNIVERSITY ゴールに合わせた手法を用いましょう ◼ 高速化のテクニックにはさまざまなものがあります。 ◼ FP16 が簡単なのでまずはこれを試すのがおすすめです。 ◼ まだモデルを訓練していないのであれば、効率的なモデル (MobileNets, Performers, MoE など) は検討してもよい かもしれません。 ◼ チューニングの前に速度のゴールを設定しましょう。 ◼ 速度を FLOPs ではなく実時間で測るのは非常に重要なので 忘れないようにしましょう。