Бессерверное машинное обучение на AWS Lambda с Amazon EFS

Amazon объявила об общедоступной поддержке AWS Lambda для Amazon Elastic File System. Amazon EFS - это полностью управляемая эластичная файловая система с общим доступом, предназначенная для использования другими сервисами AWS.

С выпуском Amazon EFS для Lambda теперь мы можем легко обмениваться данными между вызовами функций. Он также открывает новые возможности, такие как создание / импорт больших библиотек и моделей машинного обучения непосредственно в функции Lambda. Давайте рассмотрим, как создать бессерверного диалогового чат-бота с ИИ с использованием функции Lambda и EFS.

В этом посте мы:

  • Создание эластичной файловой системы Amazon
  • Разверните и запустите экземпляр записной книжки SageMaker и подключите EFS к экземпляру.
  • Загрузите библиотеки PyTorch и предварительно обученную модель ConvAI в EFS.
  • Добавьте таблицу истории диалогов DynamoDB и конечную точку шлюза для сохранения и получения истории разговоров.
  • Разверните функцию Lambda движка чат-бота и включите для нее EFS.

Вот схема архитектуры:

Создание файловой системы EFS

В этом примере мы будем использовать CloudFormation для создания точки доступа EFS и EFS, конфигурация определяется следующим образом:

Обратите внимание, что мы будем использовать режим производительности EFS General Purpose, поскольку он имеет меньшую задержку, чем Max I / O.

Работа с Amazon SageMaker

Мы смонтируем EFS на Amazon SageMaker на ноутбуке SageMaker и установим модель PyTorch и ConvAI на EFS.

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

Давайте смонтируем путь EFS /py-libs в /home/ec2-user/SageMaker/libs directory:

Затем установите PyTorch и simpletransformers в lib/py-libs каталог:

!sudo pip --no-cache-dir install torch -t libs/py-libs
!sudo pip --no-cache-dir install torchvision -t libs/py-libs
!sudo pip --no-cache-dir install simpletransformers -t libs/py-libs

После установки всех пакетов загрузите предварительно обученную модель, предоставленную Hugging Face, затем распакуйте архив в каталог convai-model на EFS.

!sudo wget https://s3.amazonaws.com/models.huggingface.co/transfer-learning-chatbot/gpt_personachat_cache.tar.gz
!sudo tar -xvf gpt_personachat_cache.tar.gz -C libs/convai-model
!sudo chmod -R g+rw libs/convai-model

Теперь мы готовы поговорить с предварительно обученной моделью, просто позвоните model.interact().

Предварительно обученная модель, предоставляемая Hugging Face, работает хорошо сразу после установки и, вероятно, потребует меньшей тонкой настройки при создании чат-бота.

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

Создание таблицы AWS DynamoDB

Создайте таблицу DialogHistory для хранения истории диалогов, по крайней мере, с последним высказыванием пользователя. Мы можем использовать образцы шаблонов CloudFormation для настройки таблицы DynamoDB.

Обратите внимание, что мы должны создать конечную точку VPC для DynamoDB, даже если функция Lambda выполняется внутри общедоступной подсети VPC.

Настройка AWS Lambda для использования EFS

Мы будем использовать AWS SAM для создания функций Lambda и подключения точек доступа EFS к функции Lambda.

Сначала создайте ресурс функции Lambda, затем настройте файловую систему EFS для Lambda. Убедитесь, что EFS и Lambda находятся в одном VPC:

Добавление механизма беседы: AWS Lambda

В этом разделе мы создадим лямбда-функцию для связи между пользователями и моделью разговорного ИИ.

Мы будем содержать следующий исходный код в src/api.py:

Обратите внимание, что библиотека simpletransformers позволяет нам взаимодействовать с моделями локально с input(). Чтобы создать наш механизм чата, нам нужно переопределить методы по умолчанию interact и sample_sequenc в conv_ai:

Развертывание сервиса чат-бота

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

$sam deploy --capabilities CAPABILITY_NAMED_IAM --guided

Из выходных данных выше видно, что чат-бот развернут.

Пришло время протестировать нашего бота. Перейдите к списку ресурсов CloudFormation в Консоли управления AWS, чтобы найти имя функции Lambda и функцию Invoke lambda, используя следующую команду:

$aws lambda invoke --function-name "chat-efs-api-HelloFunction-KQSNKF5K0IY8" out --log-type Tail  \--query 'LogResult' --output text |  base64 -d

Результат будет выглядеть следующим образом:

Вот пример диалога:

>>hi there
how are you?
>>good, thank you
what do you like to do for fun?
>>I like reading, yourself?
i like to listen to classical music
......

Оно работает! Как видно из скриншота выше, чат-бот возвращает ответ на основе ввода от пользователя.

Однако мне известно о влиянии холодного запуска на время отклика. Первый запрос занял ~ 30 секунд для холодного запуска. Чтобы предотвратить холодный старт в наших лямбда-функциях, мы можем использовать Provisioned Concurrency, чтобы функции оставались теплыми:

В результате время ожидания функции разогрева сокращается до ~ 3 секунд:

Вот и все! Я надеюсь, что вы нашли эту статью полезной. Исходный код этой публикации можно найти в моем репозитории GitHub.