Технический ландшафт машинного обучения за последние несколько лет вырос ошеломляюще быстро… Будь то инструменты или методы, скачок огромен.
SageMaker — это инфраструктура AWS для «быстрой подготовки, создания, обучения и развертывания высококачественных моделей машинного обучения за счет объединения широкого набора возможностей, специально созданных для машинного обучения».
В компании, в которой я работаю, есть обширный исследовательский отдел, и многие сверхразумные люди работают над интересными проектами… но масштабы отдела (и скорость, с которой он рос) увеличились вместе с его требованиями к масштабированию, мониторингу и CI/ CD.
В попытках закрепить это SageMaker был кандидатом, поэтому я попытался немного поэкспериментировать с ним. Вот результат создания, регистрации, настройки и развертывания вашей модели в SageMaker.
Примечание. Модель, с которой мы будем работать, не важна… она самая простая из существующих… вы можете повторить эту историю с любой другой моделью, которая вам нравится, если SageMaker поддерживает ее и вы уверены, что сможете заполнить пробелы.
Настраивать
Домен SageMaker — создайте домен SageMaker с помощью консоли и определите роли AIM для этого домена, включая:
1. SageMaker
2. Корзину S3 для домена SageMaker и любой другой, к которому вы, возможно, захотите получить доступ
3. Дайте ему также SNS
Для простоты я предлагаю предоставить полный доступ к каждому из них, а детализированные разрешения займутся позже.
Простая модель для работы
Поскольку речь идет не о модели, которую нужно запустить, а об использовании AWS для ее запуска, я выбрал самую простую модель, которую я мог придумать, которая также хорошо известна.
Предсказать выживание на Титанике
Это настолько просто, насколько это возможно. Если бы я мог найти что-то с еще меньшей предварительной обработкой, я бы это сделал.
Единственное, что необходимо, — это набор данных, который вы можете получить, помимо прочего, на Kaggle.
Титаник: машинное обучение после катастрофы
Начните здесь! Прогнозируйте выживание на «Титанике и ознакомьтесь с основами машинного обученияwww.kaggle.com»
Если вам интересно, вы можете найти дополнительные ресурсы о том, как и почему работает модель и как ее улучшить.
Структура проекта и код
- Запустите SageMaker Studio
- Создайте блокнот с именем «titanic-train-invoke-notebook.ipynb» в корневой папке студии.
- Загрузите файл train.csv в корневую папку студии.
- Создайте папку с именем «код»
- В папке «code» создайте файл requirements.txt.
- В папке «code» создайте sklearn-titanic-train-job.py.
требования.txt
sagemaker-inference==1.6.1
Развертывание модели в конечной точке RealTime
Вот и все, вы готовы построить и развернуть свою модель… обратите внимание, что мы не использовали никаких мастеров или быстрых стартов, поэтому у нас будет лучшее понимание того, что мы создаем.
Чтобы просто просмотреть блокнот, мы:
- Импортировать
- Загрузка данных: это требует некоторого объяснения… здесь происходит следующее: мы загружаем данные в S3, а затем сообщаем заданию обучения, где находятся данные, а затем, когда задание обучения начинается, данные будут загружены на компьютер выполнение обучающего задания для потребления.
- Создайте оценщик, указав, где находится обучающий код (исходный каталог и точка входа), на каком экземпляре мы хотим обучаться и версии.
- подходит для нашей модели
- Развернуть конечную точку
Итак, без лишних слов, продолжайте и запустите код в блокноте.
После запуска блокнота вы увидите трассировку журнала для задания обучения и имя конечной точки, которое было создано для вас… что-то вроде этого:
'sagemaker-scikit-learn-xxxx-xx-xx-xx-xx-xx-xxx'
экспериментировать
Давайте пойдем и посмотрим на то, что мы создали здесь.
- Перейдите в консоль AWS и откройте SageMaker.
- Посмотрите «Обучающие задания» на вкладке «Обучение» — там вы найдете задание по обучению, которое мы запускаем в нашей записной книжке.
- Посмотрите на «Модели» под выводом. Там вы найдете модель, которую мы только что обучили.
- Посмотрите «Конфигурация конечной точки» в разделе «Вывод», там вы найдете конфигурацию конечной точки, созданную для вас.
- Наконец, посмотрите «Конечные точки», чтобы увидеть свою конечную точку.
А теперь попробуем что-нибудь предсказать…
Вернитесь к своей записной книжке, создайте еще одну ячейку и выполните следующее:
deployment.predict([[1,1,25,1,1,8,1]]) -> array([1])
Мы успешно отправили информацию о пассажирах и предсказали результат, насколько это возможно в нашей модели.
Мы можем сделать лучше. Давайте попробуем поработать над чем-нибудь покрасивее.
Регистрация модели
Мы хотим взять обученную нами модель и назначить ее в репозиторий, где у нее будет версия. Таким образом, мы можем обсудить модель и ее развертывание в неизменяемых версиях и на общем языке.
Во-первых, нам нужно будет создать Группу пакетов моделей.
После запуска этого скрипта вы должны получить ответ, подобный этому:
ModelPackageGroup Arn : arn:aws:sagemaker:us-east-1:...:model-package-group/titanic-survival
Замечательно, у нас есть группа… теперь мы готовы зарегистрировать версию модели в этой группе
Чтобы зарегистрировать вашу модель с версией в группе моделей, которую мы только что создали, вам потребуется следующее:
- URL-адрес модели — это путь S3, по которому ваша модель была сохранена после обучения (куда бы вы ее ни загрузили, просто не забудьте предоставить SageMaker достаточно разрешений для чтения из этого сегмента).
- Контейнер, который вы хотите использовать. В документации AWS вы найдете инструкции по созданию пользовательского контейнера… нам это не нужно, мы можем использовать готовый контейнер, который предоставляет AWS.
- Переменные среды
Чтобы найти их, перейдите в 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 (и на более сложном примере, на мой взгляд). Как исследователь, вы, вероятно, поймете меньше из-за технических аспектов.
Этот пост был достаточно длинным, и я сделаю еще один для более продвинутых вкусностей.