Решение проверяется в две стадии:
- check: на небольшом датасете для того чтобы проверить работоспособность решения; участнику доступен лог stdout/stderr, так что есть возможность продиагностировать ошибки; если решение успешно проходит стадию
check
(завершается в срок, отдает предсказания), то оно переходит в стадию test - test: запуск производится на основном датасете с ограничением по времени 8 часов; у участника нет доступа к stdout/stderr, т.к. это приведет к компроментации тестовой выборки; по завершению участник узнает время выполнения и успешность проверки результата
Решение запускается при помощи docker (17.12.0-ce), в runtime nvidia-docker2.
Процесс тестирования можно воспроизвести на своей машине командой:
docker run \
-e INPUT="/data/input.txt" \
-e OUTPUT="/output/output.txt" \
-v <input_file>:/data/input.txt:ro \
-v <corpus1.txt>:/data/corpus1.txt:ro \
-v <corpus2.txt>:/data/corpus2.txt:ro \
-v <parallel_corpus.txt>:/data/parallel_corpus.txt:ro \
-v <output_dir>:/output:rw \
-v <workspace>:/workspace_<runid> \
--workdir /workspace_<runid> \
--network=none \
--memory=8g \
--cpuset-cpus=0-4 \
--pids-limit=530 \
--runtime=nvidia \
--ipc=host \
<image> <entry_point>
Опции -v
монтируют узлы основной файловой системы в файловую систему контейнера с решением. Здесь <input_file>
, <corpus1.txt>
, <corpus2.txt>
, <parallel_corpus.txt>
— пути к входным файлам, <output_dir>
— путь к каталогу, который будет доступен решению для записи, в который необходимо записать output.txt
.
На сервере, каталог <output_dir>
создается при момощи tmpfs
, располагается в оперативной памяти.
Отправленный архив распаковывается в каталог workspace
, для которого выделяется tmpfs
раздел в оперативной памяти объемом 20Gb, он находится в полном распоряжении решения: можно читать, создавать временные файлы — это будет достаточно быстро, т.к. файловая система workspace
располагается в RAM, а не на медленном сетевом диске.
Для команды <entry_point>
текущим каталогом будет либо корень workspace
внутри контейнера, либо его подкаталог, в котором находится metadata.json
. Иными словами, metadata.json
всегда будет находится в текущем каталоге, относительно него выставляется --workdir
.
Файлы с моделями и код решения рекомендуется отправлять в архиве с решением.
Участник может создать свой собственный docker image, в котором будет запускаться его решение. В image необходимо установить нужные версии используемых библиотек, которые необходимы для запуска решения из архива. Окружение должно быть в публично доступном docker registry, например Docker Hub. Окружение доступно всем другим участникам, но оно не несет в себе ценности, т.к. решение лежит в архиве, который запускается в окружении.
Добавлять файлы с моделями и код решения в image — странно и глупо. С одной стороны вы таким образом делаете свое решение публично доступным, с другой стороны — чтение/запись моделей и временных файлов будет происходить через медленную сетевую файловую систему, в которой располагается docker data root, вместо того чтобы работать полностью в оперативной памяти.