Автоматическая синхронизация зависимостей 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.