Бессерверное машинное обучение на 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.