Skip to content

Instantly share code, notes, and snippets.

@romovpa
Last active February 1, 2018 11:42
Show Gist options
  • Save romovpa/2540b4aef58dee7472e1108f696783cf to your computer and use it in GitHub Desktop.
Save romovpa/2540b4aef58dee7472e1108f696783cf to your computer and use it in GitHub Desktop.
Проверка решений DeepHack.Babel

Проверка решений DeepHack.Babel

Решение проверяется в две стадии:

  1. check: на небольшом датасете для того чтобы проверить работоспособность решения; участнику доступен лог stdout/stderr, так что есть возможность продиагностировать ошибки; если решение успешно проходит стадию check (завершается в срок, отдает предсказания), то оно переходит в стадию test
  2. 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.

Файлы с моделями и код решения рекомендуется отправлять в архиве с решением.

Окружение (image)

Участник может создать свой собственный docker image, в котором будет запускаться его решение. В image необходимо установить нужные версии используемых библиотек, которые необходимы для запуска решения из архива. Окружение должно быть в публично доступном docker registry, например Docker Hub. Окружение доступно всем другим участникам, но оно не несет в себе ценности, т.к. решение лежит в архиве, который запускается в окружении.

Добавлять файлы с моделями и код решения в image — странно и глупо. С одной стороны вы таким образом делаете свое решение публично доступным, с другой стороны — чтение/запись моделей и временных файлов будет происходить через медленную сетевую файловую систему, в которой располагается docker data root, вместо того чтобы работать полностью в оперативной памяти.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment