NVIDIA Hopperアーキテクチャ簡易まとめ　その1 

情報(と頭の)整理を兼ねて、先日、3月21日から行われた[GTC22](https://www.nvidia.com/ja-jp/gtc/)で発表された、NVIDIA Hopperアーキテクチャについて纏めていこうと思います。
なお、本投稿はNVIDIA H100 のWhitepaperの内容をすべて完璧に網羅するというよりは、そこからエッセンスを抽出し個人的な備忘録として纏めたものになります。typo等はご容赦下さい。

# はじめに
本ブログの元情報は以下にありますので、この簡易まとめをみてご興味持たれた方はぜひ本家をご確認下さい。
(注:2と3のリンクはGTCに登録された方のみ閲覧可能です。暫くするとどなたでも見れるようになるようです)

1. [NVIDIA Hopper Architecture In-Depth](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)
2. [GTC S41489 Optimizing CUDA Applications for NVIDIA Hopper Architecture](https://reg.rainfocus.com/flow/nvidia/gtcspring2022/aplive/page/ap/session/16373134932300012k2M)
3. [GTC S42663 Inside the NVIDIA Hopper Architecture](https://reg.rainfocus.com/flow/nvidia/gtcspring2022/aplive/page/ap/session/1644354440262001BZNv)

# NVIDIA H100 GPU 概要
## AIとHPCの為の次世代GPU
NVIDIA H100は、大規模AIおよびHPCの為の前世代のA100と比較し飛躍的な性能向上を遂げた第9世代のデータセンターGPUです。[NVIDIA Hopper Architecture In-Depthブログ](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)では、現在主流のAIやHPCワークロードにおいて、Infinibandインターコネクトを搭載したH100は1つ前の世代のA100と比較した際に最大30倍の性能が出る。また後述のNVLink Swichインターコネクトを組み合わせた場合、更に3倍性能が向上する可能性があると述べられています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125731/0c0c30e6-4251-7bc1-3200-724d0be30067.png "H100 enables next-generation AI and HPC breakthroughs")
<font color="Green">図1: H100 enables next-generation AI and HPC breakthroughs
※[NVIDIA Hopper Architecture In-Depth](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)より引用</font>

[GTC S42663 Inside the NVIDIA Hopper Architecture](https://reg.rainfocus.com/flow/nvidia/gtcspring2022/aplive/page/ap/session/1644354440262001BZNv)のセッション冒頭でMichael Andersch氏は以下のようにコメントしています。(聞き取りミスはご容赦下さい)
> Modern accelerated computing is rarely about one individual GPU anymore. Instead, the most demanding applications today require 100s, sometimes 1000s of GPUs to execute. And each of those GPUs in turn may contain hundreds of individual processors. So designing these hierarchical systems and enabling programmers to harness thesir performance requires a fundamental shift in how we build these machines and express our programs.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125731/cff43372-b622-1dc1-45aa-ced6e1bcfc62.png)
<font color="Green">図3: Features for outstanding performance, scalability and data center security
※[GTC S42663 Inside the NVIDIA Hopper Architecture](https://reg.rainfocus.com/flow/nvidia/gtcspring2022/aplive/page/ap/session/1644354440262001BZNv)より引用</font>

現在主流のAIやHPCワークロードでは、数100場合によっては数1000のGPUが必要であり、それらのGPUには個別に多数のプロセッサが搭載されている。このような階層システムでプログラマがパフォーマンスを引き出す為には、マシンの構築方法、およびプログラミングモデルそのものを根本的に変える必要があると述べており、「Hopper SM」「Hierarchy」「Asynchrony」「SuperPods」「Cloud Computing」と大きく5つに分けて説明していく事が最初に言及されています。
NVIDIA H100はGPU単体の性能は勿論の事、数1000ものGPUを必要とするワークロードでのスケーリングについても意識して設計されています。

まず5つの項目を細かく見る前に、NVIDIA H100 GPUの全体像・概要を確認していこうと思います。

## NVIDIA H100 GPU の主要機能 
H100の主要機能を以下に列挙します。前節で説明した通り、GPU単体の性能に関係する機能は勿論の事、マルチノードマルチGPU環境でのスケーリングに関係する機能やコンフィデンシャルコンピューティングに関係する機能追加もありますね。
- **SMの性能・効率性の向上**
- **Transformer Engineの搭載**
    - 新しくTransformerモデルの学習と推論を高速化する機構が追加されました
- **HBM3メモリの採用**
    - 前世代に比べ約2倍の帯域幅を実現。3TB/秒のメモリバンド幅を実現できます。
- **50MBのL2キャッシュを搭載**
    - L2キャッシュサイズが前世代(A100)から更に大きくなりました。
- **第2世代のMIGテクノロジー**
    - 第1世代のMIGと比較して、GPUインスタンスあたり約3倍の計算能力と約2倍のメモリ帯域幅を提供します。MIGレベルのTEE(trusted execution environment)の機能が初めて提供されます。
- **コンフィデンシャル・コンピューティングのサポート**
    - ユーザーデータの保護、ハードウェアおよびソフトウェア攻撃からの防御、仮想化およびMIG環境における仮想マシン（VM）の相互分離と保護がより強化されます。
- **第4世代のNVLink**
    - 900 GB/秒の総バンド幅。
- **第3世代のNVSwitch**
    - 前世代の7.2 Tbits/secから13.6 Tbits/secに向上。
- **NVLINK Switchインターコネクトテクノロジー**
- **PCIe gen5の採用**
    - gen4と比べて、2倍の帯域を実現。総帯域幅が128GB/秒（各方向64GB/秒）になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125731/04d57af8-61e2-2dee-faf0-d8ff50707f95.png)
<font color="Green">図2: HOPPER H100 TENSOR CORE GPU
※[GTC S42663 Inside the NVIDIA Hopper Architecture](https://reg.rainfocus.com/flow/nvidia/gtcspring2022/aplive/page/ap/session/1644354440262001BZNv)より引用</font>

## NVIDIA H100 GPU アーキテクチャ
TSMC 4Nプロセスを採用したH100は、TSMC 7nm N7 プロセスを採用した前世代の GA100 GPU と比較して、GPU コア周波数の向上、ワット当たりの性能向上、GPC、TPC、SM の搭載を実現しました。
図 3 は、144 個の SM を搭載した「完全版GH100 GPU」を示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125731/0a42b0c1-4250-5fea-1dbf-4c5e2fd0f9c0.png)
<font color="Green">図3: GH100 Full GPU with 144 SMs
※[NVIDIA Hopper Architecture In-Depth](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)より引用</font>

H100は「完全版GH100 GPU」以外に「NVIDIA H100 SXM5 GPU」と「NVIDIA H100 PCIgen5 GPU」が存在し、それぞれSM数やメモリなどのスペックが若干異なるとの事です。
[NVIDIA A100発表時](https://developer.nvidia.com/blog/nvidia-ampere-architecture-in-depth/)にも、「full implementation of the GA100 GPU」と「A100 Tensor Core GPU implementation of the GA100 GPU」が存在し、スペックは異なるという説明がありましたが、NVIDIA H100も同じのようです。
||full implementation of the GH100 GPU|NVIDIA H100 GPU with SXM5|NVIDIA H100 GPU with a PCIe Gen 5|
|--:|--:|--:|--:|
|GPC数|8|8|7 or 8|
|TPC数|72|66|57|
|SM数|144|132|114|
|FP32 CUDA Cores per SM|128|128|128|
|FP32 CUDA Cores per GPU|18432|16896|14592|
|TensorCore per GPU|576|528|456|
|メモリ|6 HBM3 or HBM2e stacks, 12 512-bit memory controllers|80 GB HBM3, 5 HBM3 stacks, 10 512-bit memory controllers|80 GB HBM2e, 5 HBM2e stacks, 10 512-bit memory controllers|
|L2キャッシュ|60 MB|50 MB|50 MB|

<font color="Green">表1: GH100 Full GPU/NVIDIA H100 SXM5 GPU/NVIDIA H100 PCIe Gen5 GPUの比較
※[NVIDIA Hopper Architecture In-Depth](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)より引用</font>

## Compute Capability (別の世代との比較)

### 性能比較
次に異なるCompute CapabilityのGPUと比較しながら、NVIDIA H100の理論性能をを見てみます。
NVIDIA H100のTensorCoreはTF32、FP16に加えて、新しくFP8がサポートされています。(FP8の詳細については別途触れようと思います)
また倍精度、単精度共に前世代のA100に比べて性能が大幅に向上しています。

||NVIDIA A100|NVIDIA H100 SXM5|NVIDIA H100 PCIe|
|--:|--:|--:|--:|
|Peak FP64[^1]|9.7 TFLOPS[^3]|30 TFLOPS|24 TFLOPS|
|Peak FP64 Tensor Core[^1]|19.5 TFLOPS[^3]|60 TFLOPS|48 TFLOPS|
|Peak FP32[^1]|19.5 TFLOPS[^3]|60 TFLOPS|48 TFLOPS|
|Peak FP16[^1]|78 TFLOPS[^3]|120 TFLOPS|96 TFLOPS|
|Peak BF16[^1]|39 TFLOPS[^3]|120 TFLOPS|96 TFLOPS|
|Peak TF32 Tensor Core[^1]|156 TFLOPS/312 TFLOPS[^3]|500 TFLOPS/1000 TFLOPS[^2]|400 TFLOPS/800 TFLOPS[^2]|
|Peak FP16 Tensor Core[^1]|312 TFLOPS/624 TFLOPS[^3]|1000 TFLOPS/2000 TFLOPS[^2]|800 TFLOPS/1600 TFLOPS[^2]|
|Peak BF16 Tensor Core[^1]|312 TFLOPS/624 TFLOPS[^3]|1000 TFLOPS/2000 TFLOPS[^2]|800 TFLOPS/1600 TFLOPS[^2]|
|Peak FP8 Tensor Core[^1]|-|2000 TFLOPS/4000 TFLOPS[^2]|1600 TFLOPS/3200 TFLOPS[^2]|
|Peak INT8 Tensor Core[^1]|624 TOPS/1,248 TOPS[^3]|2000 TOPS/4000 TOPS[^2]|1600 TOPS/3200 TOPS[^2]|

<font color="Green">表2: GPU preliminary performance specs: V100 vs. A100 vs. H100
※[NVIDIA Hopper Architecture In-Depth](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)より引用</font>

[^1]:Preliminary performance estimates for H100 based on current expectations and subject to change in the shipping products
[^2]:Effective TFLOPS / TOPS using the Sparsity feature
[^3]:A100 Tensor Core GPU's peak rates are based on the GPU boost clock.


### スペックの比較
次に異なるCompute CapabilityのGPUと比較しながら、NVIDIA H100のスペックを見てみます。
NVIDIA H100のCompute Capabilityは9.0です。SMあたりの最大スレッド数は2048であり、A100やV100と同じです。SM辺りのレジスタ数も65536で前世代と変わりません。
数字を眺めていて変化があるのは、SM辺りのFP32コア数です。V100, A100が、64 FP32コア/SM だったのに対して、H100は128 FP32コア/SM とSMあたりのFP32コアの数が2倍に増えています。SM辺りのレジスタ数は変わっていない為、必然的に1 FP32コアあたり使用可能なレジスタ数は1/2になっている所にご注意下さい。
またSMあたりのシェアードメモリのサイズはH100で228KBになり、約1.4倍に増加しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125731/fe6d1cec-fecc-eac2-66ae-4390fb1ab751.png)
<font color="Green">表3: Compute capability: V100 vs. A100 vs. H100
※[NVIDIA Hopper Architecture In-Depth](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)より引用</font>

長くなったので、この辺りで一度記事を切りたいと思います。