最適化された TensorFlow ランタイムは、オープンソース ベースのビルド済み TensorFlow Serving コンテナよりも高速かつ低コストの推論を行えるよう、モデルを最適化します。最適化された TensorFlow ランタイムは、Google 独自のオープンソース テクノロジーを活用して、この動作を行います。
ML モデルが大きいほど、この動作のコストは高くなります。最適化された TensorFlow ランタイムを使用すると、オープンソース ベースの TensorFlow ランタイムを使用する場合よりも、ML モデルを処理するコストを低減し、推論を高速に行うことができます。Vertex AI Prediction を使用するときは、コードの変更なしに、最適化された TensorFlow ランタイムを活用できます。その代わりに、ランタイムを使用するサービング コンテナのイメージを選択します。
最適化された TensorFlow ランタイムは、ビルド済みの TensorFlow サービング コンテナと下位互換性があります。ビルド済みコンテナで TensorFlow モデルを実行している場合は、最小限の労力で、最適化された TensorFlow ランタイム コンテナに切り替えることができます。
最適化された TensorFlow ランタイムを使用すると、モデルのパフォーマンスが向上しますが、モデルによってパフォーマンスへの影響が異なる場合があります。
最適化された TensorFlow ランタイムの概要
オープンソース ベースのビルド済み TensorFlow サービング コンテナと比べると、最適化された TensorFlow ランタイムは、モデル最適化と新しい独自の Google テクノロジーを使用し、高速化と推論コストの削減を実現しています。
最適化は、Vertex AI がモデルをアップロードするとき、実行前に行われます。エンドポイントにモデルをデプロイすると、最適化ログが予測ログに追加されます。これらのログを使用して、最適化時に発生する可能性のある問題のトラブルシューティングを行うことができます。
以後のトピックでは、最適化された TensorFlow ランタイムでの最適化の改善について説明します。
モデルの最適化
最適化された TensorFlow ランタイムは、次の 3 つのモデル最適化が行われています。
モデルの XLA プリコンパイル
TensorFlow モデルを実行すると、すべての動作が個別に行われます。動作を個別に行うと、多少のオーバーヘッドが発生します。最適化された TensorFlow ランタイムは、XLA を利用して TensorFlow グラフの全体または一部をより大きなカーネルにプリコンパイルすることで、このオーバーヘッドの一部を解消できます。
モデルの XLA プリコンパイルはオプションで、デフォルトでは無効になっています。デプロイ時にモデルの XLA プリコンパイルを有効にする方法については、モデルの XLA プリコンパイルを有効にするをご覧ください。
モデル圧縮の最適化
最適化された TensorFlow ランタイムでは、モデル圧縮の最適化を有効にすると、モデルの精度にほとんど影響なしに、一部のモデルを高速に実行できます。モデル圧縮の最適化を有効にすると、最適化された TensorFlow ランタイムは、量子化や重みの枝刈りなどの手法を利用して、モデルを高速に実行します。
モデル圧縮の最適化機能は、デフォルトでは無効です。デプロイ中にモデル圧縮の最適化を有効にする方法については、モデル圧縮の最適化を有効にするをご覧ください。
GPU での表形式モデルのパフォーマンスの改善
TensorFlow の表形式モデルはアクセラレータを有効に活用できないため、通常は CPU で処理されます。最適化された TensorFlow ランタイムでは、この問題を解決するため、モデルの計算コストが高い部分を GPU で実行します。モデルの残りの部分は、ホストとアクセラレータとの間の通信を最小限に抑えて、CPU で実行されます。モデルの高コストな部分を GPU で実行し、残りを CPU で実行することで、表形式モデルが高速に処理され、コストも削減されます。
最適化された TensorFlow ランタイムは、表形式の次のモデルタイプの処理を最適化します。
Cloud TPU のモデルの自動最適化
Cloud TPU をサポートする、ビルド済みの最適化された TensorFlow ランタイム コンテナは、TPU で実行するモデルを自動的に分割して最適化できます。詳細については、Cloud TPU にデプロイするをご覧ください。
TensorFlow ランタイム(TFRT)の使用
最適化された TensorFlow ランタイムは、TensorFlow ランタイム(TFRT)を使用できます。TFRT は、マルチスレッドのホスト CPU を効率的に使用し、非同期プログラミング モデルをサポートします。また、低レベルの処理を効率化するよう最適化されています。
TFRT CPU は、バージョン 2.8 を除くすべての最適化された TensorFlow ランタイム CPU コンテナ イメージで有効です。TFRT CPU を無効にするには、use_tfrt
フラグを false
に設定します。
TFRT GPU は、ナイトリー版の最適化された TensorFlow ランタイム GPU コンテナ イメージ、および安定版の最適化された TensorFlow ランタイム GPU コンテナ イメージのバージョン 2.13 およびそれ以降で使用できます。TFRT GPU を有効にするには、use_tfrt
フラグと allow_precompilation
フラグを true
に設定します。GPU コンテナ イメージに TFRT を使用すると、ホスト CPU と GPU 間のデータ転送オーバーヘッドが最小限に抑えられます。TFRT を有効にすると、XLA コンパイルと連携して動作します。XLA プリコンパイルが有効になっているため、最初のリクエストでレイテンシが増加するなどの副作用が発生することがあります。詳細については、モデルの XLA プリコンパイルを有効にするをご覧ください。
Google ランタイムの使用
最適化された TensorFlow ランタイムは Google の内部スタックを使用して構築されているため、Google 独自のランタイム環境を使用して実行できます。
最適化された TensorFlow ランタイム コンテナ イメージ
Vertex AI Prediction では、安定版とナイトリー版という 2 種類の最適化された TensorFlow ランタイム コンテナ イメージが用意されています。
安定版のコンテナ イメージ
安定板の最適化された TensorFlow ランタイム コンテナは、オープンソース ベースのビルド済み TensorFlow サービング コンテナと同様に、特定の TensorFlow バージョンにバインドされています。特定のバージョンにバインドされた最適化された TensorFlow ランタイム コンテナは、同じバージョンにバインドされているオープンソース ビルドと同じ期間にわたって保守されます。最適化された TensorFlow ランタイム ビルドは、オープンソースの TensorFlow ビルドと同じ特性を備えていますが、推論が高速化されています。
ビルドには下位互換性があります。つまり、古い TensorFlow バージョンでトレーニングされたモデルも最新のコンテナで実行できます。新しいコンテナのほうが古いコンテナよりもパフォーマンスが優れています。まれに、古い TensorFlow バージョンでトレーニングされたモデルが新しいコンテナで動作しないことがあります。
ナイトリー版のコンテナ イメージ
ナイトリー版の最適化された TensorFlow ランタイム ビルドは、最新の改善と最適化が含まれていますが、安定版のビルドより信頼性が劣ることがあります。これらは主に試験運用版に使用されます。暫定版ビルドには nightly
というラベルが含まれます。安定したコンテナ イメージとは異なり、ナイトリー版のコンテナは Vertex AI サービスレベル契約(SLA)の対象外です。
使用可能なコンテナ イメージ
次に示す安定版またはナイトリー版の最適化された TensorFlow ランタイム Docker コンテナ イメージを利用できます。
ML フレームワークのバージョン | サポートされているアクセラレータ(該当する場合は CUDA のバージョン) | パッチとサポート終了日 | 有効期間の終了 | サポートされているイメージ |
---|---|---|---|---|
ナイトリー | CPU のみ | 該当なし | 該当なし |
|
ナイトリー | GPU(CUDA 12.x) | 該当なし | 該当なし |
|
ナイトリー | Cloud TPU | 該当なし | 該当なし |
|
2.16 | CPU のみ | 2024 年 4 月 26 日 | 2025 年 4 月 26 日 |
|
2.16 | GPU(CUDA 12.x) | 2024 年 4 月 26 日 | 2025 年 4 月 26 日 |
|
2.16 | Cloud TPU | 2024 年 4 月 26 日 | 2025 年 4 月 26 日 |
|
2.15 | CPU のみ | 2024 年 8 月 15 日 | 2025 年 8 月 15 日 |
|
2.15 | GPU(CUDA 12.x) | 2024 年 8 月 15 日 | 2025 年 8 月 15 日 |
|
2.15 | Cloud TPU | 2024 年 8 月 15 日 | 2025 年 8 月 15 日 |
|
2.14 | CPU のみ | 2024 年 8 月 15 日 | 2025 年 8 月 15 日 |
|
2.14 | GPU(CUDA 12.x) | 2024 年 8 月 15 日 | 2025 年 8 月 15 日 |
|
2.13 | CPU のみ | 2024 年 8 月 15 日 | 2025 年 8 月 15 日 |
|
2.13 | GPU(CUDA 11.x) | 2024 年 8 月 15 日 | 2025 年 8 月 15 日 |
|
2.12 | CPU のみ | 2024 年 5 月 15 日 | 2025 年 5 月 15 日 |
|
2.12 | GPU(CUDA 11.x) | 2024 年 5 月 15 日 | 2025 年 5 月 15 日 |
|
2.11 | CPU のみ | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
2.11 | GPU(CUDA 11.x) | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
2.10 | CPU のみ | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
2.10 | GPU(CUDA 11.x) | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
2.9 | CPU のみ | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
2.9 | GPU(CUDA 11.x) | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
2.8 | CPU のみ | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
2.8 | GPU(CUDA 11.x) | 2023 年 11 月 15 日 | 2024 年 11 月 15 日 |
|
最適化された TensorFlow ランタイムをプライベート エンドポイントで使用する
プライベート エンドポイントを使用して Vertex AI でオンライン予測を処理すると、公開エンドポイントを使用する場合よりも安全かつ低レイテンシで Vertex AI Online Prediction サービスと接続できます。最適化された TensorFlow ランタイムでは、レイテンシの影響を受けやすいモデルを処理する可能性が高いため、プライベート エンドポイントでの使用を検討してください。詳細については、オンライン予測にプライベート エンドポイントを使用するをご覧ください。
最適化された TensorFlow ランタイムを使用してモデルをデプロイする
最適化された TensorFlow ランタイムを使用して予測用のモデルをデプロイするプロセスは、オープンソース ベースのビルド済み TensorFlow サービング コンテナを使用してモデルをデプロイする場合とほぼ同じです。唯一の違いは、モデルの作成時に、最適化された TensorFlow ランタイムを使用するコンテナ イメージを指定し、このトピックの前半で説明した最適化フラグを有効にできる点です。たとえば、us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest
コンテナを使用してモデルをデプロイした場合、us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.2-8:latest
コンテナを使用して、最適化された TensorFlow ランタイムで同じモデルを処理できます。
次のコードサンプルは、最適化された TensorFlow ランタイム コンテナを us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest
で使用して、モデルを作成する方法を示しています。このモデルをデプロイするには、他のビルド済み TensorFlow サービング コンテナでモデルをデプロイする場合と同じプロセスを使用します。
このサンプルで使用されている ModelServiceClient
の詳細については、ModelServiceClient クラスをご覧ください。Vertex AI を使用してモデルをデプロイする方法については、Vertex AI API を使用したモデルのデプロイをご覧ください。allow_precompilation
と allow_compression
の設定の詳細については、このトピックで説明したモデルの最適化をご覧ください。
from google.cloud.aiplatform import gapic as aip PROJECT_ID = PROJECT_ID REGION = LOCATION API_ENDPOINT = f"{REGION}-aiplatform.googleapis.com" PARENT = f"projects/{PROJECT_ID}/locations/{REGION}" client_options = {"api_endpoint": API_ENDPOINT} model_service_client = aip.ModelServiceClient(client_options=client_options) tf_opt_model_dict = { "display_name": "DISPLAY_NAME", "metadata_schema_uri": "", "artifact_uri": "MODEL_URI", "container_spec": { "image_uri": "us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest", "args": [ # The optimized TensorFlow runtime includes the following # options that can be set here. # "--allow_precompilation=true" - enable XLA precompilation # "--allow_compression=true" - enable # model compression optimization ], }, } tf_opt_model = model_service_client.upload_model( parent=PARENT, model=tf_opt_model_dict).result(timeout=180).model
モデル最適化フラグ
最適化された TensorFlow ランタイムを使用してモデルをデプロイすると、2 つの機能を有効にして、TensorFlow モデルの処理をさらに最適化できます。
モデルの XLA プリコンパイルとモデル圧縮の最適化は同時に有効にできます。次のトピックでは、デプロイ時にフラグを使用して、これらのオプションを有効にする方法について説明します。
モデルの XLA プリコンパイルを有効にする
最適化された TensorFlow ランタイムでモデルをプリコンパイルするよう構成するには、allow_precompilation
フラグを true
に設定します。モデルの XLA プリコンパイルはさまざまな種類のモデルに対して機能し、ほとんどの場合にパフォーマンスが向上します。XLA プリコンパイルは、バッチサイズが大きいリクエストに最適です。
モデルの XLA プリコンパイルは、新しいバッチサイズの最初のリクエストが届いたときに行われます。最初のリクエストの前にランタイムが初期化されるようにするには、ウォームアップ リクエスト ファイルを使用します。詳細については、TensorFlow ウェブサイトの SavedModel のウォームアップをご覧ください。
XLA プリコンパイルには、モデルの複雑さに応じて数秒から数分を要します。モデルの XLA プリコンパイルを使用する場合は、次の点を考慮してください。
ウォームアップ ファイルを使用する場合は、モデルが受信すると予測されるバッチサイズに相当するバッチサイズのリクエストを含めてください。ウォームアップ ファイルに多数のリクエストを指定すると、モデルサーバーの起動が遅くなります。
モデルがさまざまなバッチサイズのリクエストを受信することが想定される場合は、
allow_batch_sizes
に固定値のセットを使用して、サーバーサイドでのバッチ処理を有効にします。サーバーサイドでのバッチ処理を有効にする方法の詳細については、TensorFlow のウェブサイトで TensorFlow のサーバーサイド リクエストのバッチ処理を有効にするをご覧ください。
XLA プリコンパイルによりメモリのオーバーヘッドが増えるので、一部の大規模なモデルは GPU でメモリ不足エラーが発生する場合があります。
この機能を本番環境で有効にする前に、モデルの XLA プリコンパイルをテストすることをおすすめします。
モデル圧縮の最適化を有効にする
最適化 TensorFlow ランタイムで、モデル圧縮の最適化を使用するよう構成するには、allow_compression
フラグを true
に設定します。本番環境でこの機能を有効にするかどうかを決める前に、このフラグを有効にするとモデルの精度にどのような影響を及ぼすかをテストしてください。
最適化を無効にする
最適化された TensorFlow ランタイムで、モデルを最適化せずに実行するよう構成するには、disable_optimizer
フラグを true
に設定します。
最適化された TensorFlow ランタイムの制限
最適化された TensorFlow ランタイムには次の制限があります。
- 最適化された TensorFlow ランタイムは、Tesla K80、Tesla P4、Tesla P100 などの古い NVIDIA GPU と互換性がありません。
- 現在のところ、最適化された TensorFlow ランタイムはサンプリングされた Shapley の説明可能性のみをサポートしています。
料金
最適化された TensorFlow ランタイムを使用してモデルをデプロイする場合、追加料金は発生しません。使用されている VM とアクセラレータの数に基づいて課金される他の予測デプロイと同じコストです。詳細については、Vertex AI の料金をご覧ください。