Обучение моделей машинного обучения часто занимает много времени и требует настройки и обслуживания инфраструктуры. Несмотря на то, что стремительная эволюция облака устранила многие болевые точки локальной инфраструктуры, даже в этом случае тяжелое и эффективное использование машин с экземплярами графического процессора может быть проблематичным при обучении моделей с интенсивными вычислениями с большим объемом обучения. данные.

В этой статье мы обсуждаем сквозной подход к обучению компьютерному зрению (CV), исследуя, как специалисты по машинному обучению (ML) могут точно настроить свои модели глубокого обучения, используя Amazon SageMaker, который предоставляет полностью управляемый сервис для всех. этапы жизненного цикла ML — маркировка и подготовка данных, построение модели, обучение и настройка, развертывание в облаке и на периферии, а также MLOps. Хотя это конкретный пример CV, он применим и для других крупномасштабных вариантов использования глубокого обучения.

Варианты использования в бизнесе и технические проблемы

Мы исследуем бизнес-вариант рынка модной одежды, который хотел бы обогатить свои метаданные изображениями, которые их продавцы загружают на платформу, тем самым улучшив организацию запасов и персонализацию для своих покупателей. В таком сценарии ожидается, что взаимодействие с клиентами увеличится за счет сокращения времени поиска для покупателей и предложения им выбора среди разных продавцов, которые предлагают аналогичные товары. Эта система должна быть способна прогнозировать различные стили одежды, которые в дальнейшем можно использовать для кластеризации и обогащения метаданных инвентаризации для подачи в конвейер рекомендаций.

Для крупномасштабного обучения компьютерному зрению (CV) для создания системы, описанной выше, стоимость инфраструктуры и управление инфраструктурой имеют решающее значение. Мы решаем эту проблему, используя учебные задания Amazon SageMaker, чтобы справиться с недифференцированной тяжелой работой.

  1. Большие объемы данных изображений могут значительно увеличить время запуска для обучения моделей глубокого обучения. Мы решаем эту проблему, загружая данные из Amazon S3 в Amazon FSx for Lustre (FSx), чтобы подготовить их для учебных заданий Amazon SageMaker.
  2. Точная настройка является важной темой, когда речь идет об обучении моделей CV, которые могут включать несколько итераций экспериментов по настройке гиперпараметров. Мы решаем эту проблему, используя возможности Автоматической настройки модели Amazon SageMaker.
  3. Для длительных заданий по обучению, использующих дорогостоящие ресурсы инфраструктуры, часто бывает сложно прозрачно отслеживать и максимизировать использование ресурсов путем выявления узких мест. Мы решаем эту проблему, используя возможности Amazon SageMaker Debugger.

Набор данных и используемые модели

Мы выбрали подмножество из набора данных DeepFashion для обучения модели для прогнозирования трех лучших классов модных изображений. В этом примере мы используем 30 ГБ обучающих данных (200 000 изображений), распределенных по 20 категориям модной одежды.

Несмотря на то, что существует множество архитектур моделей классификации изображений с открытым исходным кодом, в большинстве случаев использования с конкретными бизнес-требованиями обучение с нуля не приносит пользы. Это связано с отсутствием достаточно большого размеченного набора данных для обучения и длительным временем обучения, что связано с очень высокими затратами. В зависимости от размера доступного обучающего набора данных и его сходства с набором данных, на котором предварительно обучаются модели, эффективным подходом является переносное обучение путем точной настройки предварительно обученных нейронных сетей.

Настройка и архитектура обучения Amazon SageMaker

Amazon SageMaker помогает нам сэкономить время, которое в противном случае потребовалось бы для установки и настройки программного обеспечения и драйверов для глубокого обучения или создания инфраструктуры машинного обучения. Идея состоит в том, чтобы сэкономить это время специалистам по машинному обучению, чтобы они могли сосредоточиться на бизнес-проблеме с более быстрыми итерациями и запускать задания по обучению в масштабе за более короткий промежуток времени. Каждое задание удаленного обучения Amazon SageMaker имеет свой собственный эфемерный кластер, т. е. выделенные экземпляры EC2, действующие только в течение того количества секунд, которое необходимо для обучения модели. Этот кластер отключается сразу после завершения процесса. Концепция использования управляемых сервисов с заданиями удаленного обучения подробно описана в документе Обучение модели с помощью Amazon SageMaker и в видеоролике Точное обучение моделей машинного обучения с помощью Amazon SageMaker.

