blog.dopana

Back

TensorFlow Servingは、本番環境向けMLモデルのためのGoogle製の柔軟で高性能なサービングシステム。MLの推論側を担います:訓練済みモデルを受け取り、そのライフサイクルを管理し、バージョン管理されたアクセスでクライアントに予測を提供 — 高性能な参照カウント式ルックアップテーブルを通じて。

解決する問題#

本番でのMLモデルサービングは見た目より難しい:

  • モデルをリクエストを落とさず、クライアントを壊さず更新するには?
  • 同じGPUで複数モデル / 複数バージョンを動かすには?
  • GPUを忙しく保つバッチ処理はどうする?
  • 新モデルをカナリア / A-Bで安全にテストするには?

TensorFlow Servingはこれらすべてを標準機能で解決します。

主な機能#

機能説明
バージョン管理複数バージョンを同時にサーブ
ゼロダウンタイム更新クライアント変更なしで新バージョンをデプロイ
カナリア & A/Bテスト実験バージョンへトラフィックを流す
GPUバッチ処理レイテンシ制御付きでリクエストをバッチ化
gRPC + REST両インターフェースを標準装備
マルチサーバブルTFモデル、埋め込み、語彙、特徴変換
低オーバーヘッド推論にわずかな遅延のみ追加

アーキテクチャ#

  • ModelServer — サービングバイナリ
  • SavedModel — 消費するシリアライズ済みモデル形式
  • バージョンマネージャ — バージョンのロード/アンロード、ロールバック対応
  • バッチスケジューラ — GPU効率のため推論リクエストをバッチ化

REST APIエンドポイント#

GET  /v1/models/{model}                          # ステータス
GET  /v1/models/{model}/versions/{v}/metadata    # メタデータ
POST /v1/models/{model}:predict                  # 予測
POST /v1/models/{model}:classify                 # 分類
POST /v1/models/{model}:regress                  # 回帰
text

リクエストはJSON。バイナリデータ(画像)はBase64エンコード。

モデルを60秒でサーブ#

# イメージ取得とデモモデルのクローン
docker pull tensorflow/serving
git clone https://github.com/tensorflow/serving

TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"

# サーバー起動
docker run -t --rm -p 8501:8501 \
    -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \
    -e MODEL_NAME=half_plus_two \
    tensorflow/serving
bash
# 予測
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
    -X POST http://localhost:8501/v1/models/half_plus_two:predict
# 結果 => { "predictions": [2.5, 3.0, 4.5] }
bash

SavedModelのエクスポート#

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([keras.layers.Dense(1, input_shape=(1,))])
model.compile(optimizer="sgd", loss="mse")

# 訓練...
model.fit(x_train, y_train, epochs=10)

# TensorFlow Serving用にエクスポート
model.export("models/regressor/1")   # バージョン「1」ディレクトリ
python

バージョニング:各SavedModelは番号付きディレクトリに入る — 新しいディレクトリを置けば即座に新バージョンをデプロイ。

GPUバッチ処理#

スケジューラが個々のリクエストをGPU上での共同実行用にバッチ化します:

--enable_batching=true
--batching_parameters_file=config.json
text

バッチサイズ、タイムアウト、パディングを設定可能。小リクエスト中心のワークロードでスループットを大幅に向上。

TFX — 本番パイプライン#

TensorFlow ServingはTFX(TensorFlow Extended)の最終段階 — Googleのエンドツーエンド本番MLパイプライン:

段階コンポーネント
データ検証Data Validation(スキーマ、異常検知)
変換Transform(特徴量エンジニアリング)
訓練Trainer(TF + Keras)
評価Evaluator(メトリクス、公平性)
サービングTensorFlow Serving / Model Server

代替案#

システム最適な用途
TF ServingGoogle規模のTFモデル、バージョン管理されたサービング
Triton Inference ServerマルチフレームワークGPUサービング(業界標準)
TorchServePyTorchネイティブサービング
ONNX RuntimeクロスフレームワークCPU/GPU/モバイル
vLLMPagedAttentionによるLLMサービング

まとめ#

TensorFlow Servingは、TensorFlowモデル向けに最も成熟した本番モデルサーバーであり続けます — Google級のバージョニング、バッチ処理、カナリア/A-Bテストを最小限のレイテンシオーバーヘッドで提供。スタックがTensorFlow(またはKeras)なら標準の選択。異種混合チームにはTritonがマルチフレームワークの代替。TFXと組み合わせれば、訓練から大規模サービングまでの完全な道筋が得られます。

参考資料#