TensorFlow Serving a été implémenté depuis TensorFlow 2.0, ce qui facilite la création de points de terminaison à l'aide de Docker sans avoir à créer un serveur d'inférence avec Flask.
Cette fois, j'ai résumé dans un mémorandum comment configurer facilement un point de terminaison à l'aide de TensorFlow 2.0, Docker et docker-compose.
Cette fois, j'ai créé un modèle facilement en utilisant fashion_mnist
.
import json
import tensorflow as tf
from tensorflow import keras
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
train_images = train_images / 255.0
d = {'signature_name': 'serving_default',
'inputs': [test_images[0].tolist()]}
with open('./test_data.json', mode='w') as f:
f.write(json.dumps(d))
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28), name='inputs'),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5)
tf.saved_model.save(model, './models/fashion_model/1')
Configurez un point de terminaison à l'aide du modèle enregistré ci-dessus.
L'image utilise le "tensorflow / portion" publié officiellement. https://hub.docker.com/r/tensorflow/serving
version: '3'
services:
app:
image: tensorflow/serving
container_name: fashon_endpoint_test
ports:
- 8501:8501
volumes:
- ./models:/models/fashion_model
environment:
- MODEL_NAME=fashion_model
- MODEL_BASE_PATH=/models/fashion_model
$ docker-compose up
$ curl -X POST -H "Content-Type: application/json" http://localhost:8501/v1/models/fashion_model:predict -d @test_data.json
Victoire facile
De nos jours, PyTorch est en train de devenir la norme de facto pour les frameworks d'apprentissage en profondeur, et une grande partie du code est écrit en PyTorch dans les domaines kaggle et académiques.
PyTorch n'a pas ce genre de fonctionnalités (du moins dans la mesure où j'ai enquêté ... le cas échéant ... désolé), et j'ai l'impression que TensorFlow a été mieux en ce qui concerne le déploiement de modèles.
Je ne l'ai pas mentionné cette fois, mais il semble qu'une gestion de modèle plus disponible puisse être obtenue en utilisant des signatures et des métadonnées, mais cette fois, je ne présenterai que la facilité d'inférence à partir du déploiement.
https://github.com/TsuchiyaYutaro/tensorflow2_serving_test
https://blog.ornew.io/posts/building-tensorflow-v2-serving-in-1-minute/