Как решить проблему «Таблица не инициализирована» при обслуживании модели USE4 в обслуживании tensorflow?

#python #tensorflow #machine-learning #tensorflow2.0 #tensorflow-serving

#python #tensorflow #машинное обучение #tensorflow2.0 #обслуживание tensorflow

Вопрос:

Итак, я подготовил модель keras, включающую USE4, используя ссылку ниже: https://tfhub.dev/google/universal-sentence-encoder-large/4

Используя tensorflow 2.3, я добавил его в свою модель и сохранил модель

 tf.saved_model.save(
model,
export_dir= '/directory/model/1',
)
 

После обслуживания в docker я могу получить метаданные, но прогнозируемый запрос не работает. Вот запрос :

 {"inputs":{"text":["Hello"]}}
 

Ответ :

 { "error": "[_Derived_]{{function_node __inference_pruned_16231}} {{function_node __inference_pruned_16231}} Table not initialized.nt [[{{node text_preprocessor_1/hash_table_Lookup/hash_table_Lookup/LookupTableFindV2}}]]nt [[StatefulPartitionedCall/StatefulPartitionedCall/sequential/keras_layer/StatefulPartitionedCall/StatefulPartitionedCall/StatefulPartitionedCall]]" }
 

Я прочитал здесь https://github.com/awslabs/amazon-sagemaker-examples/issues/773#issuecomment-509433290 что эта проблема может быть решена в более старых версиях tf с помощью команды tf.tables_initializer() в старой функции tf.saved_model.simple_save(). Но в 2.3.0, какова альтернатива?

Ответ №1:

Не могли бы вы повторить попытку с версией 5 этой модели (ссылка)? Ваша проблема, похоже, связана с этой проблемой GitHub, которая была решена с помощью версии 5 модели. Если это не решит проблему, был бы полезен минимальный фрагмент для воспроизведения проблемы.

Ответ №2:

функция ‘tf.saved_model.simple_save()’ имеет параметр ‘legacy_init_op’ со значением по умолчанию ‘None’. Чтобы избежать проблемы «Таблица не инициализирована» после развертывания модели с помощью docker, возможно, вы можете попробовать это:

 legacy_init_op = tf.group(tf.compat.v1.tables_initializer(), name='init_all_tables2')
tf.saved_model.simple_save(sess,
                       your_model_path, 
                       inputs={"xxx": xxx}, 
                       outputs={"xxx": xxx},
                       legacy_init_op=legacy_init_op
                      )