В этом примере мы используем собственный сценарий обучения с переносом обучения на предварительно обученную модель и используем управляемый контейнер SageMaker для PyTorch с помощью SageMaker Python SDK. Мы используем Amazon EC2 P4d Instances в качестве вычислений, которые имеют 8 графических процессоров NVIDIA A100 с тензорными ядрами и 96 процессоров. Это один из самых производительных вычислений в облаке. В блоге Глубокое погружение инстансов Amazon EC2 P4d обсуждались некоторые тесты, основанные на примерах глубокого обучения NVIDIA. Как объясняется в этом блоге, в зависимости от варианта использования важно начать с соответствующего экземпляра, чтобы максимизировать соотношение производительности и затрат.

Как показано в сквозной архитектуре, мы запускаем обучающее задание с пользовательским скриптом, который извлекает образ управляемого контейнера Amazon SageMaker из Amazon Elastic Container Registry (ECR) и развертывает его на учебном экземпляре ML. SageMaker извлекает обучающие данные и предварительно обученную модель, которые хранятся в корзинах Amazon S3. С помощью нескольких дополнительных строк кода и настройки контрольных точек модели мы также используем управляемое спотовое обучение в нашем эксперименте, чтобы снизить стоимость обучения до 70 % за счет использования Amazon EC2 Spot Instances. В качестве руководства по настройке можно использовать документацию Управляемое спотовое обучение в Amazon SageMaker. Компоненты Amazon FSx for Lustre, автоматической настройки модели и отладчика Amazon SageMaker Debugger мы рассмотрим в следующих разделах статьи.

В PyTorch с документацией SageMaker Python SDK содержатся подробные сведения о различных параметрах, которые можно использовать для создания обучающего оценщика SageMaker. Ниже приведен образец оценки обучения, который мы используем:

train_estimator = PyTorch(entry_point = 'fashion_classification_script.py',
            role = <sagemaker-role>,
            framework_version = '1.6.0',
            py_version = 'py3',
            instance_count = 1,
            instance_type = 'ml.p4d.24xlarge',
            output_path = 's3://<bucket-name>/job_output'
            code_location = 's3://<bucket-name>/job_code'
            checkpoint_s3_uri = 's3://<bucket-name>/job_checkpoints'
            use_spot_instances = True
)

Навигация по параметрам хранилища с помощью Amazon SageMaker

Крупномасштабное обучение CV сопряжено с накладными расходами на большие наборы данных, которые часто вызывают узкие места, связанные с сетью (загрузка данных из хранилища Amazon S3) и пропускной способностью дискового ввода-вывода (чтение данных с локального диска экземпляра Amazon EC2). сохранить »в память процессора). Важно использовать хранилище, которое может масштабироваться по емкости и производительности, чтобы справляться с требованиями рабочих нагрузок с высокой пропускной способностью и файловыми операциями с малой задержкой. Amazon SageMaker предлагает различные варианты хранения обучающих данных, применимость которых зависит от конкретного варианта использования:

  • Amazon S3 Файловый режим — он прост в использовании и включает в себя загрузку набора данных непосредственно с Amazon S3 в зашифрованный том Amazon Elastic Block Store (EBS), подключенный к учебному экземпляру. Преимущества кэширования файловой системы и хорошие как последовательное, так и случайное чтение для небольшого набора данных. Это не идеальный вариант для больших наборов данных из-за необходимого времени загрузки для каждого учебного задания.
  • Режим конвейера Amazon S3 — в отличие от загрузки всего набора данных, он включает потоковую передачу набора данных из Amazon S3 в канал операционной системы для стабильной пропускной способности ввода-вывода и более быстрого запуска обучения. Это также эффективно помогает с разделением данных на GPU. Ограничение этого подхода заключается в том, что он предлагает последовательный доступ и поддерживает только tf.data и библиотеку MLIO.
  • Быстрый файловый режим — этот подход сочетает в себе простоту использования файлового режима с производительностью конвейерного режима. Он обеспечивает высокопроизводительный доступ к данным путем прямой потоковой передачи из Amazon S3 в контейнер без изменений кода по сравнению с существующим файловым режимом. Лучше всего это работает, когда данные считываются последовательно, а время запуска меньше, когда в предоставленной корзине S3 меньше файлов. Подробнее об этом можно прочитать в блоге Объявление Fast File Mode для Amazon SageMaker.
  • Amazon Elastic File System (EFS) — допустимый вариант, если ваши данные находятся в EFS, а не в Amazon S3. Это связано с накладными расходами на подготовку хранилища локальной файловой системы и настройку VPC и безопасности для него.
  • Плагин Amazon S3 PyTorch — если вы используете инфраструктуру PyTorch для своих учебных заданий, этот плагин как часть контейнера Amazon SageMaker PyTorch 1.9 позволяет напрямую передавать данные с высокой пропускной способностью из S3, устраняя необходимость предоставления локального вместимость склада. Подробнее об этом можно прочитать в блоге Анонсируем плагин Amazon S3 для PyTorch.
  • Amazon FSx for Lustre (FSx) — это полностью управляемая высокопроизводительная файловая система, позволяющая считывать и записывать данные с высокой пропускной способностью, оптимизированная для высокопроизводительных вычислений и рабочих нагрузок машинного обучения. Это позволяет лениво загружать большие наборы данных изначально из Amazon S3 в файловую систему FSx и обеспечивает лучшее чтение и запись произвольного доступа. Хотя для этого требуется индивидуальная настройка VPC и групп безопасности, а запуск его поверх Amazon S3 требует дополнительных затрат, он сокращает время запуска обучения и предлагает несколько вариантов настройки для значительного повышения производительности для крупномасштабного обучения.

