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

  1. Наземная правда: управляемая служба для крупномасштабных служб маркировки данных по запросу.
    (Создание примеров данных для контролируемых алгоритмов)
  2. Обучение: управляемый сервис для обучения и настройки моделей в любом масштабе.
    (Обучение модели)
  3. Вывод: управляемая служба для размещения готовых моделей и выполнения выводов на основе новых данных.
    (Развертывание модели)
  4. И чтобы собрать все это вместе, Notebook: сервер, размещенный на AWS, для специалистов по обработке данных, позволяющий получать доступ к трем вышеупомянутым функциям и управлять ими, а также выполнять множество других задач в области науки о данных.

Хотя размещенная служба Notebook предоставляет особенно удобный способ получить полный сервер для работы с Amazon SageMaker, во многих случаях требуется локальная настройка либо из-за стоимости, либо из-за простоты доступ или «настраиваемость».

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

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

TL;DR

Для занятых вот краткое изложение:

  • Размещенный экземпляр SageMaker Notebook поставляется со многими важными функциями, включая полный набор инструментов и библиотек, несколько ядер с новейшими фреймворками машинного обучения, поддержку графического процессора, интеграцию с Git и множество реальных примеров.
  • Тем не менее, это стоит денег, предполагает, что все данные будут загружены онлайн, требует доступа к Интернету и особенно входа в консоль AWS, и его может быть сложно настроить.
  • Чтобы преодолеть эти недостатки, я создал контейнер Docker, который предлагает аналогичную настройку, которую можно использовать локально на любом ноутбуке / настольном компьютере.
  • Реплицированные функции включают в себя полный сервер Jupyter Notebook и Lab, несколько ядер, SDK AWS и SageMaker, интерфейсы командной строки AWS и Docker, интеграцию с Git, вкладки примеров Conda и SageMaker.
  • Экземпляр, размещенный на AWS, и локальный контейнер не являются взаимоисключающими, и их следует использовать вместе для повышения качества работы с наукой о данных.

Полный исходный код образов Docker размещен на Github: https://github.com/qtangs/sagemaker-notebook-container

Образы Docker опубликованы в Docker Hub: https://hub.docker.com/r/qtangs/sagemaker-notebook

В этом посте

Я буду исследовать:

  • Зачем вообще нам нужен экземпляр Notebook?
  • Зачем нам нужен локальный контейнер Notebook?
  • Какие функции были воспроизведены?
  • Какие функции отсутствуют?
  • Как начать работу с контейнером?

Зачем вообще нам нужен экземпляр Notebook?

Прежде чем исследовать локальный экземпляр, давайте рассмотрим преимущества, предоставляемые экземпляром Amazon SageMaker Notebook:

  • Полная система по запросу. Для специалиста по обработке данных, который не особо разбирается в инфраструктуре, это самый простой способ начать работу с Amazon SageMaker. Используя Консоль AWS, за несколько щелчков мышью вы можете получить доступ к комплексной системе, оснащенной наиболее часто необходимыми библиотеками и инструментами.
  • Несколько ядер машинного обучения. Экземпляр Notebook предлагает различные встроенные ядра, включая стандартные Python 2 и 3, популярные фреймворки, такие как TensorFlow, MXNet, PyTorch и Chainer, а также другие среды выполнения, такие как R, PySpark.
  • Различный размер машины для разных рабочих нагрузок: вы можете выбрать один из самых основных типов многоцелевых экземпляров, таких как t2, t3 или m4, m5, до оптимизированных для вычислений (r4, r5) или мощных типов на базе графического процессора ( п2, п3).
  • Эластичный вывод с использованием компьютера с графическим процессором: при использовании p2, p3 обеспечивает повышение производительности с помощью графического процессора, но это дорого. Вместо этого вы можете присоединить дополнительный экземпляр Elastic Inference (тип eia1) для обучения и тестирования ваших моделей с использованием графического процессора за небольшую часть стоимости p2, p3.
  • Безопасность. Экземпляр Notebook защищен по умолчанию, вам необходимо войти в Консоль AWS, чтобы получить к нему доступ.
  • Интеграция с Git: вы можете связать экземпляр Notebook с репозиторием Git, размещенным на AWS CodeCommit, Github или в любом другом репозитории Git, чтобы включить контроль версий кода для всей вашей работы. Это особенно важно, если вы работаете в команде.
  • Множество примеров. Чтобы вы могли быстро приступить к работе, в каждый экземпляр AWS встроено множество примеров, большинство из которых взяты из Примеры AWS, размещенных на Github. С минимальными усилиями вы можете импортировать полный исходный код примера в свой собственный экземпляр.

