Краткое руководство по расширению и настройке контейнеров глубокого обучения AWS

О чем это?

Контейнеры глубокого обучения AWS (DLC) стали популярным выбором для обучения и развертывания моделей обработки естественного языка (NLP) в Amazon SageMaker (SM) благодаря их удобству и простоте использования. Однако иногда последние версии библиотеки Transformers недоступны в готовых DLC. В этой записи блога мы расширим эти DLC для обучения и развертывания последних моделей Hugging Face на AWS. Независимо от того, являетесь ли вы новичком в DLC или опытным пользователем, этот пост предоставит ценную информацию и методы для запуска моделей Hugging Face на AWS.

Код для этого руководства доступен в этом репозитории GitHub.

Почему это важно?

Amazon SageMaker — популярная платформа для запуска моделей ИИ, но для запуска последних моделей Transformer (например, Whisper, BLOOM) требуется актуальная версия библиотеки трансформаторов. Однако последний доступный DLC на AWS поддерживает только версию 4.17, тогда как на момент написания последней версией была 4.25.1. При попытке использовать последний DLC для неподдерживаемой модели пользователи увидят сообщение об ошибке, см., например, эту ветку на дискуссионном форуме Hugging Face (HF).

Обходной путь для этой проблемы включает внедрение в модель файла requirements.txt, но это может быть медленным и утомительным процессом. Для этого требуется загрузить модель, добавить файл requirements.txt, архивировать модель и загрузить ее на S3, что может занять несколько часов для больших моделей. В этом сообщении блога мы будем использовать тот факт, что предварительно созданные DLC AWS могут быть расширены, что избавит пользователей от этого обходного пути и, следовательно, многих часов в любое время, когда они хотят обучить или развернуть новую модель.

Как развернуть модели Transformer в SageMaker

Развертывание моделей Transformer на SM обычно не составляет труда, особенно если вы хотите использовать готовые модели без дополнительного обучения. В этом случае мы можем развернуть модель прямо из HF Model Hub в SM:

Вот что происходит в фоновом режиме при запуске этого кода:

После выполнения команды deploy () SM запускает экземпляр EC2 и извлекает образ из указанного DLC, который определяется номерами версий для трансформаторов и библиотек pytorch. Мы можем найти список доступных DLC здесь — они получены из определенного аккаунта AWS и общедоступны, см. этот пример.

Как видно из этого списка, последняя доступная версия трансформеров в DLC — 4.17, но для многих моделей потребуется версия выше этой.

Проблема с последними моделями Transformer

Мы можем увидеть это при попытке запустить модель, для которой требуется версия выше 4.17 с использованием последнего DLC. Развертывание будет успешным, но когда мы попытаемся использовать модель, мы получим следующее сообщение об ошибке:

А в логах Cloudwatch мы видим больше информации:

Это означает, что модель, которую мы пытались развернуть (в данном случае BLOOM) с помощью последнего DLC, невозможна.

Обходной путь — внедрение файла requirements.txt

Как уже упоминалось, существует обходной путь — HF SM Inference Toolkit позволяет использовать пользовательский код вывода, а также возможность указать необходимые дополнительные библиотеки через файл requirements.txt. Мы можем использовать этот механизм, просто добавив последнюю версию трансформеров в файл requirements.txt следующим образом:

Однако, чтобы внедрить этот файл requirements.txt в модель, требуются некоторые дополнительные шаги:

В этом случае нам сначала нужно вручную загрузить модель из HF Model Hub. Затем мы добавляем файл requirements.txt в каталог модели и архивируем его. Затем модель необходимо загрузить в корзину S3. Затем, наконец, мы можем развернуть модель, указав конечную точку на расположение S3 модели. При запуске инстанса EC2 для конечной точки будет прочитан файл requirements.txt и установлена ​​последняя версия трансформеров.

Если это относительно небольшая модель, это будет громоздко, но не займет слишком много времени. Если это полная модель BLOOM, то вся эта процедура может занять до 12 часов (поверьте, я старалась 😕)

Решение — расширение готовых DLC.

Вместо этого мы хотим продолжать развертывание непосредственно из HF Model Hub, особенно если не требуется никакого пользовательского кода или требуется какая-либо точная настройка модели. В этом случае мы можем просто написать файл Docker, который сначала извлекает последний DLC из общедоступного AWS ECR, а затем добавляет наши собственные требования, в данном случае просто команду «pip install» для обновления до последней версии трансформеров:

Затем мы можем запустить официальный учебник AWS для расширения DLC, нам просто нужно убедиться, что мы адаптируем имя и что роль, с которой мы запускаем этот скрипт, имеет привилегии для чтения и записи в службу ECR:

Как только этот скрипт завершится, через несколько минут мы должны увидеть новый DLC в нашем ECR.

Тестирование нового DLC

Теперь, когда новый загружаемый контент готов, мы можем снова протестировать предыдущее развертывание, но на этот раз с нашим расширенным загружаемым контентом:

Теперь, когда мы запускаем запрос на вывод, мы получаем правильный ответ:

И вот что сейчас происходит на заднем плане:

У нас была разовая попытка расширить DLC, но теперь, когда мы хотим развернуть модели из HF Model Hub, для которых требуется актуальная версия библиотеки трансформеров, мы можем просто повторно использовать наш DLC вместо официального. один из AWS 🤗

Заключение

В этом руководстве мы расширили официальные DLC HF от AWS, чтобы обновить библиотеку трансформаторов до более поздней версии, которая требуется для многих новых моделей Transformer. Таким образом, мы создали собственный загружаемый контент многократного использования, который позволяет нам развертывать его напрямую из HF Model Hub, тем самым экономя часы утомительного обходного пути.

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