Félicitations pour cet incroyable service TensorFlow! - Déploiement facile avec docker-compose

introduction

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.

Apprentissage

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')

Définir un point de terminaison

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

Déploiement facile!

$ docker-compose up

tester

$ curl -X POST -H "Content-Type: application/json" http://localhost:8501/v1/models/fashion_model:predict -d @test_data.json

Victoire facile

en conclusion

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.

code

https://github.com/TsuchiyaYutaro/tensorflow2_serving_test

référence

https://blog.ornew.io/posts/building-tensorflow-v2-serving-in-1-minute/

Recommended Posts

Félicitations pour cet incroyable service TensorFlow! - Déploiement facile avec docker-compose