TensorFlow Serving — 本番モデルデプロイ
Googleの本番モデルサーバー。バージョン管理、カナリア/A-Bテスト、GPUバッチ処理、gRPC + REST。Dockerで60秒でSavedModelをサーブ。
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/servingbash# 予測
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] }bashSavedModelのエクスポート#
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.jsontextバッチサイズ、タイムアウト、パディングを設定可能。小リクエスト中心のワークロードでスループットを大幅に向上。
TFX — 本番パイプライン#
TensorFlow ServingはTFX(TensorFlow Extended)の最終段階 — Googleのエンドツーエンド本番MLパイプライン:
| 段階 | コンポーネント |
|---|---|
| データ検証 | Data Validation(スキーマ、異常検知) |
| 変換 | Transform(特徴量エンジニアリング) |
| 訓練 | Trainer(TF + Keras) |
| 評価 | Evaluator(メトリクス、公平性) |
| サービング | TensorFlow Serving / Model Server |
代替案#
| システム | 最適な用途 |
|---|---|
| TF Serving | Google規模のTFモデル、バージョン管理されたサービング |
| Triton Inference Server | マルチフレームワークGPUサービング(業界標準) |
| TorchServe | PyTorchネイティブサービング |
| ONNX Runtime | クロスフレームワークCPU/GPU/モバイル |
| vLLM | PagedAttentionによるLLMサービング |
まとめ#
TensorFlow Servingは、TensorFlowモデル向けに最も成熟した本番モデルサーバーであり続けます — Google級のバージョニング、バッチ処理、カナリア/A-Bテストを最小限のレイテンシオーバーヘッドで提供。スタックがTensorFlow(またはKeras)なら標準の選択。異種混合チームにはTritonがマルチフレームワークの代替。TFXと組み合わせれば、訓練から大規模サービングまでの完全な道筋が得られます。