Как сделать вложения концентратора тензорного потока доступными с помощью обслуживания тензорного потока?

Я пытаюсь использовать модуль встраивания из концентратора тензорного потока как обслуживаемый. Я новичок в тензорном потоке. В настоящее время я использую вложения 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 - это список предложений. Как мне взять эту модель и сделать ее пригодной для показа?


person Prasann Pandya    schedule 10.06.2018    source источник


Ответы (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.

После экспорта модуля самый быстрый способ проверить, правильно ли экспортирована ваша модель для обслуживания, - это использовать saved_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                                                                                           
person grz.miejski    schedule 20.07.2018

В настоящее время модули хаба не могут использоваться службой Tensorflow напрямую. Вам нужно будет загрузить модуль в пустой график, а затем экспортировать его с помощью 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

person Amit Tiwary    schedule 18.07.2018

Обратите внимание, что другие ответы относятся к TensorFlow 1. Большинство моделей TF Hub для TensorFlow 2 уже будут совместимы с TF Serving. Например, чтобы развернуть модель USE-Large:

  1. Загрузите модель через библиотеку tensorflow_hub или просто https://tfhub.dev/google/universal-sentence-encoder-large/5
  2. Поместите содержимое в папки, представляющие название модели и версию, например models/use-large/5
  3. Запустите приложение обслуживания TF, например через 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
person Czyzby    schedule 21.12.2020