Как восстановить модель Tensorflow из корзины Google без записи в файловую систему? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть модель Tensorflow объемом 2 ГБ, которую я хотел бы добавить в проект Flask, который есть у меня в App Engine, но я не могу найти какую-либо документацию, в которой говорится о том, что я пытаюсь сделать.

Поскольку App Engine не разрешает запись в файловую систему, я храню файлы своей модели в Google Bucket и пытаюсь восстановить модель оттуда. Вот эти файлы:

  • model.ckpt.data-00000-оф-00001
  • model.ckpt.index
  • model.ckpt.meta
  • 1012 * контрольно-пропускной пункт *

Работая локально, я могу просто использовать

with tf.Session() as sess:
    logger.info("Importing model into TF")
    saver = tf.train.import_meta_graph('model.ckpt.meta')
    saver.restore(sess, model.ckpt)

Где модель загружается в память с помощью Flask's @before_first_request.

Как только он появится на App Engine, я предположил, что смогу:

blob = bucket.get_blob('blob_name')
filename = os.path.join(model_dir, blob.name)
blob.download_to_filename(filename)

Затем сделайте то же самое восстановление. Но App Engine этого не допустит.

Есть ли способ передать эти файлы в функции восстановления Tensorflow, чтобы файлы не записывались в файловую систему?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

После нескольких советов от Дана Корнилеску и покопавшись в нем, я обнаружил, что Tensorflow создает MetaGraphDef с функцией под названием ParseFromString, поэтому вот что я в итоге сделал:

from google.cloud import storage
from tensorflow import MetaGraphDef

client = storage.Client()
bucket = client.get_bucket(Config.MODEL_BUCKET)
blob = bucket.get_blob('model.ckpt.meta')
model_graph = blob.download_as_string()

mgd = MetaGraphDef()
mgd.ParseFromString(model_graph)

with tf.Session() as sess:
    saver = tf.train.import_meta_graph(mgd)
0 голосов
/ 03 ноября 2018

Я на самом деле не использовал Tensorflow, ответ основан на документации и знаниях, связанных с GAE.

Как правило, использование объектов GCS в качестве файлов в GAE во избежание отсутствия доступа к доступной для записи файловой системе основывается на одном из 2 альтернативных подходов вместо простой передачи имени файла для непосредственного чтения / записи (который может ' не может быть сделано с объектами GCS) кодом вашего приложения (и / или любой сторонней утилитой / библиотекой, которую он может использовать):

В вашем конкретном случае кажется, что вызов tf.train.import_meta_graph() поддерживает передачу буфера протокола MetaGraphDef (т.е. необработанных данных) вместо имени файла, из которого он должен быть загружен:

Args:

  • meta_graph_or_file: MetaGraphDef буфер протокола или имя файла (включая путь), содержащее MetaGraphDef.

Так что восстановление моделей из GCS должно быть возможным, что-то вроде этого:

import cloudstorage

with cloudstorage.open('gcs_path_to_meta_graph_file', 'r') as fd:
    meta_graph = fd.read()

# and later:

saver = tf.train.import_meta_graph(meta_graph)

Однако при быстром сохранении / проверке документов в режиме сканирования режимы обратно в GCS могут быть сложными, save(), похоже, хотят записать данные на сам диск. Но я копал не слишком глубоко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...