[TITECH\_DLHackathon\_NV\_202406.pdf](https://www.t4.cii.isct.ac.jp/sites/default/files/2024-06/TITECH_DLHackathon_NV_202406.pdf)o
## 1. タイトル・アジェンダ
- **タイトル**
TSUBAME4のGPUを最大限活用する方法
(Solution Architecture and Engineering, NVIDIA | June 6th 2024)
- **アジェンダ**
1. Transformer Engine 概要
2. NeMo Framework 概要
3. その他のTips
---
## 2. Transformer Engine 概要
### 2.1 NVIDIA H100の特徴
- **性能・スケーラビリティ**
- FP8: 4 PFLOPS(A100比6×)
- FP16: 2 PFLOPS(3×)、TF32: 1 PFLOPS(3×)
- 60 TFLOPS FP64(3.4×)、HBM3 80 GB(TSUBAME4実機は94 GB HBM2e)
- **インターコネクト**
- NVLink 4th Gen:GPU間帯域 900 GB/s(1.5×)
- PCIe Gen5:128 GB/s
- **セキュリティ・仮想化**
- 2nd Gen MIG/Confidential Computing
- 7つの完全分離インスタンス/QoS保証
### 2.2 FP8のメリットと運用
- **FP8 Tensor Core**
- 8bit GEMM:FP16の2倍スループット
- 2:4スパース時は64×のFFMA
- 4種のFP8フォーマット(E4M3×E4M3、E5M2×E5M2、E4M3×E5M2、E5M2×E4M3)
- 出力はFP16/FP32にキャスト
- **Mixed Precisionの違い**
- FP16:単一スケーリングファクタ(Overflow/Underflow時更新)
- FP8:テンソルごとにスケーリングファクタを持ち、前後パスともに必要
- E4M3をforward、E5M2をbackwardに使用
### 2.3 Transformer Engineライブラリ
- **概要**
- オープンソース(PyTorch/JAX/PaddlePaddle)
- FP8最適化演算子と各種Parallelism対応
- **主なモジュール**
- `te.Linear`, `te.LayerNorm`, `te.DotProductAttention`, `te.MultiHeadAttention`, `te.TransformerLayer` など
- **FP8 autocast**
- `with te.fp8_autocast(enabled=True, fp8_recipe=…)` でFP8モードに切り替え
- mixed‑precision組み合わせ時はFrameworkのAMPと併用
- **既存モデル適用法**
- `nn.Linear`→`te.Linear`、`nn.LayerNorm`→`te.LayerNorm` の1:1置換
- 状態辞書(`state_dict`)を保ったまま置き換え可能
- **サードパーティ連携**
- Huggingface Accelerate / PyTorch Lightningで自動変換・autocast
- **Megatron‑Core/NeMoでの適用**
- YAML/CLIフラグで `model.transformer_engine=True, model.fp8=True` を設定するだけ
### 2.4 パフォーマンス向上Tips
- マスターウェイトがFP32の場合、必ずFP16/BF16と組み合わせる
- Denseレイヤ(特にトークン分類層)も`te.Linear`化
- 語彙サイズは16の倍数にするとFP8 Tensor Coreが動作
- 勾配蓄積時、FP8のスケーリング更新は最初のイテレーションのみ
- 推論でのFP8利用:
1. PyTorch+TransformerEngine(学習中の評価向け)
2. ONNX→TensorRTエクスポート
3. TensorRT‑LLM/NIM‑LLM(Post‑Training Quantization内蔵)
### 2.5 性能結果・参考リンク
- **GPT‑3モデル:** H100 FP8 vs A100 FP16/BF16 (8ノード×64GPU)
- **精度影響:** 多くのケースで16bitと大差なし
- **Useful Links:**
- GitHub: github.com/NVIDIA/TransformerEngine
- Docs: docs.nvidia.com/.../transformer-engine
- GTCセッション(FP8関連、GTC23/24)
---
## 3. NeMo Framework 概要
### 3.1 全体像
![[Pasted image 20250417235619.png]]
- NVIDIAのエンドツーエンド生成AIフレームワーク
- **主要コンポーネント**
- **NeMo Curator:** 大規模データキュレーション
- **Megatron Core:** 分散学習エンジン
- **NeMo Aligner, Retriever, Guardrails:** モデル調整・展開支援
- ![[Pasted image 20250417235657.png]]
- **展開環境**
- SLURM, Nephele, Kubernetes 対応
- NVIDIA DGX Cloud/SuperPOD, オンプレ
### 3.2 インストール・コンテナ
- **NGCコンテナ**
- `docker pull nvcr.io/nvidia/nemo:24.05`
- **ソース/PyPI**
- `apt-get install libsndfile1 ffmpeg; pip install Cython; pip install nemo_toolkit['all']`
### 3.3 特徴・機能
- **分散学習**
- Data / FSDP / Tensor / Pipeline / Sequence / Expert / Context Parallelism
- **自動コンフィギュレータ**
- **カスタマイズ手法**
- PEFT, SFT, RLHF, DPO, SteerLM など
- **モダリティ対応**
- LLM, マルチモーダル(text2image, VLM), 音声
---
## 4. その他のTips
### 4.1 データキュレーション(NeMo Curator)
1. ダウンロード→言語検出→テキスト抽出(HTML/LaTeX)
2. 再フォーマット・クリーニング
3. ドキュメントレベル重複排除(ファジー/正確)
4. 品質フィルタリング(クラシファイア/ヒューリスティック)
5. タスク重複排除
### 4.2 分散学習の深掘り
![[Pasted image 20250417235836.png]]
- **Tensor Parallelism:** レイヤー内分割(NVLink推奨)
- **Pipeline Parallelism:** レイヤー連続分割(バブル削減にInterleaved方式)
- **Sequence Parallelism:** シーケンス次元分割でactivationメモリ削減
- **Activation Recomputation:** 全/選択的再計算
- **ZeRO:** GPU間で勾配・パラメータ・オプティマイザ状態を分散
- **Offloading:** CPUメモリ活用によるGPUメモリ節約
### 4.3 巨大モデル事例
- **LLMパラメータ推移:** LLaMA, Mistral, Mixtral, GPT‑3など
- **Pretraining要件比較:** トークン数・GPU時間・ノード数
- **MT‑NLG 530B:** 4,480 GPU × A100 クラスタでモデル並列 × データ並列
### 4.4 モデルカスタマイズ技術
- **Prompt Engineering → Prompt Learning → PEFT → Fine‑Tuning** の投資と効果比較
- **Prompt Tuning vs P‑Tuning:**
- 埋め込み更新 vs LSTM予測プロンプト
- **Adapter系:** Adapter, LoRA, IA3
- **SFT(Instruction Tuning)** / **RLHF** / **SteerLM**
- **NeMoでの実行リンク集**
### 4.5 TSUBAME4 GPUデバッグ
- **nvidia‑smiモニタ:**
```bash
nvidia-smi --query-gpu=timestamp,temperature.gpu,utilization.gpu,... --format=csv -l 1 > nvidiasmi.log &
```
- **torchrunサンプル:**
```bash
torchrun --nnodes 1 --nproc_per_node 2 examples/.../multigpu_torchrun.py
```
### 4.6 コンテナ活用(NGC)
- 再現性向上、依存関係管理
- Enterprise向け定期アップデート・SLAサポート
- Docker/cri-o/containerd/Singularity対応
### 4.7 プロファイラ/可視化ツール
- **Nsight Systems:** システム全体プロファイラ
- **NVTX:** コード内注釈でタイムライン可視化
- **DeepStream SDK:** GStreamerプラグイン等
- **wandbインテグレーション:**
```yaml
exp_manager.create_wandb_logger=True
```
- **Megatron Timer:** 各処理時間の詳細ログ
![[Pasted image 20250418000201.png]]
---
### 5. 参考リンク(Appendix)
- NVIDIA Transformer Engine / NeMo / Megatron‑LM GitHub & ドキュメント
- GTCセッション
- NGC Catalog
以上がスライド全体の詳細なまとめです。何か補足や特に深掘りしたい項目があればお知らせください。