Как развернуть локально обученный файл графика TensorFlow в Google Cloud Platform?

Я следил за учебником TensorFlow для поэтов и заменил стоковый flower_photos несколькими собственными классами. Теперь у меня есть мой labels.txt файл и мой graph.pb, сохраненные на моем локальном компьютере.

Могу ли я развернуть эту предварительно обученную модель в Google Cloud Platform? Я читал документы и все, что я могу найти, - это инструкции о том, как создавать, обучать и развертывать модели из их ML Engine. Но я не хочу тратить деньги на обучение моей модели на серверах Google, когда они мне нужны только для размещения моей модели, чтобы я мог вызывать ее для прогнозов.

Кто-нибудь еще сталкивается с такой же проблемой?


person Phaedrus Raznikov    schedule 31.05.2017    source источник


Ответы (2)


Развертывание модели с локальным обучением - поддерживаемый вариант использования; инструкции по существу одинаковы независимо от того, где вы обучил его:

Для развертывания версии модели вам потребуются:

Сохраненная модель TensorFlow SavedModel в облачном хранилище Google. Получить модель можно:

  • Следуйте инструкциям по обучению Cloud ML Engine для обучения в облаке.

  • Обучение в другом месте и экспорт в SavedModel.

К сожалению, TensorFlow для поэтов не показывает, как экспортировать SavedModel. (Я подал запрос функции, чтобы решить эту проблему). А пока вы можете написать сценарий "конвертера", подобный следующему (вы также можете сделать это в конце обучения, вместо того, чтобы сохранять graph.pb и читать его обратно):

input_graph = 'graph.pb'
saved_model_dir = 'my_model'

with tf.Graph() as graph:
  # Read in the export graph
  with tf.gfile.FastGFile(input_graph, 'rb') as f:
      graph_def = tf.GraphDef()
      graph_def.ParseFromString(f.read())
      tf.import_graph_def(graph_def, name='')

  # CloudML Engine and early versions of TensorFlow Serving do
  # not currently support graphs without variables. Add a
  # prosthetic variable.
  dummy_var = tf.Variable(0)

  # Define SavedModel Signature (inputs and outputs)
  in_image = graph.get_tensor_by_name('DecodeJpeg/contents:0')
  inputs = {'image_bytes': 
tf.saved_model.utils.build_tensor_info(in_image)}

  out_classes = graph.get_tensor_by_name('final_result:0')
  outputs = {'prediction': tf.saved_model.utils.build_tensor_info(out_classes)}

  signature = tf.saved_model.signature_def_utils.build_signature_def(
      inputs=inputs,
      outputs=outputs,
      method_name='tensorflow/serving/predict'
  )

  # Save out the SavedModel.
  b = saved_model_builder.SavedModelBuilder(saved_model_dir)
  b.add_meta_graph_and_variables(sess,
                                 [tf.saved_model.tag_constants.SERVING],
                                 signature_def_map={'predict_images': signature})
  b.save() 

(Непроверенный код основан на этой кодовой лаборатории и это сообщение SO).

Если вы хотите, чтобы в выводе использовались строковые метки вместо целочисленных индексов, внесите следующие изменения:

  # Loads label file, strips off carriage return
  label_lines = [line.rstrip() for line 
                 in tf.gfile.GFile("retrained_labels.txt")]
  out_classes = graph.get_tensor_by_name('final_result:0')
  out_labels = tf.gather(label_lines, ot_classes)
  outputs = {'prediction': tf.saved_model.utils.build_tensor_info(out_labels)}
person rhaertel80    schedule 31.05.2017

К сожалению, только частичный ответ, но мне удалось это сделать ... но с некоторыми текущими проблемами, которые я еще не решил. Я перенес на свой сервер обученные файлы pb и txt, установил Tensorflow и вызываю обученную модель через HTTP-запрос. Работает отлично ... при первом запуске. Потом терпит неудачу через раз.

развертывание тензорного потока при openshift, ошибки с Gunicorn и mod_wsgi

Удивлен, что больше нет людей, пытающихся заняться этой общей проблемой.

person jjreicher    schedule 07.06.2017