書籍概要

ML Systems

実践的パフォーマンスエンジニアリングによるAI高速化

著者
発売日
更新日

概要

LLM をはじめとする生成AI の台頭により,パフォーマンスエンジニアリング (Performance Engineering)が再び注目されています。パフォーマンスエンジニアリングとは,コンピューターシステムやソフトウェアのパフォーマンス(処理性能)を改善するために必要な技術を扱う総合分野です。近年のAI は,「モデルの規模を大きくすることで精度が良くなる傾向がある」という考え方が主流になりつつあり,大規模なモデルを扱えなければ最新のAI 分野についていくことが難しくなっています。そこで,本書では,パフォーマンスエンジニアリングを用いてAI の処理性能を改善し,処理時間を削減するための技術を取りまとめました。前半ではパフォーマンスエンジニアリングの理論や技法を網羅的に解説し,後半では大規模AI の代表格であるLLM を中心とした題材を通して,具体的にどのようにパフォーマンスエンジニアリングを実際のAI に適用できるのかを紹介します。本書を読み通すことで,これまで体系的に説明されてこなかったパフォーマンスエンジニアリングを理解し,AI 時代に必要な知識と技法を習得できます。

こんな方におすすめ

  • AI/LLMモデルを使ったサービスの提供を考えている方

目次

第1章 パフォーマンスエンジニアリング概論

1.1 パフォーマンスエンジニアリングとは

1.2 なぜ今パフォーマンスエンジニアリングか

1.3 AI 処理の概要

  • 1.3.1 AI モデルとは
  • 1.3.2 Llama3
  • 1.3.3 BEVFusion
  • 1.3.4 学習と推論

1.4 ハードウェア環境の概要

1.5 パフォーマンスエンジニアリングの実践方法

  • 1.5.1 推測するな,計測せよ
  • 1.5.2 体系的な分析手法:USE メソッドとRED メソッド
  • 1.5.3 5 段階の実践プロセス
  • 1.5.4 継続的パフォーマンスエンジニアリング
  • 1.5.5 組織にパフォーマンス文化を根付かせる

1.6 本書の構成

第2章 まずはパフォーマンスを計測する

2.1 計測とは

2.2 計測の基本戦略

  • 2.2.1 目的を定める
  • 2.2.2 対象の絞り込み
  • 2.2.3 理論性能と実効性能の差の把握
  • 2.2.4 チェックリスト

2.3 計測のための基礎知識

  • 2.3.1 ハードウェアの動作モデル
  • 2.3.2 性能指標の種類
  • 2.3.3 性能指標の取り扱い
  • 2.3.4 性能のモデル化
  • 2.3.5 仮説駆動の計測
  • 2.3.6 計測における観測者効果

2.4 計測の実践

  • 2.4.1 正しさの検証
  • 2.4.2 タイマーによる時間計測
  • 2.4.3 NVIDIA Nsight Systems
  • 2.4.4 NVIDIA Nsight Compute
  • 2.4.5 PyTorch Profiler

2.5 まとめ

第3章 次にパフォーマンスを改善する

3.1 どこから着手するか

  • 3.1.1 効果の高いところから
  • 3.1.2 優先順位の見極め

3.2 アプリケーション・データ層の改善

  • 3.2.1 適切なモデル
  • 3.2.2 高品質なデータ
  • 3.2.3 目的達成に最適な処理方法
  • 3.2.4 最適なAI 処理フレームワーク
  • 3.2.5 MLOps を構築して持続的な性能維持

3.3 モデル・アルゴリズム層の改善

  • 3.3.1 モデル改善
  • 3.3.2 アルゴリズム改善

3.4 ソフトウェア・フレームワーク層の改善

  • 3.4.1 集団通信手法の選定
  • 3.4.2 複数台による処理:分散並列
  • 3.4.3 メモリ余地の捻出
  • 3.4.4 演算とそれ以外の同時実行
  • 3.4.5 連続的なデータアクセス:テンソルの次元の順番
  • 3.4.6 処理の固定:深層学習コンパイラ
  • 3.4.7 特定のモデルに特化した高速ライブラリの利用