Чтобы более подробно ознакомиться с эталонными тестами вариантов хранения, которые кратко обсуждались выше, обратитесь к блогу Выберите лучший источник данных для обучения Amazon SageMaker.

Ускорьте обучение, используя Amazon FSx для Lustre

В качестве учебного задания в этой статье мы будем использовать FSx для загрузки данных о модной одежде объемом 30 ГБ с Amazon S3. Настройка может быть выполнена следующими способами:

Как поясняется в документации Что такое Amazon FSx для Lustre, для обеспечения безопасности данных он по умолчанию настраивается в VPC — это означает, что если задание обучения требует загрузки внешних зависимостей, должен быть дополнительный настройка подсети для доступа к общедоступному Интернету для библиотек. Подробности этой расширенной настройки будут обсуждаться в следующем блоге. Для этого варианта использования мы извлекаем значения по умолчанию subnet и security-group после создания файловой системы FSx и расширяем параметры train_estimator, чтобы задание обучения SageMaker выполнялось в том же VPC.

После создания файловой системы и интеграции репозитория данных с корзиной Amazon S3, содержащей набор данных, нам потребуется получить file-system-id и mount-name для настройки канала данных следующим образом (SDK Doc):

train_data = FileSystemInput(file_system_id = '<file-system-id>',
                file_system_type = 'FSxLustre',
                directory_path = '/<mount-name>/deepfashion/train',
                file_system_access_mode = 'rw')
val_data = FileSystemInput(file_system_id = '<file-system-id>',
                file_system_type = 'FSxLustre',
                directory_path = '/<mount-name>/deepfashion/val',
                file_system_access_mode = 'rw')
data_channels = {'train': train_data, 'val': val_data}

Автоматическая настройка модели с помощью Amazon SageMaker

При обучении моделей машинного обучения определенному алгоритму двумя основными рычагами, которые необходимо использовать, являются предварительная обработка данных и разработка функций, а также настройка нескольких гиперпараметров, которые приведут к модели, которая будет работать лучше всего по выбранной метрике. Настройка этих значений гиперпараметров вручную часто оказывается очень утомительным процессом проб и ошибок.

Именно здесь мы используем возможности автоматической настройки модели SageMaker. Как показано в приведенном ниже коде, мы просто указываем желаемые гиперпараметры с соответствующими диапазонами, целевую метрику, которую мы хотим оптимизировать, и общее количество учебных заданий, которые мы хотим запускать параллельно.

hp_autotuner_ranges = {'lr': ContinuousParameter(0.001, 0.1),
            'batch-size': CategoricalParameter([64,128,256,512])
}
obj_metric = {'name': 'average train Loss',
              'type': 'Minimize',
              'definition': [{'Name': 'average train Loss', 
                              'Regex': 'train-loss: ([0-9\\.]+)'}]}
        