Зачем нам нужен локальный контейнер Notebook?

Несмотря на значительные преимущества экземпляра Notebook, размещенного на AWS, есть несколько недостатков, которым может противодействовать локальный контейнер Notebook. Вот некоторые преимущества локального контейнера Notebook:

  • Снижение затрат. Запуск инстанса, размещенного на AWS, стоит денег; кроме того, пока нет возможности использовать спотовые инстансы, которые обычно используются для снижения стоимости инстансов EC2. Запуск локального контейнера ничего не стоит.
  • Простота использования локальных данных. Поскольку экземпляр SageMaker Notebook работает в облаке, он может получать доступ только к данным, расположенным в Интернете. Любые локальные данные должны быть сначала загружены либо в S3, либо в другое онлайн-хранилище. Это не требуется для локального контейнера, который может использовать простое монтирование тома Docker.
  • Пропуск консоли AWS: для доступа к экземпляру, размещенному на AWS, требуется вход в консоль AWS, а время ожидания составляет 12 часов, что означает, что вам необходимо входить в систему не реже одного раза в день. В локальном контейнере вы настраиваете учетные данные AWS один раз, и вам больше не нужно входить в систему впоследствии (кроме случаев, когда требуется доступ к S3 или другим сервисам AWS).
  • Автономный доступ. Еще одним преимуществом локального контейнера является то, что вы можете получить к нему доступ в любое время без подключения к Интернету, особенно если вы хотите сосредоточиться на очистке данных, разработке функций, анализе данных и т. д .; функции, не требующие обучающих серверов.
  • Настройка. Хотя экземпляр Notebook, предоставленный AWS, уже содержит множество библиотек и инструментов для общего использования, может потребоваться дополнительная настройка для конкретных случаев использования. SageMaker обеспечивает это с помощью конфигураций жизненного цикла и прямого доступа к терминалу. Однако временами это может казаться ограниченным, что не в последнюю очередь требует знания сценариев оболочки. Возможность легко настроить образ Docker со всеми инструментами, которые нужны команде специалистов по данным, является плюсом для локального контейнера.
  • Гибкость. С помощью образа Docker группа специалистов по данным может решить разместить его централизованно на сервере высокой емкости или создать кластеры экземпляров портативных компьютеров. Возможности безграничны.

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

Какие функции были воспроизведены?

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

Jupyter Notebook и Jupyter Lab

Это просто взято из официальных образов Docker Jupyter с некоторыми модификациями, чтобы соответствовать настройкам SageMaker Notebook, в том числе:

  • Назовите пользователя по умолчанию ec2-user и разрешите sudo доступ без пароля.
  • Разрешить настраиваемые версии Miniconda и Conda.
  • Пропустить Jupyter Hub
  • Установите для каталога Notebook значение /home/ec2-user/SageMaker

Мульти-ядра

Используйте среды Conda (conda env create) для создания нескольких ядер, соответствующих именам ядер SageMaker. Например:

  • conda_python2
  • conda_python3
  • conda_tensorflow_p36

Список ядер динамический, т.е. образ докера может содержать 1 или несколько ядер. Он устанавливается аргументом CONDA_ENVS при построении образов Docker. Изначально поддерживаемые среды Conda включают python2, python3, tensorflow_p36, mxnet_p36. Дополнительные ядра можно просто создать, добавив файлы среды Conda в папку base/utils/envs.

Пакеты SDK AWS и SageMaker

