Amazon Web Services (AWS) продолжает выпускать продукты для машинного обучения на всех уровнях — от инструментов для эксперта, который хочет контролировать каждую мелочь и иметь для этого знания, до пользователя, который просто хочет машинное обучение без написания кода. или заданные вопросы. AWS SageMaker Autopilot, по-видимому, обеспечивает быстрый старт для чайников, которым многие из нас могли бы воспользоваться, чтобы начать работу на высоком уровне, а затем узнать больше.

Я попробовал сервис AWS под названием Машинное обучение Amazon несколько лет назад, до того, как он стал устаревшим, и у него, похоже, была аналогичная предпосылка: предоставить AWS CSV-файл данных для обучения. целей, выберите один столбец для прогнозирования, и вы волшебным образом (предположительно, ничего не зная о машинном обучении) получите конечную точку, которая может предоставить вам вывод для новых данных по мере их поступления (или выполнять пакетные прогнозы). Возможно, когда AWS запустила пакет SageMaker, они почувствовали, что он стал чересчур черным ящиком, и создали AutoPilot как более интегрированного преемника.

Во-первых, краткое заявление: SageMaker Autopilot обеспечивает результаты машинного обучения, не требуя знаний в области машинного обучения. Однако а) очевидно, что чем больше знаний, тем лучше, хотя в какой-то момент вы можете «выйти» из автопилота, и б) есть некоторые шероховатости и необходимые шаги, которых нет. точно очевидно.

Я написал этот пост в основном для того, чтобы указать на небольшие проблемы, с которыми я столкнулся, в надежде, что он поможет другим получить еще более плавный опыт с их первым экспериментом «Hello world». Он не предназначен для обучения, обзора или обзора SageMaker Autopilot.

Хорошо, так что вы идете. Поместите CSV-файл с данными в корзину, создайте Autopilot Experiment из SageMaker Studio через консоль AWS и выберите необходимый столбец Target, для которого вы хотите получить прогнозы:

Первая проблема, с которой вы, скорее всего, столкнетесь, находится чуть ниже. Параметр по умолчанию для типа обучения может принимать четыре значения. Авто, Двоичная классификация, Регрессия и Мультиклассовая классификация.

Если вы похожи на меня, у вас возникнет соблазн сначала попробовать значения по умолчанию, чтобы увидеть, насколько хорошо работает Auto. Если в целевом столбце есть числовые значения (сотни различных, если быть точным), вы можете подумать, что автопилот сделает обоснованное предположение о регрессии, верно? Неправильный. Попытка 1 не удалась: "Неясно, какой тип проблемы должен быть: мультиклассовая классификация или регрессия".

Ну, кажется, люди все еще нужны. Принуждение к регрессии, единственному разумному выбору в моем случае, и он запускается правильно. После 250 моделей и оценок гиперпараметров (1-2 часа работы, я пошел на обед) я получил некоторые результаты. Результаты ранжируются по наименьшей среднеквадратической ошибке (в разделе "Цель: Mse" в консоли), и это соответствует проверочному набору, который Autopilot удобно автоматически выбирает как подмножество полных входных данных. .

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

Победившая работа в моем эксперименте закончилась использованием двух связанных вместе моделей: Scikit-learn для разработки функций (предварительная обработка входных столбцов) и XGBoost для фактический прогноз числового результата. Я нашел ссылки на модели в сведениях о победившей пробной версии, хранящихся в виде двух файлов model.tar.gz в моей корзине. В моих тестовых данных было 14 входных столбцов и 1 целевой столбец, всего 15 столбцов в моем файле обучения. Хотя я понимал, что предварительная обработка привела к большему количеству столбцов, чем необработанный ввод, у меня было довольно много проблем с тем, чтобы точно определить, как определить конвейерную модель в моей записной книжке.

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

[2020-12-11:10:27:18:ERROR] Loading csv data failed with Exception, please ensure data is in csv format:
 <class 'ValueError'>
 could not convert string to float: 'VID1234567101'

…даже несмотря на то, что ваши данные на самом деле очень похожи на CSV и очень похожи на данные, которые вы предоставили для обучения, вы, вероятно, пропустили этап предварительной обработки. И если вы получите это:

[2020-12-11:10:37:12:ERROR] Feature size of csv inference data 14 is not consistent with feature size of trained model 1117.

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

Я избавлю вас от подробностей о моих неудачных попытках — вот блокнот, который, наконец, дал предсказания, которые я хотел:

Полезно отметить, что ссылки Docker image_uri на самом деле должны указывать на номера аккаунтов AWS в зависимости от как алгоритма для вашей модели, и региона, в котором вы запускаете свой блокнот. В AWS есть справочный список, но вы также можете получить его программно с помощью sagemaker.image_uris.retrieve(…). Также следует отметить, что вы должны опустить столбец, который хотите предсказать, что может показаться очевидным, но о нем легко забыть, если вы жонглируете тестовыми файлами, и что вы не должны включать какие-либо заголовки. С помощью приведенного выше блокнота результаты доставляются в виде файла с одним столбцом в выходном расположении корзины S3.

Дополнительное примечание: если вы просто хотите опробовать получившуюся модель и не использовать блокнот, как я делаю выше, вы можете просто развернуть конечную точку из графического интерфейса Autopilot и выполнить к ней несколько запросов CLI AWS. . Если вам это больше подходит, эта командная строка может быть удобной:

aws sagemaker-runtime invoke-endpoint --endpoint-name yourendpoint-name-goes-here --body `cat your-input-file.csv | base64` --content-type text/csv --region eu-west-1 output.json && cat output.json

Как ни странно, хотя тип содержимого — text/csv, фактическое тело должно быть закодировано в base64 — о чем вам никто не говорит (кроме сообщения об ошибке, когда вы его забываете).

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

Таково мое первое впечатление об автопилоте. Я провел, может быть, 3–4 эксперимента, и плата за AWS SageMaker в тот день составляла 70 долларов США — если вы используете частную учетную запись на свои собственные деньги, возможно, уменьшите количество испытаний, если вам не нужны все 250 и (как всегда ) не забудьте очистить ресурсы, которые вы больше не используете.

Общее впечатление: доволен, хотя я часами бился над чем-то, что должно было быть легкой частью. Опять же, если бы это было легко, все бы это делали. И скоро они.