[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 以上がスライド全体の詳細なまとめです。何か補足や特に深掘りしたい項目があればお知らせください。