«Машинное обучение с помощью MATLAB и Amazon SageMaker»

«Машинное обучение с использованием MATLAB и Amazon SageMaker»

Этот пост написан совместно с Брэдом Дунканом, Рэйчел Джонсон и Ричардом Алкоком из MathWorks.

MATLAB является популярным инструментом программирования для широкого спектра приложений, таких как обработка данных, параллельные вычисления, автоматизация, симуляция, машинное обучение и искусственный интеллект. Он широко используется во многих отраслях, таких как автомобильная, авиационная, связь и производство. За последние годы MathWorks внес много продуктовых предложений в облачную среду, особенно на Amazon Web Services (AWS). Для получения дополнительной информации о облачных продуктах MathWorks см. MATLAB и Simulink в облаке или напишите на электронную почту MathWorks.

В этом посте мы рассмотрим возможности машинного обучения MATLAB в Amazon SageMaker, которые имеют несколько значимых преимуществ:

  • Вычислительные ресурсы: Использование высокопроизводительной вычислительной среды, предлагаемой SageMaker, может ускорить обучение машинного обучения.
  • Сотрудничество: MATLAB и SageMaker вместе предоставляют надежную платформу, которую команды могут использовать для эффективного сотрудничества при построении, тестировании и развертывании моделей машинного обучения.
  • Развертывание и доступность: Модели могут быть развернуты в виде реальных точек входа SageMaker, что делает их доступными для обработки данных в реальном времени другими приложениями.

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

Для этого мы будем использовать пример предсказательного обслуживания, в котором мы классифицируем неисправности в работающем насосе, передающем данные с датчиков в реальном времени. У нас есть доступ к большому репозиторию помеченных данных, сгенерированных из симуляции Simulink, в которой есть три возможных типа неисправностей в различных комбинациях (например, один здоровый и семь неисправных состояний). Поскольку у нас есть модель системы, и неисправности являются редкими при работе, мы можем воспользоваться симулированными данными для обучения нашего алгоритма. Модель можно настроить так, чтобы она соответствовала эксплуатационным данным нашего насоса с использованием техник оценки параметров в MATLAB и Simulink.

Наша цель – продемонстрировать совместную мощь MATLAB и Amazon SageMaker на примере классификации неисправностей.

Мы начинаем с обучения модели классификатора на рабочем столе с помощью MATLAB. Сначала мы извлекаем характеристики из подмножества полного набора данных с помощью приложения Diagnostic Feature Designer, а затем выполняем обучение модели локально с использованием модели дерева принятия решений MATLAB. После установки параметров мы можем сгенерировать функцию MATLAB и отправить задание вместе с набором данных в SageMaker. Это позволяет масштабировать процесс обучения для работы с гораздо большими наборами данных. После обучения нашей модели мы развертываем ее в виде реальной точки входа, которую можно интегрировать в другое приложение или панель управления, например, веб-приложение MATLAB.

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

