スケーラブルな TensorFlow 推論システム

Last reviewed 2023-11-02 UTC

このリファレンス アーキテクチャ シリーズでは、NVIDIA® T4 GPUTriton Inference Server を使用して、ディープ ラーニング モデル用の高性能オンライン推論システムを設計およびデプロイする方法について説明します

このアーキテクチャを使用して、ML モデルを使用し、GPU アクセラレーションを使用できるシステムを作成できます。Google Kubernetes Engine(GKE)では、クライアント数の増加に応じてシステムをスケーリングできます。このシリーズで説明する最適化手法を適用すると、スループットを改善し、システムのレイテンシを短縮できます。

このシリーズは、Google Kubernetes Engine と、TensorFlow、NVIDIA TensorRT などの機械学習(ML)フレームワークに精通しているデベロッパーを対象としています。

このシリーズには、次のドキュメントが含まれています。

アーキテクチャ

次の図は、推論システムのアーキテクチャを示しています。

推論システムのアーキテクチャ。

このアーキテクチャには次のコンポーネントが含まれています。

  • Cloud Load Balancing: クライアントに最も近い GKE クラスタにリクエスト トラフィックを送信します。

  • GKE クラスタ: クラスタノードとモニタリング サーバーが含まれます。クライアントが複数のリージョンからリクエストを送信する場合は、GKE クラスタを複数のリージョンにデプロイできます。同じクラスタに Locust 負荷テストツールをデプロイします。

  • GPU アクセラレータを使用するクラスタノード: Triton Inference Server Pod が含まれます。ノードごとに 1 つの Pod がデプロイされます(1 つの GPU を複数の Pod で共有することはできません)。

  • Triton Inference Server: 作成した ResNet-50 モデルを提供します。サーバーは HTTP または gRPC エンドポイントを介して推論サービスを提供します。推論サービスを使用すると、リモート クライアントはサーバーによって管理されている任意のモデルの推論をリクエストできます。

  • NVIDIA T4: 推論のパフォーマンスを向上させます。Pod ごとに 1 つの NVIDIA T4 が必要です。この GPU は、INT8 と FP16 の計算をサポートし、高速化する専用の処理ユニットである Tensor Core を搭載しています。

  • モニタリング サーバー: Triton から GPU 使用率とメモリ使用量の指標データを収集します。イベントのモニタリングとアラートには Prometheus を使用します。Grafana を使用して、Prometheus に保存されているパフォーマンス データを可視化して分析します。

設計上の考慮事項

次のガイドラインは、信頼性とパフォーマンスに関する組織の要件を満たすアーキテクチャを開発するために役立ちます。

信頼性

このアーキテクチャでは、スケーラビリティと柔軟なリソース管理のために GKE を使用します。

GKE にシステムをデプロイすることで、クライアントの数に応じてシステムをスケーリングできます。GKE クラスタを複数のリージョンにデプロイし、クラスタ内のノード数を増やすことができます。

パフォーマンスの最適化

パフォーマンスを調整する際は、次の一般的なガイドラインに従ってください。

  • システムのユースケースに応じて、パフォーマンス指標とターゲット パフォーマンスを定義します。
  • パフォーマンス調整を適用する前に基準となるパフォーマンスを測定します。
  • 変更を 1 つ適用して改善を確認します。複数の変更を一度に適用すると、どの変更が改善につながったかがわかりません。
  • パフォーマンス特性を理解するために適切な指標を収集し、パフォーマンス調整の次のアクションを決定します。

このガイドラインを使用して、次の要因によるパフォーマンスの向上を測定します。

  • TensorRT(グラフの最適化)。TensorRT は、NVIDIA T4 にグラフの最適化を適用します。たとえば、ディープ ラーニング モデルを自動的に変更して、Tensor Core で処理できるようにします。まず、TensorRT をベースラインとして設定せずに推論のパフォーマンスを確認します。次に、TensorRT のグラフ最適化を適用した後のパフォーマンスの改善を確認します。

  • FP16 変換。NVIDIA T4 は、浮動小数点計算で FP32(32 ビット浮動小数点)と FP16 をサポートします。変数の精度をデフォルトの FP32 から FP16 に変換することで、推論パフォーマンスを向上させることができます。

  • INT8 量子化。量子化は、GPU の計算処理を向上させるディープ ラーニング モデルの最適化手法です。NVIDIA T4 は、INT8(8 ビット整数)変数型の量子化をサポートしています。FP16 変換と比較すると、INT8 量子化ではパフォーマンスが向上しますが、精度が低下する可能性があります。ただし、TensorRT は、計算中の情報損失を最小限に抑えるキャリブレーション プロセスを使用します。

  • バッチサイズとインスタンス グループの数。バッチサイズとインスタンス グループの数は、Triton を使用することで調整できます。たとえば、バッチサイズを 16 に設定した場合、推論リクエストはバッチキューに保存され、16 件のリクエストは単一のバッチとして処理されます。同様に、インスタンス グループの数を 4 に設定した場合、複数のリクエストが 4 つのスレッドで並行して処理されます。このシナリオでは、各バッチに 16 件のリクエストがあり、4 つのスレッドが並列処理されています。つまり、1 つの GPU で 64 件のリクエストが同時に処理されます。

    インスタンス グループ数を増やすと、TensorRT による GPU の使用率が高くなります。同時に、バッチサイズを調整することで、Trinton により GPU での計算が最適化されます。たとえば、さまざまなリクエストに基づく複数の計算を Tensor Core 上の単一の計算タスクとして結合できます。

デプロイ

このアーキテクチャをデプロイするには、スケーラブルな TensorFlow 推論システムをデプロイするをご覧ください。

デプロイを測定して調整するには、TensorFlow 推論システムのパフォーマンスの測定と調整をご覧ください。

次のステップ