Технический ландшафт машинного обучения за последние несколько лет вырос ошеломляюще быстро… Будь то инструменты или методы, скачок огромен.

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

В компании, в которой я работаю, есть обширный исследовательский отдел, и многие сверхразумные люди работают над интересными проектами… но масштабы отдела (и скорость, с которой он рос) увеличились вместе с его требованиями к масштабированию, мониторингу и CI/ CD.

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

Примечание. Модель, с которой мы будем работать, не важна… она самая простая из существующих… вы можете повторить эту историю с любой другой моделью, которая вам нравится, если SageMaker поддерживает ее и вы уверены, что сможете заполнить пробелы.

Настраивать

Аккаунт AWS

Учетные данные AWS CLI

Домен SageMaker — создайте домен SageMaker с помощью консоли и определите роли AIM для этого домена, включая:
1. SageMaker
2. Корзину S3 для домена SageMaker и любой другой, к которому вы, возможно, захотите получить доступ
3. Дайте ему также SNS

Для простоты я предлагаю предоставить полный доступ к каждому из них, а детализированные разрешения займутся позже.

Простая модель для работы

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

Предсказать выживание на Титанике

Это настолько просто, насколько это возможно. Если бы я мог найти что-то с еще меньшей предварительной обработкой, я бы это сделал.

Единственное, что необходимо, — это набор данных, который вы можете получить, помимо прочего, на Kaggle.



Если вам интересно, вы можете найти дополнительные ресурсы о том, как и почему работает модель и как ее улучшить.

Структура проекта и код

  1. Запустите SageMaker Studio
  2. Создайте блокнот с именем «titanic-train-invoke-notebook.ipynb» в корневой папке студии.
  3. Загрузите файл train.csv в корневую папку студии.
  4. Создайте папку с именем «код»
  5. В папке «code» создайте файл requirements.txt.
  6. В папке «code» создайте sklearn-titanic-train-job.py.

требования.txt

sagemaker-inference==1.6.1

sklearn-titanic-train-job.py

Развертывание модели в конечной точке RealTime

Вот и все, вы готовы построить и развернуть свою модель… обратите внимание, что мы не использовали никаких мастеров или быстрых стартов, поэтому у нас будет лучшее понимание того, что мы создаем.

Чтобы просто просмотреть блокнот, мы:

  1. Импортировать
  2. Загрузка данных: это требует некоторого объяснения… здесь происходит следующее: мы загружаем данные в S3, а затем сообщаем заданию обучения, где находятся данные, а затем, когда задание обучения начинается, данные будут загружены на компьютер выполнение обучающего задания для потребления.
  3. Создайте оценщик, указав, где находится обучающий код (исходный каталог и точка входа), на каком экземпляре мы хотим обучаться и версии.
  4. подходит для нашей модели
  5. Развернуть конечную точку

Итак, без лишних слов, продолжайте и запустите код в блокноте.

После запуска блокнота вы увидите трассировку журнала для задания обучения и имя конечной точки, которое было создано для вас… что-то вроде этого:

'sagemaker-scikit-learn-xxxx-xx-xx-xx-xx-xx-xxx'

экспериментировать

Давайте пойдем и посмотрим на то, что мы создали здесь.

  1. Перейдите в консоль AWS и откройте SageMaker.
  2. Посмотрите «Обучающие задания» на вкладке «Обучение» — там вы найдете задание по обучению, которое мы запускаем в нашей записной книжке.
  3. Посмотрите на «Модели» под выводом. Там вы найдете модель, которую мы только что обучили.
  4. Посмотрите «Конфигурация конечной точки» в разделе «Вывод», там вы найдете конфигурацию конечной точки, созданную для вас.
  5. Наконец, посмотрите «Конечные точки», чтобы увидеть свою конечную точку.

А теперь попробуем что-нибудь предсказать…

Вернитесь к своей записной книжке, создайте еще одну ячейку и выполните следующее:

deployment.predict([[1,1,25,1,1,8,1]])
-> array([1])

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

Мы можем сделать лучше. Давайте попробуем поработать над чем-нибудь покрасивее.

Регистрация модели

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

Во-первых, нам нужно будет создать Группу пакетов моделей.

После запуска этого скрипта вы должны получить ответ, подобный этому:

ModelPackageGroup Arn : arn:aws:sagemaker:us-east-1:...:model-package-group/titanic-survival