autotuner_estimator = HyperparameterTuner(train_estimator,
               objective_metric_name = obj_metric['name'],
               hyperparameter_ranges = hp_autotuner_ranges,
               metric_definitions = obj_metric['definition'],
               max_jobs = 4,
               max_parallel_jobs = 2,
               objective_type = obj_metric['type'],
               early_stopping_type='Auto')
autotuner_estimator.fit(inputs = data_channels)

SageMaker берет на себя управление эфемерной инфраструктурой выполнения этих параллельных обучающих заданий, по умолчанию использует байесовскую оптимизацию для выбора значений гиперпараметров, обеспечивающих наилучшую производительность модели на основе заданной целевой метрики, и сохраняет наилучшую модель в Amazon S3. Этот подход также можно использовать для ранней остановки крупномасштабных учебных заданий.

Поскольку Автоматическая настройка моделей Amazon SageMaker становится более эффективной благодаря горячему запуску заданий по настройке гиперпараметров, вы можете использовать родительские задания по настройке с предварительными знаниями, чтобы ускорить текущий процесс настройки и снизить общие затраты. Обратите внимание, что хотя байесовский и случайный поиск для настройки гиперпараметров предлагается как встроенный, вы также можете добавить свой собственный алгоритм оптимизации гиперпараметров в Amazon SageMaker. Записная книжка hpo_pytorch_mnist.ipynb [SDK] — хороший пример для понимания того, как автоматическая настройка модели работает с Amazon SageMaker.

Максимальное использование ресурсов с помощью Amazon SageMaker Debugger

Крупномасштабное обучение CV предполагает использование графических процессоров, которые являются дорогостоящими ресурсами. Если не осуществлять тщательный мониторинг, мы рискуем не максимизировать соотношение производительности и затрат из-за узких мест ввода-вывода и сети или недостаточного использования памяти ЦП/ГП. В этом примере мы используем Amazon SageMaker Debugger для получения Отчета о профилировании нашего учебного задания, чтобы определить возможные основные причины узких мест и оптимизировать использование инфраструктуры в целом. Их можно захватывать и отслеживать программно с помощью Amazon SageMaker Python SDK или визуально с помощью Amazon SageMaker Studio.

Как показано ниже, это не только помогает нам получить визуальный обзор, но также предоставляет рекомендации (путем агрегирования анализа правил мониторинга и профилирования), которые помогают настроить параметры и перераспределить ресурсы для максимальной эффективности.

В блогах Выявите узкие места, улучшите использование ресурсов и сократите затраты на обучение машинному обучению с помощью функции глубокого профилирования в Amazon SageMaker Debugger и записной книжки tf-mnist-builtin-rule.ipynb приведены пошаговые инструкции по различным вариантам получения дополнительных результатов. инсайты и рекомендации. Помимо системных ресурсов, Amazon SageMaker Debugger также может помочь в сборе конкретных показателей обучения модели, как описано в блоге Обнаружение скрытых, но нетривиальных проблем в переносе моделей обучения с помощью Amazon SageMaker Debugger.

Заключение

В этой статье мы обсудили эффективный подход к обучению модели CV со значительным объемом набора данных. Мы сосредоточились на бизнес-проблеме, чтобы настроить модель глубокого обучения и выполнить автоматическую настройку модели. Чтобы достичь этого, мы использовали Amazon SageMaker, чтобы позаботиться о тяжелой работе с недифференцированной инфраструктурой. Мы кратко обсудили различные подходы к загрузке файлов, а затем подробно рассмотрели использование Amazon FSx for Lustre. Мы также визуализировали использование ресурсов с помощью Amazon SageMaker Debugger, чтобы определить узкие места для будущих оптимизаций.

Сквозная архитектура, которая была реализована и визуализирована ранее, включает автономный вывод модели с использованием SageMaker Batch-transform. Это не было рассмотрено в этом посте. Кроме того, в этой статье не обсуждалась общая стоимость владения (TCO) для вышеуказанной архитектуры. Пожалуйста, дайте мне знать, если это интересная тема, чтобы я мог опубликовать их в следующей части этого блога.

Благодарность:Выражаю особую благодарность Меган Леони, моему наставнику, за помощь в работе над проектом и рецензирование этой статьи.