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, нам сначала нужно создать корзину для хранения, что и будет сделано дальше.

Создайте сегмент

Давайте продолжим и создадим проект и корзину для хранения нашей сохраненной модели:

  1. Войдите в Google Cloud Platform https://console.cloud.google.com, создайте новый проект и запишите свой идентификатор проекта.
  2. Убедитесь, что ваш проект выбран, и перейдите в Хранилище ›Браузер https://console.cloud.google.com/storage/browser .
  3. Создайте корзину с настройками по умолчанию

Теперь мы готовы обучить нашу модель и загрузить ее в корзину. Вот что мы будем делать дальше.

Обучите модель

Поскольку это небольшая модель, и я хотел изучить обслуживание модели, которая принимает изображения через Google Cloud MLE, обучение проводилось на Jupyter Notebook, вы можете запустить его на своем локальном компьютере или в облаке.

Приведенный ниже код вызовет поезд и оценит функцию, определенную ранее:

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

Создайте модель

Создать модель очень просто, мы можем сделать это через браузер или инструмент gsutil.

Выполните следующие шаги, чтобы создать модель через браузер:

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

Протестируйте свою модель

Как только ваша модель будет создана и готова, сериализуйте изображение и создайте переменную JSON в следующем формате, как указано здесь:

{'image_bytes': {'b64': base64.b64encode(jpeg_data).decode()}}

Наконец, запустите функцию predic_json (исходный код), чтобы получить прогноз для вашего изображения, эта функция принимает имя проекта, идентификатор модели, содержимое json и параметры версии модели:

И это все!

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