3.5 ハードウェア・カーネル層の改善

  • 3.5.1 ハードウェアの特性に合わせた調整
  • 3.5.2 カスタムカーネルによる演算コードの改善
  • 3.5.3 ハードウェアの変更

3.6 まとめ

第4章 実践1:LLM 推論

4.1 問題設定

  • 4.1.1 計測の対象
  • 4.1.2 ベンチマークスクリプトの作成
  • 4.1.3 本章の構成

4.2 ベースラインの計測

  • 4.2.1 ベースラインの実行
  • 4.2.2 理論限界スループットとの比較
  • 4.2.3 PyTorch Profiler による分析

4.3 パフォーマンス改善の実践

  • 4.3.1 改善策の実施と分析
  • 4.3.2 性能の最大化:GPU 計算負荷の増加
  • 4.3.3 メモリ使用量の削減:重みの量子化(Quantization)
  • 4.3.4 バッチサイズの増加
  • 4.3.5 モデルサイズの増加と投機的デコーディング

4.4 さらなる高みへ:推論エンジンと高度な技術

  • 4.4.1 vLLM:高スループット推論エンジンの仕組み
  • 4.4.2 vLLM によるベンチマーク結果
  • 4.4.3 量子化による精度の補足

4.5 まとめ

第5章 実践2:LLM 事後学習

5.1 問題設定

  • 5.1.1 環境構築

5.2 計測

  • 5.2.1 学習時間とLoss 値の確認
  • 5.2.2 NVIDIA Nsight Systems によるプロファイリング
  • 5.2.3 PyTorch Profiler によるプロファイリング

5.3 パフォーマンス改善手法の考察

5.4 精度に影響のないパフォーマンス改善

  • 5.4.1 MemoryCallback の削除
  • 5.4.2 ハイパーパラメータチューニング
  • 5.4.3 Torch Compile の適用

5.5 精度に影響のあるパフォーマンス改善

  • 5.5.1 グローバルバッチサイズの調整

5.6 まとめ

第6章 実践3:LLM(継続)事前学習

6.1 問題設定

  • 6.1.1 概要
  • 6.1.2 LLM 学習処理のおさらい

6.2 評価基準の決定

6.3 観測と改善の繰り返し

  • 6.3.1 初期問題の発見
  • 6.3.2 最適化器の変更
  • 6.3.3 プロファイリングで次の改善点を探す
  • 6.3.4 ハイパーパラメータの調整
  • 6.3.5 ハイパーパラメータチューニングの効果の確認
  • 6.3.6 ハイパーパラメータの知見と影響の考察

6.4 まとめ

第7章 実践4:自動運転AI 学習

7.1 問題設定

7.2 プロファイルの設定

7.3 データローダーの分析

  • 7.3.1 ログの確認によるデータローダー性能の評価
  • 7.3.2 nsys によるデータローダーのプロファイリング

7.4 train プロセスの分析

7.5 Voxelize の分析と改善

7.6 TransFusionHead のget_targets の分析と改善

7.7 DepthLSSTransform の分析と改善

  • 7.7.1 matmul の高速化
  • 7.7.2 CPU 律速の改善

7.8 まとめ

第8章 実践5:自動運転AI 推論

8.1 問題設定

  • 8.1.1 題材デバイス
  • 8.1.2 題材モデル
  • 8.1.3 使用ツールのバージョン
  • 8.1.4 本章の構成

8.2 エッジデバイスへのデプロイの基本

  • 8.2.1 高速なアクセラレータ・ランタイムエンジンの活用
  • 8.2.2 カスタム実装
  • 8.2.3 補足:モデルの修正

8.3 量子化適用の留意点

  • 8.3.1 量子化の適用ステージ
  • 8.3.2 混合精度量子化の留意点
  • 8.3.3 キャリブレーション手法
  • 8.3.4 対称量子化と非対称量子化

8.4 BEVFusion のデバイスへのデプロイ

8.5 CUDA-BEVFusion の更なる高速化(概要)

  • 8.5.1 計測

8.6 CUDA-BEVFusion の更なる高速化(詳細)

  • 8.6.1 Camera Backbone の改善
  • 8.6.2 画像データの転送部の改善

8.7 まとめ

サポート

現在サポート情報はありません。

商品一覧