Как развернуть любую модель машинного обучения в Sagemaker и сделать ее автоматически масштабируемой.

Прочитав эту статью, вы сможете развернуть любую модель машинного обучения на Sagemaker за считанные минуты. Единственная предпосылка — докер. Даже люди с новым чипом Apple M1 смогут использовать этот метод.

Модель будет представлена ​​как конечная точка HTTP. Этот метод почти аналогичен тому, как мы развертываем его на AWS ECS с помощью fargate, но шаги, которые он выполняет, составляют почти половину этого.

Необходимые действия

  1. Создание образа Docker.
  2. Проталкивание изображения на ECR.
  3. Ссылка на ECR в sagemaker.
  4. Настройка конечной точки с указанием ресурсов.
  5. Создание конечной точки.

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

1. '/ping' -  GET call
2. '/invocations' -  POST call

Sagemaker использует конечную точку ping для проверки работоспособности и вызовы в качестве основной точки входа для логического вывода. Чтобы облегчить ожидание, мы будем использовать python flask для раскрытия этих конечных точек. Пример кода вы можете найти по ссылке.

Вы также можете сохранить модель в папке программы или загрузить ее с S3 во время выполнения.

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

Примечание для чипа Apple M1/M2:

Вам необходимо собрать образ докера в архитектуре x86–64/amd64, поскольку основная архитектура чипа M1/M2 — это arm.

Ниже приведен пример кода:

docker buildx build --platform=linux/amd64 -t sagemaker-sample . 

ECR:

Теперь, если вы создали образ Docker, нам нужно отправить его в AWS ECR (Elastic Container Registry). Если вы не знакомы с ECR, это не что иное, как репозиторий для хранения вашего образа докера в AWS.

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

Вам нужно следовать командам push, как указано, за исключением 2-й команды, поскольку мы уже создали образ докера.

Создатель мудрецов:

Теперь, когда наш образ докера находится в ECR, мы можем начать настройку Sagemaker. Откройте панель инструментов AWS Sagemaker, перейдите в раздел «Вывод/Модели» и нажмите «Создать модель».

Укажите название вашей модели и URI изображения из ECR.

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

После создания модели нам нужно настроить нашу конечную точку. Перейдите к настройке Inference/Endpoint и нажмите «Создать конфигурацию конечной точки».

Sagemaker предоставляет 2 варианта настройки

  1. Подготовлено
  2. Бессерверный

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

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

Конечные точки:

Теперь, когда мы добавили нашу конфигурацию, пришло время создать нашу конечную точку, просто перейдите в Inference/Endpoints и нажмите «Создать и настроить конечную точку». Назовите свою конечную точку и выберите конфигурацию конечной точки, а затем создайте конечную точку.

После этого потребуется 1–2 минуты в зависимости от времени загрузки модели, чтобы развернуть ее на сервере и предоставить для нее конечную точку.

Затем вы можете использовать URL-адрес конечной точки, чтобы получить вывод, или использовать клиент boto3 для доступа к нему через ваш код Python.

Ниже приведен образец для того же:

amz = boto3.client('sagemaker-runtime',
                    aws_access_key_id=aws_access_key_id,
                    aws_secret_access_key=aws_secret_access_key,
                    region_name=region_name)
response = amz.invoke_endpoint(
                   EndpointName=self.endpoint,
                   Body=payload,
                   ContentType='application/json')
response = json.loads(response['Body'].read())

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

Заключение

После реализации этого любой специалист по данным/инженер машинного обучения может самостоятельно разрабатывать, развертывать и поддерживать свой собственный сервис. Это всего лишь простой способ развертывания на sagemaker. AWS sagemaker — это обширная организация, которая также предоставляет студийную поддержку, аналогичную Google Colab. Мы также можем выполнить развертывание непосредственно оттуда, но эти шаги требуют некоторой доработки. Я надеюсь, что эти шаги покроют большую часть современных требований, которые нужны специалисту по данным / инженеру по машинному обучению. Если вам нужна помощь, вы можете связаться со мной через linkedIn.