Материалы к соревнованию по автоматизированному машинному обучению SDSJ 2018 AutoML.
SDSJ AutoML — соревнование по построению алгоритмов машинного обучения, выполняющих автоматически такие действия как предобработка данных, выбор семейства моделей, подбор гиперпараметров.
Данные передаются решению в формате CSV. В наборах данных присутствуют следующие колонки:
line_id
— идентификатор строкиtarget
— целевая переменная (только для обучающего набора), вещественное число для регрессии и 0/1 для классификации<type>_<feature>
— признак одного из возможных типов (type
):number
— числовой формат (может содержать количественную, категориальную или бинарную величину)string
— строковый форматdatetime
— дата в формате2010-01-01
или дата/время в формате2010-01-01 10:10:10
id
— идентификатор (категориальная величина особой природы)
В проверяющую систему необходимо отправить код алгоритма, запакованный в ZIP-архив. Решения запускаются в изолированном окружении при помощи Docker, время и ресурсы для тестирования ограничены. В простом случае, участнику нет необходимости разбираться с технологией Docker.
В корне архива обязательно должен быть файл metadata.json
следующего содержания:
{
"image": "sberbank/python",
"entry_points": {
"train_classification": "python train.py --mode classification --train-csv {train_csv} --model-dir {model_dir}",
"train_regression": "python train.py --mode regression --train-csv {train_csv} --model-dir {model_dir}",
"predict": "python predict.py --test-csv {test_csv} --prediction-csv {prediction_csv} --model-dir {model_dir}"
}
}
Здесь image
— поле с названием docker-образа, в котором будет запускаться решение, entry_points
— команды, при помощи которых запускается решение (train_*
— обучение модели в режиме классификации и регрессии, predict
— построение предсказаний с использованием обученной модели). Для решения текущей директорией будет являться корень архива.
В командах необходимо использовать шаблоны, в которые при запуске в тестирующей системе будут подставлены необходимые значения:
{train_csv}
,{test_csv}
— путь к CSV-файлу с обучающей или тестовой выборкой{model_dir}
— путь к заранее созданной директории, в которую необходимо положить обученную модель для последующего использования{prediction_csv}
— путь к файлу, в который необходимо записать предсказания
При запуске решения, в переменной окружения TIME_LIMIT
указывается максимальное время (в секундах), которое разрешено работать алгоритму.
Гарантируется, что алгоритму отдельно на обучение и предсказание дается не менее 300 секунд, однако для больших наборов данных этот лимит повышен.
Для запуска решений можно использовать существующие окружения:
sberbank/python
— Python3 с установленным большим набором библиотек (подробнее)gcc
- для запуска компилируемых C/C++ решений (подробнее здесь)node
— для запуска JavaScriptopenjdk
— для Javamono
— для C#
Подойдет любой другой образ, доступный для загрузки из DockerHub. При необходимости, Вы можете подготовить свой образ, добавить в него необходимое ПО и библиотеки (см. инструкцию по созданию Docker-образов); для использования его необходимо будет опубликовать на DockerHub.
Контейнер с решением запускается в следующих условиях:
- решению доступны ресурсы
- 12 Гб оперативной памяти
- 4 vCPU
- решение не имеет доступа к ресурсам интернета
- максимальный размер упакованного и распакованного архива с решением: 1 Гб
- архив распаковывается в файловую систему, находящуюся в оперативной памяти (ramfs), доступную решению для записи
- остальное содержимое контейнера доступно только для чтения
- CSV с набором данных не превышает 3 Гб
- Для каждой задачи (датасету) по тестовой части выборки считается метрика, специфичная для задачи (RMSE для регрессии, ROC-AUC для бинарной классификации).
- Для каждой задачи (датасета) производится перевод значения метрик участников в общую шкалу по следующей схеме. За наилучшее по метрике решение (среди всех отправленных и успешно протестированных решений) даётся 1 балл, бейзлайн-решение оценивается в 0 баллов. Участники, находящиеся по метрике между наилучшим и бейзлайн-решениями получают пропорциональное количество баллов между 0 и 1. Решения по качество нижу бейзлайна оцениваются в 0 баллов. Если наилучшее решение и бейзлайн решения совпадают, то все участники получают 0 баллов. Если решение участника выдаёт на задаче ошибку или не проходит по временному ограничению, то оно получают за эту задачу 0 баллов.
- Итоговый результат каждого участника считается как сумма результатов по каждой задачи после переда в общую шкалу. В общем лидерборде участники ранжируются по итоговому результату.
Например, можно запустить baseline или публичное решение vlarine.
Публичный набор датасетов для локального тестирования решений: sdsj2018_automl_check_datasets.zip
Сначала необходимо установить Docker под вашу OC (инструкция на официальном сайте). Затем загружаем образ с DockerHub, это займёт некоторое время:
docker pull sberbank/python
Обратите внимание, что потребуется около 20ГБ свободного места на жёстком диске. А также, в Docker для Mac установлены свои ограничения на память, которые можно изменить настройках во вкладке "Advanced".
Обучение на первом наборе данных запускается из командной строки следующей командой:
docker run \
-v {workspace_dir}:/workspace_0001 \
-v {train_csv}:/data/input/train.csv:ro \
-v {model_dir}:/data/output/model \
-w /workspace_0001 \
-e TIME_LIMIT=300 \
--memory 12g \
--name solution_0001_train \
sberbank/python \
python train.py --mode classification --train-csv /data/input/train.csv --model-dir /data/output/model
Здесь:
{workspace_dir}
— каталог решения, в котором лежит файлmetadata.json
;{model_dir}
— каталог, в который будет записана модель (нужно предварительно создать);{train_csv}
— файл с обучающей выборкой.
Все пути должны быть абсолютными.
После отработки кода контейнер нужно остановить, иначе команда с тем же названием контейнера повторно не запустится:
docker stop solution_0001_train
docker rm solution_0001_train
Аналогично следует останавливать и solution_0001_test
.
Для этого сначала нужно получить prediction с помощью следующей команды:
{prediction_dir}
— каталог решения, в котором будет лежать файл с прогнозами
docker run \
-v {workspace_dir}:/workspace_0001 \
-v {test_csv}:/data/input/test.csv:ro \
-v {model_dir}:/data/input/model \
-v {prediction_dir}:/data/output \
-w /workspace_0001 \
-e TIME_LIMIT=300 \
--memory 12g \
--name solution_0001_test \
sberbank/python \
python predict.py --test-csv /data/input/test.csv --model-dir /data/input/model --prediction-csv /data/output/prediction.csv
А затем сравнить с соответствующим файлом test-target.csv в папке sdsj2018_automl_check_datasets.
Таким же образом валидация проводится для остальных датасетов
-
Описание решений победителей Chalearn AutoML challenge (2017-2018), а также архив с самими решениями победителей
-
Серия статей про AutoML от популярного ресурса fast.ai
-
Книга по AutoML
-
Открытые репозитории участников SDSJ