
Cloud ML Engine - это управляемый сервис для создания и запуска моделей машинного обучения в облаке.
В этой статье я расскажу вам, как обслужить и вручную развернуть модель Tensorflow в Google Cloud Machine Learning Engine.
Я использую набор данных MNIST для построения рукописной однозначной модели классификации, я не буду здесь обсуждать эту модель, более подробную информацию см. В этой статье https://www.tensorflow.org/tutorials/estimators/cnn
Подготовка и экспорт модели
Модель MNIST ожидает ввода изображения следующей формы 28x28x1.
Это означает, что вам нужно будет предварительно обработать изображения, прежде чем вы сможете делать прогнозы, в конечном итоге вы захотите, чтобы предварительная обработка выполнялась на стороне сервера, а не на стороне клиента.
Здесь вступает в игру функция ServingInputReceiver, Tensorflow tf.estimator.LatestExporter и export_savedmodel ожидают параметр функции serve_input_receiver_fn. .
Роль этой функции - сообщить вашей модели, какие данные она должна получить от пользователя, и в нашем случае это закодированное изображение.
Здесь мы определяем, какие входные данные ожидает наша модель, а здесь модель ожидает строковый входной параметр «image_bytes».
Затем функция декодирует входные данные и предварительно обрабатывает их в тензор с плавающей запятой формы 28x28x1, как ожидает модель от входных данных. Без этой функциональности модель не сможет делать прогнозы по закодированному изображению по двум причинам: во-первых, она не была предварительно обработана в тензор (вам нужно будет сделать это на стороне клиента / вызывающего), а во-вторых, она ожидает float тензор, в то время как предоставленный ввод представляет собой закодированную строку (ввод должен быть сериализован перед передачей через Интернет).

Вышеупомянутая функция будет использоваться методом LatestExporter для экспорта модели, готовой к использованию, как показано на снимке экрана ниже.

Чтобы загрузить модель на платформу Google, нам сначала нужно создать корзину для хранения, что и будет сделано дальше.
Создайте сегмент
Давайте продолжим и создадим проект и корзину для хранения нашей сохраненной модели:
- Войдите в Google Cloud Platform https://console.cloud.google.com, создайте новый проект и запишите свой идентификатор проекта.
- Убедитесь, что ваш проект выбран, и перейдите в Хранилище ›Браузер https://console.cloud.google.com/storage/browser .
- Создайте корзину с настройками по умолчанию
Теперь мы готовы обучить нашу модель и загрузить ее в корзину. Вот что мы будем делать дальше.
Обучите модель
Поскольку это небольшая модель, и я хотел изучить обслуживание модели, которая принимает изображения через Google Cloud MLE, обучение проводилось на Jupyter Notebook, вы можете запустить его на своем локальном компьютере или в облаке.
Приведенный ниже код вызовет поезд и оценит функцию, определенную ранее:

и здесь я использую инструмент gsutil («приложение Python, позволяющее получить доступ к облачному хранилищу из командной строки»), чтобы загрузить сохраненную модель в корзину.


Создайте модель
Создать модель очень просто, мы можем сделать это через браузер или инструмент gsutil.
Выполните следующие шаги, чтобы создать модель через браузер:
- Перейдите на страницу моделей и убедитесь, что выбран ваш проект https://console.cloud.google.com/mlengine/models.
- Нажмите «Новая модель», дайте имя своей модели и нажмите «Создать».
- Выберите свою модель и нажмите «Новая версия», введите сведения о версии, как показано ниже, и установите URI модели в папку корзины, в которой находится ваша модель.
- Наконец, в разделе «Развертывание онлайн-прогнозирования» измените масштабирование на ручное, а количество узлов на 1 и нажмите «Создать».

Протестируйте свою модель
Как только ваша модель будет создана и готова, сериализуйте изображение и создайте переменную JSON в следующем формате, как указано здесь:
{'image_bytes': {'b64': base64.b64encode(jpeg_data).decode()}}
Наконец, запустите функцию predic_json (исходный код), чтобы получить прогноз для вашего изображения, эта функция принимает имя проекта, идентификатор модели, содержимое json и параметры версии модели:

И это все!
Вы можете проверить весь код (код записной книжки и Python) для этого поста на GitHub.