Ситуация:
Я уже создал несколько моделей, каждая из которых проходила обучение в течение нескольких дней, и мы готовы перейти от локального тестирования к рабочей среде.
Модели былисохранено с использованием функции
def save_graph_to_file(sess, graph, graph_file_name):
"""Saves an graph to file, creating a valid quantized one if necessary."""
output_graph_def = graph_util.convert_variables_to_constants(sess, graph.as_graph_def(), [final_tensor_name])
with gfile.FastGFile(graph_file_name, 'wb') as f:
f.write(output_graph_def.SerializeToString())
Теперь при попытке развертывания в обслуживающей среде (Sagemaker, используя правильную структуру каталогов и соглашение об именах файлов), система возвращает
2019-06-04 22:38:53.794056: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:54] Reading meta graph with tags { serve }
2019-06-04 22:38:53.798096: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:259] SavedModel load for tags { serve }; Status: fail. Took 83297 microseconds.
2019-06-04 22:38:53.798132: E tensorflow_serving/util/retrier.cc:37] Loading servable: {name: model version: 1} failed: Not found: Could not find meta graph def matching supplied tags: { serve }. To inspect available tag-sets in the SavedModel, please use the SavedModel CLI: `saved_model_cli`
Все Iесть файлы *.pb
и их текстовые файлы меток.Они прекрасно работают на нескольких компьютерах в локальной среде.
def load_graph(model_file):
"""
Code from v1.6.0 of Tensorflow's label_image.py example
"""
graph = tf.Graph()
graph_def = tf.GraphDef()
with open(model_file, "rb") as f:
graph_def.ParseFromString(f.read())
with graph.as_default():
tf.import_graph_def(graph_def)
return graph
inputLayer = "Mul"
outputLayer = "final_result"
inputName = "import/" + inputLayer
outputName = "import/" + outputLayer
graph = load_graph(modelPath)
inputOperation = graph.get_operation_by_name(inputName)
outputOperation = graph.get_operation_by_name(outputName)
with tf.Session(graph= graph) as sess:
# ... make a tensor t
results = sess.run(outputOperation.outputs[0], {
inputOperation.outputs[0]: t
})
# lovely functional results here
Все, что я хочу сделать, это взять эти существующие файлы, добавить необходимый тег «serve» и заново сохранить их, но все, что я вижу, похоже, связано с этим с нуля.
Я пытался использовать конструктор для добавления графика к модели, например:
# Load the graph
graph = load_graph(modelPath)
import shutil
if os.path.exists(exportDir):
shutil.rmtree(exportDir)
# Add the serving metagraph tag
builder = tf.saved_model.builder.SavedModelBuilder(exportDir)
from tensorflow.saved_model import tag_constants
with tf.Session(graph= graph) as sess:
builder.add_meta_graph_and_variables(sess, [tag_constants.SERVING, tag_constants.GPU], strip_default_attrs= True)
builder.save()
print("Built a SavedModel")
, но получил ту же ошибку.