Разворачиваем веб приложение переноса стилей для изображений

Мы будем использовать передовые облачные технологии, хайповые нейронные сети, методику разработки непрерывной интеграции и непрерывной доставки (СI/CD). Время выполнения: 35-40 минут

Разворачиваем веб приложение переноса стилей для изображений

Привет! Меня зовут Вадим! В этой инструкции я хотел бы показать еще немного Serverless-технологий, а именно Google Cloud Run. В какой-то степени будет немного похоже на ИТ-гайд: как запустить первое приложение.

Не беспокойтесь, если что-то будет непонятно. Возможно это прояснится дальше.

Google позиционирует Сloud Кun как более новый App Engine он же GAE Flexible (тот самый appspot.com) только без persistence, отличия можно почитать здесь.

Вкратце контейнер Сloud Run может быть размещен на Google Kubernetes Engine (GKE) кластерах(VM) или на полностью управляемом PaaS решении и автоматически масштабироваться до 0. За виртуальную машину вы всегда платите.

Мы создадим Docker контейнер из Flask-приложения которое я написал для развертывания предварительно обученной модели с помощью Pytorch.

Загрузим контейнер в репозиторий Cloud Run.

Подключим триггер для непрерывной доставки.

Я думаю эти шаги спокойно можно воссоздать на серверах selectel, так как они поддерживают кластеры Kubernetes.

Метод который я использовал подробнее описан в Perceptual Losses for Real-Time Style Transfer and Super-Resolution.

Также для полного понимания могу посоветовать последнюю лекцию Jeremy Howard из курса fastai 2018 года, если планируете использовать GAN нейросети в будущем и досконально разобраться в деталях. Я постарался сделать эту инструкцию как можно проще и короче, так что сейчас это не критично.

Можно было бы в место Flask написать приложение на Starlette в асинхронном стиле, но делать этого, мы конечно, не будем. Асинхронный Python-код не всегда быстрее обычного кода, а зачастую даже медленнее.

Предварительные требования

  • Аккаунт Google Cloud Platform. Здесь есть один нюанс — чтобы получить 300 триальных долларов нужно привязать пустую(или нет) банковскую карту. Вы не понесете никакие затраты на прохождение этой инструкции. Позже вы можете создать виртуальную машину для обучения своих моделей. Так как Google использует TPU в своем оборудовании, они предоставляют всю линейку графических ускорителей Nvidia Tesla от K40 до V100 под Cloud платформу.

Оглавление

Создание проекта

1. Итак, мы на главной странице GCP. Создаем новый проект, даем ему имя.

Разворачиваем веб приложение переноса стилей для изображений

Дальше я буду ссылаться на имя как project_ID.

Разворачиваем веб приложение переноса стилей для изображений

Выбираем проект.

Разворачиваем веб приложение переноса стилей для изображений

2. Выбираем справа Оплата -> Привязать платежный аккаунт.

Разворачиваем веб приложение переноса стилей для изображений

3. Выбираем справа Ресурсы -> Cloud Run, ждем пока загрузится API

Разворачиваем веб приложение переноса стилей для изображений

4. Активируем консоль Cloud Shell:

Разворачиваем веб приложение переноса стилей для изображений

5. Проверяем что наш проект привязался:

gcloud config list project
Разворачиваем веб приложение переноса стилей для изображений

Клонируем репозиторий

1. Клонируем deploy ветку репозитория с кодом, на момент публикации он должен быть доступен.

git clone -b deploy https://github.com/p1x31/fast-neural-transfer-style.git
Разворачиваем веб приложение переноса стилей для изображений

2. Если спросит, вводим имя аккаунта и пароль от Github который мы создали ранее.

3. Заходим в папку проекта:

cd fast-neural-transfer-style

Создание и развертка контейнера

0. project-ID можно проверить с помощью:

echo $GOOGLE_CLOUD_PROJECT

1. Собираем образ контейнера (Примерно 10 минут) и загружаем на наш внутренний gcr.io репозиторий:

gcloud builds submit --tag gcr.io/PROJECT-ID/image

2. Разворачиваем наш образ:

gcloud run deploy --image gcr.io/PROJECT-ID/image --platform managed
Разворачиваем веб приложение переноса стилей для изображений

3. Выбираем имя сервиса и локацию сервера. Europe west-4 — Нидерланды. Все локации c GPU.

Разворачиваем веб приложение переноса стилей для изображений

4. Готово

5. Выбираем справа Ресурсы -> Cloud Run. Здесь мы можем найти нашу ссылку, добавить CI/CD, посмотреть последние ошибки. Google недавно добавили 4Гб объема памяти. Все изменения Сloud Run

Разворачиваем веб приложение переноса стилей для изображений

6. Чтобы не было ошибок по памяти и наш сервис мог обрабатывать большие фотографии. Нажимаем Изменить и развернуть новую версию, выделяем 4Гб объем памяти и 2 выделенных ЦП.

Разворачиваем веб приложение переноса стилей для изображений
Разворачиваем веб приложение переноса стилей для изображений

Мой рабочий вариант доступен по ссылке:

Только jpeg/jpg файлы.

Очистка

Сам сервис Cloud Run на одном проекте бесплатен, но за хранения образа могут снимать деньги.

1. Выбираем справа Хранение данных -> Storage и удаляем артефакты.

Контейнер придется пересобирать

Заключение

Отправляйте свои рабочие версии в комментарии или задавайте любые интересующие вас вопросы. Мне будет приятно.

Пообщаться лично — пишите в директ инстаграм @p1x31lat3d

Хочу сказать спасибо организатором конкурса комитету и selectel. Это был интересный опыт написания статьи здесь. Редактор супер классный!

33
1 комментарий

Супер! Спасибо большое за крутую лабу)) Спустя 3 года работает

Ответить