Как указать версию для зависимостей, чтобы каждая из них была совместима и оставалась в рамках лимита по размеру?

Вопрос или проблема

Я пытаюсь развернуть веб-приложение на Heroku. Бесплатный тариф ограничен 500 МБ.

Я использую свою модель resnet34 в виде файла .pkl.

Я создаю модель с его помощью, используя библиотеку fastai.

Этот проект требует torch и torchvision как зависимости.

Но если не указать зависимость, будет загружена последняя версия torch, которая сама по себе занимает 750 МБ и превышает лимит памяти.

Поэтому я указываю версию torchvision как 0.2.2 и указываю колесо для torch для v1.1.0 в файле requirements.txt. Теперь это вызывает другие проблемы.

Например, я получил это сообщение об ошибке из журнала сборки Heroku –

ОШИБКА: torchvision 0.2.2 требует tqdm==4.19.9, но у вас будет tqdm 4.48.0, что несовместимо.

Но если я указываю версию tqdm как 4.19.9, какая-то библиотека под названием spacey становится несовместимой, и приложение завершается с ошибкой. Если я установлю более новую версию torchvision, размер приложения превысит разрешенные лимиты.

Как мне обойти эту проблему? Как мне узнать, какие версии зависимостей совместимы друг с другом, и общий размер не превышает 500 МБ? Есть ли простой способ сделать это?

На данный момент я усвоил, что это процесс проб и ошибок.

И лучшее решение – искать проекты, которые уже сделали это, используя рабочую комбинацию библиотек.

Я использовал этот файл requirements.txt, который работает отлично:

gunicorn
flask
numpy
https://download.pytorch.org/whl/cpu/torch-1.1.0-cp36-cp36m-linux_x86_64.whl
torchvision==0.2.2
fastai==1.0.52
jupyter

Веб-приложение работает идеально, и разрешенный размер не превышен.

Хотя лимит размера Heroku составляет 500 МБ, у них есть мягкий лимит в 300 МБ. Эти библиотеки, их зависимости и файл модели вместе превышают это, что приводит к немного большему времени отклика.

Ответ или решение

Для успешного развертывания веб-приложения на Heroku, особенно в рамках бесплатного тарифа с ограничением в 500 МБ, необходимо тщательно подбирать версии зависимостей, чтобы соответствовать как требованиям совместимости, так и ограничению по размеру. Вот несколько шагов, которые помогут вам решить данную задачу:

1. Определите зависимости

Прежде всего, необходимо точно определить, какие библиотеки вы собираетесь использовать. В вашем случае это torch, torchvision, fastai, flask, и другие библиотеки, такие как numpy.

2. Поиск совместимых версий

Для того чтобы удостовериться, что ваши зависимости будут совместимы друг с другом, вам нужно будет:

  • Проверить официальную документацию каждой библиотеки на предмет совместимости. Например, различные версии torch могут требовать разные версии torchvision.
  • Использовать платформы, такие как PyPI или Anaconda, для выяснения, какие версии библиотек совместимы.

3. Установите зависимости с помощью requirements.txt

Ваш файл requirements.txt должен содержать явные версии библиотек и учитывает зависимости:

gunicorn
flask
numpy
https://download.pytorch.org/whl/cpu/torch-1.1.0-cp36-cp36m-linux_x86_64.whl
torchvision==0.2.2
fastai==1.0.52
jupyter

Здесь вы уже указали конкретную версию torch и torchvision, что позволяет избежать загрузки превышающей лимит версии.

4. Проверка общего размера приложения

Для проверки размера вашего приложения переведите зависимости и модели в виртуальную среду и посчитайте общее занятие. Вы можете использовать команду:

du -sh .

Находясь в каталоге вашего проекта, эта команда покажет общий размер, включая библиотеки и ваши файлы.

5. Работайте с конфликтующими зависимостями

Если вы столкнетесь с конфликтами версий, например, в вашем случае с tqdm, вам нужно будет:

  • Проверить, какие версии spacey совместимы с нужной версией tqdm и наоборот.
  • Если это возможно, подумать о замене библиотек, которые вызывают конфликты, на альтернативные, менее тяжелые.

6. Используйте контейнеры

Если управление зависимостями оказывается слишком сложным и приводит к переполнению размера, рассмотрите возможность использования Docker для создания более легковесной среды для вашего приложения, что позволяет вам более точно контролировать, какие зависимости и версии будут включены.

7. Психология проб и ошибок

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

Резюме

Выбор совместимых версий зависимостей для деплоя на Heroku требует внимательности и тщательной проверки документации библиотек. Используйте указанные выше методы для нахождения необходимых версий и учета общего размера, стараясь избегать конфликта зависимостей. При правильном подходе и исследовании вы сможете успешно развернуть свое приложение в пределах установленных ограничений.

Оцените материал
Добавить комментарий

Капча загружается...