Как сделать, чтобы вложения концентратора тензорного потока работали с использованием обслуживания тензорного потока?
Я пытаюсь использовать модуль встраивания из концентратора тензорного потока в качестве исправного. Я новичок в tenorflow. В настоящее время я использую встраивания Universal Sentence Encoder в качестве поиска для преобразования предложений в вложения, а затем использую эти вложения, чтобы найти сходство с другим предложением.
Мой текущий код для преобразования предложений во вложения:
with tf.Session() as session:
session.run([tf.global_variables_initializer(), tf.tables_initializer()])
sen_embeddings = session.run(self.embed(prepared_text))
Prepared_text - это список предложений. Как мне взять эту модель и сделать ее исправной?
3 ответа
Прямо сейчас вам, вероятно, нужно сделать это вручную. Вот мое решение, похожее на предыдущий ответ, но более общее - показать, как использовать любой другой модуль, не угадывая входные параметры, а также расширенное с проверкой и использованием:
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
проживает.
После экспорта вашего модуля самый быстрый способ проверить, правильно ли экспортируется ваша модель для обслуживания, - это использовать сохраненный_модель_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
В настоящее время модули-концентраторы не могут напрямую использоваться Tensorflow Serving. Вам нужно будет загрузить модуль в пустой график и затем экспортировать его, используя SavedModelBuilder
, Например:
import tensorflow as tf
import tensorflow_hub as hub
with tf.Graph().as_default():
module = hub.Module("http://tfhub.dev/google/universal-sentence-encoder/2")
text = tf.placeholder(tf.string, [None])
embedding = module(text)
init_op = tf.group([tf.global_variables_initializer(), tf.tables_initializer()])
with tf.Session() as session:
session.run(init_op)
tf.saved_model.simple_save(
session,
"/tmp/serving_saved_model",
inputs = {"text": text},
outputs = {"embedding": embedding},
legacy_init_op = tf.tables_initializer()
)
Это будет экспортировать вашу модель (в папку /tmp/serving_saved_model
) в желаемом формате для подачи. После этого вы можете следовать инструкциям, приведенным в документации здесь: https://www.tensorflow.org/serving/serving_basic
Обратите внимание, что другие ответы относятся к TensorFlow 1. Большинство моделей TF Hub для TensorFlow 2 уже будут совместимы с TF Serving. Например, чтобы развернуть модель USE-Large:
- Загрузите модель либо через
tensorflow_hub
библиотека или просто https://tfhub.dev/google/universal-sentence-encoder-large/5 - Поместите содержимое в папки, представляющие название модели и версию, например
models/use-large/5
- Запустите приложение TF Serving, например, через Docker:
docker run -t --rm -p 8501:8501 \
-v "$PATH_TO_YOUR_WORKSPACE/models:/models" \
-e MODEL_NAME="use-large" \
tensorflow/serving
Модель будет доступна по адресу
localhost:8501/v1/models/use-large
:
curl -d '{"instances": ["Hey!"]}' \
-X POST http://localhost:8501/v1/models/use-large:predict