Привет, вы создали какое-нибудь приложение с функциями машинного обучения и хотите его показать? Если да, добро пожаловать!

В этом посте я расскажу, как развернуть приложение Django, использующее OpenCV и PyTorch, на Heroku.

Предисловие

История этого поста началась на Нейрохаке. Это был хакатон, который мы выиграли с моим другом Rusteam. Подробнее об этом здесь. Одним из преимуществ, которое помогло победить, было наше веб-приложение.

После этого нам захотелось написать пост о наших успехах и показать веб-приложение мировой прогрессивной общественности.

Что у меня было в начале

Прежде всего, это мое веб-приложение Django, которое вы можете найти здесь! Базовая версия проекта находится в ветке master, подготовленная для развертывания Heroku версия находится в ветке heroku.

Свойства базовой версии проекта:

  1. Проект инициализировал репозиторий Git в том же каталоге, где находится файл manage.py. Это очень важно!!! Используйте мой проект в качестве примера.
  2. Он имеет виртуальную среду Pip. Я рекомендую использовать Python 3.6, потому что его использует и Heroku.

Наш план

  1. Войдите в Heroku и создайте сервер для веб-приложения.
  2. Установите и запустите сервер Gunicorn.
  3. Установите и подготовьте WhiteNoise для статических файлов сервера.
  4. Измените требования, чтобы сделать трюк с PyTorch.
  5. Подготовьте buildpack и Aptfile для установки на сервер Heroku дополнительных библиотек, необходимых для OpenCV.
  6. Развернуть в Heroku!

Ваше приложение в Heroku

Прежде всего Войдите в свой профиль на Heroku.

Нажмите на кнопку Создать. Затем нажмите кнопку Создать новое приложение.

Напишите уникальное имя приложения. Затем нажмите кнопку Создать приложение.

Следуйте инструкциям на панели управления без блокировки Развернуть приложение.

Примечание. Если вы еще не инициализировали репозиторий, сделайте это в каталоге, где находится файл manage.py вашего проекта.

Примечание. Я рекомендую создать новую ветку для версии развертывания Heroku.

Настроить сервер Gunicorn

Все примеры файлов можно найти в репозитории здесь.

  1. Добавьте gunicorn в файл requirements.txt.
  2. Запустите в консоли: pip install gunicorn
  3. Создайте файл с именем Procfile без расширения в той же директории, что и файл manage.py. Запишите в файл строку:

web: gunicorn your_app_name.wsgi --log-file -

3. Попробуйте запустить приложение на сервере Gunicorn. Запустите в консоли: gunicorn your_app_name.wsgi

Настроить библиотеку WhiteNoise

WhiteNoise используется для правильной загрузки статических файлов в развернутом приложении.

Следуйте этому учебнику. Я завершил настройку классов промежуточного программного обеспечения и остановился.

Трюк с PyTorch

GPU-версия библиотеки torch имеет размер более 500 МБ. Heroku имеет ограничение на размер хранилища 500 МБ. Поэтому мы не можем просто добавить библиотеки torch и torchvision в файл requirements.txt.

В Heroku нет графических процессоров, есть только процессоры. Давайте изменим файл requirements.txt, чтобы загрузить версию процессора PyTorch.

Заходим на веб-сайт PyTorch и смотрим Руководство по установке через Pip.

Выберите параметры, как на изображении ниже.

Добавьте в файл requirements.txt строки из раздела Выполнить эту команду без установки pip3. См. пример requirements.txt здесь.

Заставьте OpenCV снова работать на Heroku

OpenCV требует дополнительных библиотек, которые необходимо установить. Это:

libsm6
libxrender1
libfontconfig1
libice6

Чтобы сказать, что Heroku устанавливает эти библиотеки, необходимы пакеты сборки.

  1. Создайте файл с именем Aptfile без расширения (например, Procfile). Запишите строки с именами библиотек в файл и сохраните. См. пример здесь.
  2. Запустите в терминале в корневом каталоге вашего проекта:
heroku create — buildpack https://github.com/heroku/heroku-buildpack-apt.git

3. Запустите в терминале в корневом каталоге вашего проекта:

heroku buildpacks:add --index 1 heroku-community/apt

Этого должно быть достаточно, чтобы подготовить среду для развертывания вашего приложения в Heroku.

Давайте развернем его!

Это был долгий путь, и мы в конце его. Итак, давайте сделаем последние шаги!

  1. Git добавить все новые и измененные файлы с помощью команды
git add file_name

2. Зафиксируйте изменения с помощью команды

git commit -m "Heroku I am ready!"

3. Отправьте свое приложение на Heroku

git push heroku master

Примечание. Если вы создали новую ветку, напишите ее имя вместо master.

4. Откройте свое приложение в браузере, выполнив команду в терминале

heroku open

P.S.

Я надеюсь, что мой пост помог вам развернуть ваше приложение Heroku.