Узнайте, как создавать собственные модели SageMaker для библиотек ускоренного машинного обучения.
AWS предоставляет готовые образы машинного обучения для SageMaker, но что произойдет, если вы захотите развернуть собственное решение для логического вывода и обучения?
В этом учебном пособии будет рассмотрена конкретная реализация пользовательского обучения машинного обучения и логического вывода, в котором используется daal4py для оптимизации XGBoost для производительности с аппаратным ускорением Intel. В этой статье предполагается, что вы работаете с моделями и конечными точками SageMaker.
Это руководство является частью серии, посвященной созданию аппаратно-оптимизированных конечных точек SageMaker с помощью набора инструментов Intel AI Analytics. Вы можете найти весь код для этого руководства здесь.
Настройка Dockerfile и установки контейнера
Мы будем использовать AWS Cloud9, потому что у него уже есть все разрешения и приложения для создания нашего образа контейнера. Вы можете создать их на своей локальной машине.
Давайте быстро рассмотрим назначение критических файлов в нашем образе. Я связал каждое описание с соответствующим файлом в GitHub Repo этой статьи:
- train: этот скрипт будет содержать программу, которая обучает нашу модель. Когда вы создадите свой алгоритм, вы отредактируете его, включив в него код обучения.
- serve: этот сценарий содержит оболочку для сервера логических выводов. В большинстве случаев вы можете использовать этот файл как есть.
- wsgi.py: стартовая оболочка для отдельных рабочих серверов. Это нужно изменить только в том случае, если вы измените местонахождение и имя Predictor.py.
- predictor.py: код логического вывода для конкретного алгоритма. Это самый сложный скрипт, потому что его нужно сильно адаптировать к вашей схеме обработки необработанных данных — функции ping и вызовы из-за их нетривиальной природы. Функция ping определяет, работает ли контейнер. В этом образце контейнера мы объявляем его работоспособным, если можем успешно загрузить модель. Функция вызовов выполняется, когда к конечной точке SageMaker отправляется запрос POST.
Класс ScoringService включает два метода: get_model и predict. Метод predict условно преобразует нашу обученную модель xgboost в модель daal4py. Daal4py ускоряет выполнение алгоритма машинного обучения xgboost для повышения производительности базового оборудования за счет использования библиотеки аналитики данных Intel® oneAPI (oneDAL).
class ScoringService(object): model = None # Where we keep the model when it's loaded @classmethod def get_model(cls): """Get the model object for this instance, loading it if it's not already loaded.""" if cls.model == None: with open(os.path.join(model_path, "xgboost-model"), "rb") as inp: cls.model = pickle.load(inp) return cls.model @classmethod def predict(cls, input, daal_opt=False): """Receives an input and conditionally optimizes xgboost model using daal4py conversion. Args: input (a pandas dataframe): The data on which to do the predictions. There will be one prediction per row in the dataframe""" clf = cls.get_model() if daal_opt: daal_model = d4p.get_gbt_model_from_xgboost(clf.get_booster()) return d4p.gbt_classification_prediction(nClasses=2, resultsToEvaluate='computeClassProbabilities', fptype='float').compute(input, daal_model).probabilities[:,1] return clf.predict(input)
- nginx.conf: конфигурация главного сервера nginx, который управляет несколькими рабочими процессами. В большинстве случаев вы можете использовать этот файл как есть.
- requirements.txt: определяет все зависимости, необходимые для нашего образа.
boto3 flask gunicorn numpy==1.21.4 pandas==1.3.5 sagemaker==2.93.0 scikit-learn==0.24.2 xgboost==1.5.0 daal4py==2021.7.1
- Dockerfile: Этот файл отвечает за настройку нашего пользовательского образа SageMaker.
FROM public.ecr.aws/docker/library/python:3.8 # copy requirement file and install python lib COPY requirements.txt /build/ RUN pip --no-cache-dir install -r /build/requirements.txt # install programs for proper hosting of our endpoint server RUN apt-get -y update && apt-get install -y --no-install-recommends \ nginx \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # We update PATH so that the train and serve programs are found when the container is invoked. ENV PATH="/opt/program:${PATH}" # Set up the program in the image COPY xgboost_model_code/train /opt/program/train COPY xgboost_model_code/serve /opt/program/serve COPY xgboost_model_code/nginx.conf /opt/program/nginx.conf COPY xgboost_model_code/predictor.py /opt/program/predictor.py COPY xgboost_model_code/wsgi.py /opt/program/wsgi.py #set executable permissions for all scripts RUN chmod +x /opt/program/train RUN chmod +x /opt/program/serve RUN chmod +x /opt/program/nginx.conf RUN chmod +x /opt/program/predictor.py RUN chmod +x /opt/program/wsgi.py # set the working directory WORKDIR /opt/program
Наш докер выполняет следующие шаги, как определено в Dockerfile, устанавливает базовый образ из общедоступного реестра контейнеров AWS, копирует и устанавливает зависимости, определенные в нашем файле requirements.txt, устанавливает программы для размещения нашего конечного сервера, обновляет расположение PATH, копирует все соответствующие файлы в наш образ, дайте всем файлам права на выполнение и установите WORKDIR в /opt/program.
Понимание того, как SageMaker будет использовать наш образ
Поскольку мы запускаем один и тот же образ при обучении или размещении, Amazon SageMaker запускает ваш контейнер с аргументом train
во время обучения и serve
при размещении вашей конечной точки. Теперь давайте раскроем, что именно происходит на этапах обучения и хостинга.
Этап обучения:
- Ваш скрипт
train
запускается так же, как обычная программа Python. Несколько файлов размещены для вашего использования в каталоге/opt/ml
:
/opt/ml |-- input | |-- config | | |-- hyperparameters.json | | | `-- data | `-- | `-- |-- model | `-- `-- output `-- failure
/opt/ml/input/config
содержит информацию для управления работой вашей программы.hyperparameters.json
— это словарь имен гиперпараметров и значений в формате JSON./opt/ml/input/data/
(для файлового режима) содержит данные для обучения модели./opt/ml/model/
— это каталог, в котором вы записываете модель, которую генерирует ваш алгоритм. SageMaker упакует любые файлы в этом каталоге в сжатый файл архива tar./opt/ml/output
— это каталог, в котором алгоритм может записать файлfailure
с описанием причины сбоя задания.
Этап размещения:
У хостинга совсем другая модель, чем у обучения, потому что хостинг отвечает на запросы логического вывода через HTTP.
SageMaker нацелится на две конечные точки в контейнере:
/ping
получитGET
запросов от инфраструктуры. Ваша программа возвращает 200, если контейнер запущен и принимает запросы./invocations
— это конечная точка, которая получаетPOST
запросы клиентского вывода. Формат запроса и ответа зависит от алгоритма.
Создание образа и регистрация в ECR
Нам нужно будет сделать наш образ доступным для SageMaker. Существуют и другие реестры образов, но мы будем использовать AWS Elastic Container Registry (ECR).
Шаги по передаче пользовательского образа в конвейер SageMaker описаны в сопроводительной статье: Подробное руководство по созданию конвейеров MLOps с аппаратным ускорением в SageMaker
Если вам нужна помощь в создании образа и отправке его в ECR, следуйте этому руководству:Создание реестра ECR и отправка образа Docker
Заключение и обсуждение
AWS Sagemaker предоставляет полезную платформу для создания прототипов и развертывания конвейеров машинного обучения. Однако использовать собственный код обучения/логического вывода непросто из-за сложности построения базового образа в соответствии со спецификациями SageMaker. В этой статье мы решили эту проблему, научив вас, как:
- Как настроить скрипт обучения XGBoost
- Настройка API-интерфейсов Flask для конечных точек вывода
- Преобразование моделей в формат Daal4Py для ускорения вывода
- Как упаковать все вышеперечисленное в образ Docker
- Как зарегистрировать наш собственный образ SageMaker в реестре AWS Elastic Container Registry.
Источники:
- Репозиторий контейнеров Sagemaker XGBoost| https://github.com/aws/sagemaker-xgboost-контейнер
- Модуль Intel Cloud Optmization для SageMaker — XGBoost | https://github.com/intel/sagemaker-intel-aws-xgboost