Каждое ядро ​​включает в себя как AWS Boto3 SDK, так и SageMaker SDK. Это важно для всего кода Python, взаимодействующего с сервисами AWS, включая услуги обучения и развертывания SageMaker.

AWS CLI

AWS CLI устанавливается для сценариев оболочки, взаимодействующих с AWS.

Примечание. И для AWS SDK, и для интерфейса командной строки требуется, чтобы учетные данные AWS были настроены один раз на хост-компьютере.

Docker CLI

Во многих примерах SageMaker используется docker для создания пользовательских образов для обучения. Вместо того, чтобы устанавливать полный Docker на Docker, что является сложной операцией, мы используем Docker Engine хоста. Для этого мы устанавливаем Docker CLI в образ Docker и полагаемся на сокет Docker хост-компьютера для подключения Docker Engine хоста. Это достигается включением -v /var/run/docker.sock:/var/run/docker.sock:ro при запуске контейнера.

Примечание. В Windows обновите монтирование до: -v //var/run/docker.sock:/var/run/docker.sock:ro.

Интеграция Git в Jupyter Lab

Git установлен, чтобы разрешить доступ Git непосредственно из контейнера. Кроме того, в Jupyter Lab установлено расширение jupyterlab-git для быстрого взаимодействия GUI с Git.

Вкладка Conda

Как и экземпляр, размещенный на AWS, экземпляр на основе Docker содержит вкладку Conda для управления средами Conda.

Примечание. Хотя это было включено для имитации фактического экземпляра, не рекомендуется вносить изменения в среду Conda отсюда. Вместо этого обновите соответствующие файлы YAML в base/utils/envs и перестройте образы Docker, чтобы ваши изменения были записаны и их можно было передать другим.

Вкладка Примеры SageMaker

Все примеры SageMaker, предоставленные AWS, были отражены в образе Docker вместе с простой функцией копирования в два щелчка, так что вы можете легко взять существующий пример и опробовать его. Другие примеры (из fast.ai и PyTorch) пока не включены, но могут быть добавлены в будущем.

Какие функции отсутствуют?

Поддержка GPU

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

Другие ядра

Другие ядра на основе Python можно легко добавить с помощью Conda. Однако для сред выполнения R и Spark в будущем потребуется дополнительная работа.

Местное обучение и выводы

С экземпляром, размещенным на AWS, вы можете запускать обучение и логический вывод на этом экземпляре, используя локальный режим SageMaker. В настоящее время контейнер Docker для этого не настроен. В будущем для поддержки этого будут добавлены сетевые конфигурации.

Автоматическое обновление с использованием последних настроек SageMaker

На данный момент конфигурации ядра требуют обновления вручную при каждом обновлении экземпляра SageMaker Notebook (новые версии SageMaker). В будущем их можно будет автоматически обновлять с помощью CloudWatch Events и AWS Lambda Functions.

Библиотеки Python

Чтобы образы Docker были максимально компактными, многие библиотеки не были включены в данные ядра. Если вам нужны определенные библиотеки в контейнере, вы можете создать свой собственный контейнер с файлом YAML пользовательской среды в папке base/utils/envs. В будущем я постараюсь упростить настройку.

Прочие инструменты

Некоторые инструменты, такие как nbdime, инструменты Jupyter Notebook Diff and Merge и plotlywidget, интерактивная графическая библиотека для Python с открытым исходным кодом, должны быть интегрированы в будущем.

Как начать работу с контейнером?

Инструкции можно найти в репозитории Github: https://github.com/qtangs/sagemaker-notebook-container

Резюме

Экземпляр Notebook Amazon SageMaker - важная часть платформы облачного машинного обучения AWS.

Мы надеемся, что репликация его в образ контейнера Docker еще больше упростит доступ к миру SageMaker.

Обратите внимание, что AWS также предоставляет контейнеры Docker для обучения и развертывания.

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

Спасибо, что прочитали. Оставьте комментарий ниже, чтобы поделиться своими мыслями.

Полный проект этой работы размещен на Github.