Автоматическая синхронизация зависимостей Python и моделей машинного обучения с AWS EFS для своей функции AWS Lambda

Первоначально опубликовано на https://www.philschmid.de.

Вступление

Частью успешного использования машинного обучения в производственной среде является использование MLOps. MLOps улучшает DevOps с помощью непрерывного обучения (CT). Таким образом, основные компоненты MLOps включают непрерывную интеграцию (CI), непрерывную доставку (CD) и непрерывное обучение (CT). Nvidia написала статью о том, что такое MLOps в деталях.

Меня зовут Филипп, я живу в Нюрнберге, Германия. В настоящее время я работаю инженером по машинному обучению в стартапе-технологическом инкубаторе. На работе я разрабатываю и внедряю облачные архитектуры машинного обучения для финансовых и страховых компаний. Я большой поклонник бессерверного типа и предоставляю модели машинного обучения бессерверным способом. Я уже написал две статьи о том, как использовать модели глубокого обучения, такие как BERT, в бессерверной среде, такой как AWS Lambda.

Сложным препятствием для бессерверного машинного обучения с помощью таких инструментов, как AWS Lambda, Google Cloud Functions, Azure Functions было хранилище. Tensorflow и Pytorch имеют огромный размер, а более новые современные модели, такие как BERT, имеют размер более 300 МБ.

В июле этого года AWS добавила поддержку Amazon Elastic File System (EFS), масштабируемой и эластичной файловой системы NFS для AWS Lambda. Это позволяет нам монтировать файловые системы AWS EFS к функциям AWS Lambda.

До сегодняшнего дня было очень сложно синхронизировать зависимости или файлы моделей с файловой системой AWS EFS. Вы можете сделать это с помощью AWS Datasync или запустить экземпляр EC2 в той же подсети и VPC и загружать файлы оттуда.

По этой причине я создал набор инструментов MLOps под названием efsync. Efsync - это инструмент CLI / SDK, который автоматически синхронизирует файлы из S3 или локальной файловой системы с AWS EFS и позволяет устанавливать зависимости со средой выполнения AWS Lambda непосредственно в файловую систему EFS. Интерфейс командной строки прост в использовании, вам нужен только доступ к учетной записи AWS и запущенной файловой системе AWS EFS.

Архитектура

Быстрый старт

  • Установить через pip3
  • синхронизировать зависимости или файлы pip с AWS EFS

Случаи применения

Efsync охватывает 5 вариантов использования. С одной стороны, он позволяет вам установить необходимые зависимости, с другой стороны, efsync помогает вам подготовить ваши модели, будь то синхронизация из S3 в EFS или локальная загрузка с помощью SCP. Я создал пример Блокноты Jupyter для каждого варианта использования.

5 вариантов использования состоят из:

  • установить зависимости Python со средой выполнения AWS Lambda непосредственно в файловую систему EFS и использовать их в функции AWS Lambda. Пример
  • синхронизировать файлы из S3 в файловую систему EFS. Пример
  • загружать файлы с помощью SCP в файловую систему EFS. Пример
  • Установите зависимости Python и выполните синхронизацию из S3 в файловую систему EFS. Пример
  • Установите зависимости Python и загрузите файлы с помощью SCP файловой системы EFS. Пример

Примечание. Каждый пример можно запустить в Google Colab.

Возможности конфигурации реализации

Есть 4 различных способа использовать efsync в вашем проекте:

  • Вы можете создать yaml конфигурацию и использовать SDK.
  • Вы можете создать python dict и использовать SDK.
  • Вы можете создать yaml конфигурацию и использовать интерфейс командной строки.
  • Вы можете использовать CLI с параметрами.

Вы можете найти примеры для каждой конфигурации в Репозитории Github. Я также включил примеры конфигурации для различных вариантов использования.

Примечание: если вы синхронизируете файл с SCP из локального каталога (например, model/bert) в efs (my_efs_model), efsync синхронизирует модель с my_efs_model/bert, это происходит из-за того, что scp загружает файлы рекурсивно.

Примеры

В следующем примере показано, как установить зависимости Python в файловую систему EFS и затем синхронизировать файлы из S3 в файловую систему EFS. Для целей конфигурации мы должны создать файлы efsync.yaml и requirements.txt, в которых хранятся наши зависимости и конфигурация.

1. Установите efsync

2. Создайте requirements.txt с зависимостями

3. Создайте efsync.yaml со всей необходимой конфигурацией

efsync.yaml содержит всю конфигурацию, например:

Стандартная конфигурация

  • efs_filesystem_id: идентификатор файловой системы AWS EFS (точка монтирования).
  • subnet_Id: идентификатор подсети файловой системы EFS, в которой выполняется.
  • ec2_key_name: Требуемое имя ключа для запуска экземпляра EC2.
  • aws_profile: профиль IAM с необходимыми разрешениями, настроенный в .aws/credentials.
  • aws_region: регион AWS, в котором работает файловая система EFS.

Конфигурации зависимостей Pip

  • efs_pip_dir: каталог pip на EC2, куда будут установлены зависимости.
  • python_version : версия Python, используемая для установки пакетов pip - ›должна использоваться как среда выполнения лямбда.
  • requirements: Путь + файл к requirements.txt, который содержит зависимости устанавливаемых пакетов.

Конфигурации S3

  • s3_bucket: Должно быть загружено имя корзины S3 из файлов.
  • s3_keyprefix: префикс ключа S3 для каталога / файлов
  • file_dir_on_ec2: Имя каталога, в котором будут сохранены ваши файлы S3.

4. Запустите efsync wit efsync.yaml

Резюме

С помощью efsync вы можете легко синхронизировать файлы из S3 или локальной файловой системы автоматически с AWS EFS и позволяет устанавливать зависимости со средой выполнения AWS Lambda непосредственно в файловую систему EFS. Установка и синхронизация файлов из S3 занимает около 6 минут, только установка зависимостей - около 4–5 минут, а синхронизация файлов - около 2 минут.

Вы можете найти библиотеку на Github. Не стесняйтесь создавать Pull Request или Issues, если у вас есть какие-либо вопросы или улучшения.

Спасибо за прочтение. Если у вас есть какие-либо вопросы, свяжитесь со мной или прокомментируйте эту статью. Вы также можете связаться со мной в Twitter или LinkedIn.