Предварительные условия

  1. Рабочая среда MATLAB 2023a или более поздняя версия с компилятором MATLAB и пакетом инструментов для статистики и машинного обучения в Linux. Вот быстрое руководство по запуску MATLAB на AWS.

  2. Настройка Docker в экземпляре Amazon Elastic Compute Cloud (Amazon EC2), на котором работает MATLAB. Либо Ubuntu, либо Linux.

  3. Установка AWS Command-Line Interface (AWS CLI), AWS Configure и Python3.

    1. AWS CLI должен уже быть установлен, если вы следовали инструкции по установке с шага 1.
    2. Настройте AWS Configure для взаимодействия с ресурсами AWS.
    3. Проверьте установку python3, запустив команду python -V или python --version в терминале. Установите Python, если необходимо.
  4. Скопируйте этот репозиторий в папку на вашей линукс-машине, выполнив следующую команду:

    git clone https://github.com/mathworks/Machine-Learning

    Часть 1: Подготовка данных и извлечение признаков

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

    load SensorData.mat

    Набор данных SensorData.mat содержит 240 записей. Каждая запись имеет две таблицы времени: flow и pressure. Целевым столбцом является faultcode, которое является бинарным представлением трех возможных комбинаций неисправностей в насосе. Для этих таблиц временных рядов каждая таблица имеет 1 201 строку, которая имитирует измерение потока насоса и давления в течение 1,2 секунды с интервалом 0,001 секунды.

    Затем в приложении Diagnostic Feature Designer вы можете извлекать, визуализировать и ранжировать различные признаки из данных. Здесь вы используете автоматическое извлечение признаков, которое быстро извлекает широкий набор признаков из области времени и частоты данных и ранжирует лучшие кандидаты для обучения модели. Затем вы можете экспортировать функцию MATLAB, которая будет повторно вычислять 15 лучших признаков из новых входных данных. Давайте назовем эту функцию extractFeaturesTraining. Эта функция может быть настроена для обработки данных целиком или в виде потоковых данных.

    Эта функция создает таблицу признаков с соответствующими кодами неисправностей, как показано на следующем рисунке:

    Часть 2: Организация данных для SageMaker

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

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

    trainPredictors = trainingData(:,2:end);

    trainResponse = trainingData(:,1);

    Часть 3: Обучение и тестирование модели машинного обучения в MATLAB

    Перед переходом к SageMaker хорошей идеей является создание и тестирование модели машинного обучения локально в MATLAB. Это позволяет быстро итерироваться и отлаживать модель. Вы можете создать и обучить простой классификатор дерева решений локально.

    classifierModel = fitctree(... trainPredictors,... trainResponse,... OptimizeHyperparameters='auto');

    Обучение модели здесь должно занять менее минуты и генерирует некоторые графики, указывающие на прогресс обучения. После завершения обучения создается модель машинного обучения MATLAB. Приложение Classification Learner может использоваться для опробования множества типов моделей классификации и настройки их для достижения наилучшей производительности, а затем генерации необходимого кода для замены кода обучения модели выше.

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

    Часть 4: Обучение модели в Amazon SageMaker

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

    session = sagemaker.Session();

    Укажите роль IAM SageMaker, которую будут использовать задания обучения и размещение конечной точки.

    role = "arn:aws:iam::ACCOUNT:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXXXXXXXXXX";

    Из MATLAB сохраните тренировочные данные в файл .csv в корзину Amazon Simple Storage Service (Amazon S3).

    writetable(trainingData,'pump_training_data.csv');

    trainingDataLocation = "s3:// "+session.DefaultBucket+ +"/cooling_system/input/pump_training";

    copyfile("pump_training_data.csv", trainingDataLocation);

    Создание SageMaker оценщика

    Далее вам потребуется создать SageMaker оценщик и передать все необходимые параметры, такие как обучающий образ Docker, функцию обучения, переменные среды, размер обучающего экземпляра и т. д. URI образа обучения должен соответствовать URI Amazon ECR, созданному на предыдущем шаге, со следующим форматом: ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/sagemaker-matlab-training-r2023a:latest. Функция обучения должна быть представлена внизу скрипта MATLAB.

    SageMaker Estimator Console

    trainingImage = "ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/sagemaker-matlab-training-r2023a:latest";  est = sagemaker.MATLABEstimator(...     role, ...     Image=trainingImage, ...     Session=session, ...     BaseJobName="PumpDecisionTreeMatlab", ...     Environment = loadenv(fullfile(rootFolder, "training.env")), ...     TrainingFunction = @trainingFunction, ...     HyperParameters = struct(), ... % named args to train_decision_tree     InstanceType="ml.m5.large", ...     MaxRunTime=minutes(10), ...         MaxWaitTime=minutes(20), ...     UseSpotInstances=true); 

    Отправить задание обучения SageMaker

    Вызов метода fit из оценщика отправляет задание обучения в SageMaker.

    est.fit(training=struct(Location=trainingDataLocation, ContentType="text/csv"))

    Вы также можете проверить статус задания обучения в консоли SageMaker:

    SageMaker Training Job Console

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

    SageMaker Endpoint Output

    Часть 5: Развертывание модели в качестве эндпоинта SageMaker в реальном времени

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

    predictor = est.deploy(role, "ClassificationTreeInferenceHandler", uint8(1), "ml.m5.large")

    На этом этапе создается контейнер с инференсом docker-образа и загружается в репозиторий Amazon ECR, от пользователя не требуется ничего для сборки контейнера инференса. Образ содержит всю необходимую информацию для обслуживания запроса на инференс, такую как местоположение модели, данные аутентификации MATLAB и алгоритмы. После этого Amazon SageMaker создает конфигурацию эндпоинта SageMaker и, наконец, развертывает эндпоинт в реальном времени. Эндпоинт можно отслеживать в консоли SageMaker и в любое время завершить его использование.

    SageMaker Endpoint Monitor Console

    Часть 6: Тестирование эндпоинта в реальном времени

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

    input = trainPredictors(10:19,:) 
    prediction = predictor.predict(input)

    Prediction Result

    Часть 7: Интеграция с панелью инструментов

    Эндпоинт SageMaker может быть вызван множеством служб AWS. Он также может использоваться в качестве стандартного REST API, если развернут вместе с функцией AWS Lambda и API-шлюзом, который может быть интегрирован с любыми веб-приложениями. Для данного конкретного случая использования можно использовать потоковое внесение данных с использованием Amazon SageMaker Feature Store и Amazon Managed Streaming for Apache Kafka, MSK, для принятия решений на основе машинного обучения в режиме близком к реальному времени. Еще одной возможной интеграцией является использование сочетания Amazon Kinesis, SageMaker и Apache Flink для создания управляемого, надежного, масштабируемого и высокодоступного приложения, способного выполнять инференс в реальном времени на потоке данных.

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

    В этой панели инструментов включена модель оценки остаточного ресурса (RUL), которая предсказывает время до отказа для каждого насоса. Чтобы узнать, как обучать алгоритмы RUL, см. Predictive Maintenance Toolbox.

    Pump Health Status Dashboard

    Очистка

    После выполнения этого решения убедитесь, что вы очистили ненужные ресурсы AWS, чтобы избежать неожиданных затрат. Вы можете освободить эти ресурсы, используя SageMaker Python SDK или консоль управления AWS для конкретных здесь использованных служб (SageMaker, Amazon ECR и Amazon S3). Удаление этих ресурсов предотвращает дальнейшее начисление платы за неиспользуемые ресурсы.

    Заключение

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

    Отказ от ответственности: Код, используемый в этом сообщении, принадлежит и поддерживается MathWorks. Сведения об условиях лицензии можно найти в репозитории GitHub. По всем вопросам по коду или запросам функций, пожалуйста, откройте проблему GitHub в репозитории.

    Ссылки