Замечательно, у нас есть группа… теперь мы готовы зарегистрировать версию модели в этой группе

Чтобы зарегистрировать вашу модель с версией в группе моделей, которую мы только что создали, вам потребуется следующее:

  1. URL-адрес модели — это путь S3, по которому ваша модель была сохранена после обучения (куда бы вы ее ни загрузили, просто не забудьте предоставить SageMaker достаточно разрешений для чтения из этого сегмента).
  2. Контейнер, который вы хотите использовать. В документации AWS вы найдете инструкции по созданию пользовательского контейнера… нам это не нужно, мы можем использовать готовый контейнер, который предоставляет AWS.
  3. Переменные среды

Чтобы найти их, перейдите в SageMaker → вывод → модели
и выберите Расположение данных модели и Изображение в описании модели.

SAGEMAKER_SUBMIT_DIRECTORY — эта переменная среды должна указывать на расположение S3, где находится файл tar.gz с файлами в вашем каталоге «code», в нашем случае: sklearn -titanic-train-job.py и requirements.txt

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

ModelPackage Version ARN : arn:aws:sagemaker:us-east-1:...:model-package/titanic-survival/1

Обратите внимание, что мы создали версию модели со статусом «PendingManualApproval», потому что этот шаг больше подходит для правильного рабочего процесса CI/CD, когда исследователь разрабатывает модель, а затем она проходит утверждение от разных заинтересованные стороны… то же самое, что и PR в коде приложения.

Давайте одобрим нашу модель… Откройте SageMaker-Studio → Ресурсы SageMaker → Реестр моделей -> Титаник-выживание
И измените статус вашей модели на «Утверждено»

Теперь мы создадим «Модель» из нашей версии пакета.

Выполнив следующее, вы должны получить что-то вроде этого:

Model name : titanic-survival-v1
Model arn : arn:aws:sagemaker:us-east-1:...:model/titanic-survival-v1

Развертывание зарегистрированной модели в конечной точке RealTime

Конфигурация конечной точки

И сама конечная точка

Давайте вызовем эту конечную точку сейчас

Развертывание модели на бессерверной конечной точке

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

Развертывание модели на асинхронной конечной точке

Асинхронные конечные точки будут вызываться с путем s3, указывающим на данные объекта, которые вы хотите предсказать.
Файл будет обработан, и результаты будут сброшены по другому пути по вашему выбору… имейте в виду, что нет никакого способа для корреляции между запросом и ответом без уведомлений SNS. Затем данные исходного и целевого файлов будут связаны через номер строки.

экспериментировать

Асинхронные конечные точки имеют ограничение в 1 ГБ на размер файла, который мы можем отправить на него, и. ограничения памяти в зависимости от размера вашей модели и других факторов.

Узнайте, каковы требования и ограничения вашего развертывания, и найдите правильную настройку между размером полезной нагрузки и параметром MaxConcurrentInvocationsPerInstance .

Давайте создадим образец для работы. Это может быть так просто:
1,1,25,1,1,8,1
1,1,25,1,1,8,1
1,1, 25,1,1,8,1
1,1,25,1,1,8,1
1,1,25,1,1,8,1
1,1 ,25,1,1,8,1
1,1,25,1,1,8,1
1,1,25,1,1,8,1
1, 1,25,1,1,8,1
1,1,25,1,1,8,1
1,1,25,1,1,8,1
1 ,1,25,1,1,8,1
1,1,25,1,1,8,1
1,1,25,1,1,8,1
1,1,25,1,1,8,1
1,1,25,1,1,8,1
1,1,25,1,1,8,1

Поместите его в CSV-файл и загрузите в папку, из которой SageMaker имеет разрешение на чтение.

После этого вы можете вызвать конечную точку, используя

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

Заключение

Мы рассмотрели SageMaker с точки зрения DevOps или инженера, который не занимается созданием моделей и не экспериментирует с ними.

Сегодня у AWS много недостающих деталей, но я уверен, что они исправят их раньше, чем позже.

Документации AWS нет ни здесь, ни там, к сожалению… Будучи DevOps, вы, вероятно, очень мало в ней поймете, так как она сильно зависит от понимания хоть какого-то ML (и на более сложном примере, на мой взгляд). Как исследователь, вы, вероятно, поймете меньше из-за технических аспектов.

Этот пост был достаточно длинным, и я сделаю еще один для более продвинутых вкусностей.