TensorFlow デシジョン フォレストと TensorFlow サービング

TensorFlow Serving (TF Serving) は、RPC または REST API を使用して大規模な運用設定で TensorFlow モデルをオンラインで実行するためのツールです。 TensorFlow デシジョン フォレスト (TF-DF) は、TF Serving >=2.11 でネイティブにサポートされています。

TF-DF モデルは、TF Serving と直接互換性があります。 Yggdrasil モデルは、最初に変換した後、TF Serving で使用できます。

制限事項

TensorFlow は、かなりの量の計算オーバーヘッドを追加します。小規模でレイテンシの影響を受けやすいモデル (モデル推論時間 ~1μs など) の場合、このオーバーヘッドはモデル自体に必要な時間よりも 1 桁大きくなる可能性があります。この場合、 Yggdrasil Decision Forestsを使用して TF-DF モデルを実行することをお勧めします。

使用例

次の例は、TF Serving で TF-DF モデルを実行する方法を示しています。

まず、 TF Serving をインストールします。この例では、TF-Serving + TF-DF のプリコンパイル済みバージョンを使用します。

# Download TF Serving
wget https://github.com/tensorflow/decision-forests/releases/download/serving-1.0.1/tensorflow_model_server_linux.zip
unzip tensorflow_model_server_linux.zip

# Check that TF Serving works.
./tensorflow_model_server --version

この例では、すでにトレーニングされた TF-DF モデルを使用します。

# Get a TF-DF model
git clone https://github.com/tensorflow/decision-forests.git
MODEL_PATH=$(pwd)/decision-forests/tensorflow_decision_forests/test_data/model/saved_model_adult_rf

echo "The TF-DF model is available at: ${MODEL_PATH}"

注: TF-Serving にはモデルのフルパスが必要です。これが$(pwd)を使用する理由です。

TF-Serving はモデルのバージョン管理をサポートしています。モデルは、モデルのバージョンを名前とするディレクトリに含まれている必要があります。モデルのバージョンは、「1」などの整数です。以下は TF-Serving の一般的なディレクトリです。

  • /path/to/model
    • 1 : モデルのバージョン 1
    • 5 : モデルのバージョン 5
    • 6 : モデルのバージョン 6

この例では、モデルを「1」というディレクトリに置くだけで済みます。

mkdir -p /tmp/tf_serving_model
cp -R "${MODEL_PATH}" /tmp/tf_serving_model/1

これで、モデル上で TF-Sering を開始できます。

./tensorflow_model_server \
    --rest_api_port=8502 \
    --model_name=my_model \
    --model_base_path=/tmp/tf_serving_model

最後に、Rest API を使用して TF Serving にリクエストを送信できます。予測+インスタンス API と予測+入力 API の 2 つの形式が利用可能です。それぞれの例を次に示します。

# Predictions with the predict+instances API.
curl http://localhost:8502/v1/models/my_model:predict -X POST \
    -d '{"instances": [{"age":39,"workclass":"State-gov","fnlwgt":77516,"education":"Bachelors","education_num":13,"marital_status":"Never-married","occupation":"Adm-clerical","relationship":"Not-in-family","race":"White","sex":"Male","capital_gain":2174,"capital_loss":0,"hours_per_week":40,"native_country":"United-States"}]}'
# Predictions with the predict+inputs API
curl http://localhost:8502/v1/models/my_model:predict -X POST \
    -d '{"inputs": {"age":[39],"workclass":["State-gov"],"fnlwgt":[77516],"education":["Bachelors"],"education_num":[13],"marital_status":["Never-married"],"occupation":["Adm-clerical"],"relationship":["Not-in-family"],"race":["White"],"sex":["Male"],"capital_gain":[2174],"capital_loss":[0],"hours_per_week":[40],"native_country":["United-States"]} }'