TensorFlow Serving (TF Serving) es una herramienta para ejecutar modelos de TensorFlow en línea en entornos de producción grandes mediante una RPC o REST API. TensorFlow Decision Forests (TF-DF) es compatible de forma nativa con TF Serving >=2.11.
Los modelos TF-DF son directamente compatibles con TF Serving. Los modelos Yggdrasil se pueden usar con TF Serving después de convertirlos primero.
Limitaciones
TensorFlow agrega una cantidad significativa de sobrecarga de cómputo. Para modelos pequeños sensibles a la latencia (p. ej., tiempo de inferencia del modelo ~1 µs), esta sobrecarga puede ser un orden de magnitud mayor que el tiempo que necesita el propio modelo. En este caso, se recomienda ejecutar los modelos TF-DF con Yggdrasil Decision Forests .
ejemplo de uso
El siguiente ejemplo muestra cómo ejecutar un modelo TF-DF en TF Serving:
Primero, instale TF Serving . En este ejemplo, utilizaremos una versión precompilada de 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
En este ejemplo, usamos un modelo TF-DF ya entrenado.
# 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}"
Notas: TF-Serving requiere la ruta completa del modelo. Es por eso que usamos $(pwd)
.
TF-Serving admite el control de versiones de modelos. El modelo debe estar contenido en un directorio cuyo nombre sea la versión del modelo. Una versión del modelo es un número entero, por ejemplo, "1". Aquí hay un directorio típico para TF-Serving.
-
/path/to/model
-
1
: Versión 1 del modelo -
5
: Versión 5 del modelo -
6
: Versión 6 del modelo
-
Para este ejemplo, solo necesitamos poner el modelo en un directorio llamado "1".
mkdir -p /tmp/tf_serving_model
cp -R "${MODEL_PATH}" /tmp/tf_serving_model/1
Ahora, podemos comenzar TF-Sering en el modelo.
./tensorflow_model_server \
--rest_api_port=8502 \
--model_name=my_model \
--model_base_path=/tmp/tf_serving_model
Finalmente, puede enviar una solicitud a TF Serving usando la API Rest. Hay dos formatos disponibles: API predict+instances y API predict+inputs. Aquí hay un ejemplo de cada uno de ellos:
# 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"]} }'