TensorFlow 决策森林和 TensorFlow Serving

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),这种开销可能比模型本身所需的时间大一个数量级。在这种情况下,建议使用 Yggdrasil 决策森林 运行 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 发送请求。两种格式可用:predict+instances API 和 predict+inputs API。以下是每个 API 的示例

# Predictions with the predict+instances API.
curl https://127.0.0.1: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 https://127.0.0.1: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"]} }'