Прямо сейчас вам, вероятно, нужно сделать это вручную.Вот мое решение, аналогичное предыдущему ответу, но более общее - показать, как использовать любой другой модуль, не угадывая входные параметры, а также расширить с проверкой и использованием:
import tensorflow as tf
import tensorflow_hub as hub
from tensorflow.saved_model import simple_save
export_dir = "/tmp/tfserving/universal_encoder/00000001"
with tf.Session(graph=tf.Graph()) as sess:
module = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")
input_params = module.get_input_info_dict()
# take a look at what tensor does the model accepts - 'text' is input tensor name
text_input = tf.placeholder(name='text', dtype=input_params['text'].dtype,
shape=input_params['text'].get_shape())
sess.run([tf.global_variables_initializer(), tf.tables_initializer()])
embeddings = module(text_input)
simple_save(sess,
export_dir,
inputs={'text': text_input},
outputs={'embeddings': embeddings},
legacy_init_op=tf.tables_initializer())
Благодаря module.get_input_info_dict()
вы знаете,какие тензорные имена вам нужно передать модели - вы используете это имя в качестве ключа для inputs={}
в методе simple_save
.
Помните, что для обслуживания модели он должен находиться в пути к каталогу, оканчивающемся на версиюВот почему '00000001'
является последним путем, в котором находится saved_model.pb
.
После экспорта вашего модуля самый быстрый способ проверить, правильно ли экспортируется ваша модель для обслуживания, - это использовать save_model_cli API :
saved_model_cli run --dir /tmp/tfserving/universal_encoder/00000001 --tag_set serve --signature_def serving_default --input_exprs 'text=["what this is"]'
Для обслуживания модели из докера:
docker pull tensorflow/serving
docker run -p 8501:8501 -v /tmp/tfserving/universal_encoder:/models/universal_encoder -e MODEL_NAME=universal_encoder -t tensorflow/serving