Этот репозиторий содержит код для статьи «Удивительная вычислительная сила нетерминированных стеков RNNS» (Dusell and Chiang, 2023). Он включает в себя весь код, необходимый для воспроизведения экспериментов и рисунков, используемых в статье, а также определение изображения Docker, которое можно использовать для воспроизведения программной среды, в которой она была разработана.
Если вы ищете код для нашей предыдущей статьи «Иерархические структуры обучения с дифференцируемыми нетерминированными стеками» (Dusell and Chiang, 2022), см. Этот выпуск.
Если вы ищете код для нашей предыдущей статьи «Learning Context Context-Free Languages с недерминированными rnns стека» (Dusell and Chiang, 2020), см. Этот выпуск.
Этот репозиторий включает в себя реализации Pytorch следующих моделей:
data/ : содержит наборы данных, используемые для экспериментов, а именно набор данных моделирования языка PTB.experiments/ : содержит сценарии для воспроизведения всех экспериментов и рисунков, представленных в статье.capacity/ : сценарии для экспериментов с пропускной способностью в разделе 5.non-cfls/ : Сценарии для экспериментов без CFL в разделе 4.ptb/ : Сценарии для экспериментов по моделированию языка PTB в разделе 6.scripts/ : содержит вспомогательные сценарии для настройки программной среды, изображений контейнеров, работающих контейнеров, установки пакетов Python, данных предварительной обработки и т. Д.src/ : содержит исходный код для всех моделей, процедур обучения, построения сценариев и т. Д.tests/ : содержит модульные тесты для кода в рамках src/ . Чтобы способствовать воспроизводимости, код для этой статьи был разработан и запускается внутри контейнера Docker, определенного в файле Dockerfile-dev . Чтобы запустить этот код, вы можете создать изображение Docker самостоятельно и запустить его с помощью Docker. Или, если вам не хочется установить Docker, вы можете просто использовать Dockerfile-dev в качестве ссылки для настройки программной среды в своей собственной системе. Вы также можете создать эквивалентное изображение сингулярности, которое можно использовать в кластере HPC, где вполне вероятно, что Docker недоступен, но сингулярность.
В любом случае, настоятельно рекомендуется провести большинство экспериментов на машине с доступом к графическому графическому графику NVIDIA, чтобы они заканчивали в течение разумного количества времени. Исключением является эксперименты для базовых моделей (LSTM, Superposition Stack LSTM и Stratification Stack LSTM) на формальных задачах моделирования языка, поскольку они более быстро заканчиваются на процессоре, а не на графическом процессоре и должны выполняться в режиме процессора.
Чтобы использовать изображение Docker, вы должны сначала установить Docker. Если вы собираетесь провести какие -либо эксперименты на графическом процессоре, вы также должны убедиться, что ваш драйвер NVIDIA настроен должным образом и установил инструментарий контейнера NVIDIA.
Чтобы автоматически вытащить общедоступное изображение Docker, запустить контейнер и открыть оболочку внутри него, запустить
$ bash scripts/docker-shell.bash --pull
Если вы предпочитаете создавать изображение самостоятельно, вы можете запустить
$ bash scripts/docker-shell.bash --build
После того, как вы построили изображение один раз, нет необходимости делать это снова, так что после этого вы можете просто запустить
$ bash scripts/docker-shell.bash
По умолчанию этот скрипт запускает контейнер в режиме графического процессора, который не удастся, если вы не работаете на машине с графическим процессором. Если вы хотите запустить вещи только в режиме процессора, вы можете запустить
$ bash scripts/docker-shell.bash --cpu
Вы можете объединить это с вариантами --pull или --build .
Если вы используете общий кластер HPC в своем учреждении, он может не поддерживать Docker, но есть вероятность, что он поддержит Singularity, которая является альтернативной средой выполнения контейнера, которая больше подходит для среды общих вычислительных сред.
Чтобы запустить код в контейнере для сингулярности, вы должны сначала получить изображение Docker, а затем преобразовать его в файл .sif (сингулярность) на машине, где у вас есть корневой доступ (например, ваш персональный компьютер или рабочая станция). Это требует установки Docker и Singularity на этой машине. Предполагая, что вы уже создали изображение Docker в соответствии с указаниями выше, вы можете использовать следующее для создания файла .sif :
$ bash scripts/build-singularity-image.bash
Это создаст файл nondeterministic-stack-rnn-2023.sif . Это нормально, чтобы занять несколько минут. После этого вы можете загрузить файл .sif в свой кластер HPC и использовать его там.
Вы можете открыть раковину в контейнере с сингулярностью, используя
$ bash scripts/singularity-shell.bash
Это будет работать на машинах, которые делают и не имеют графического процессора NVIDIA, хотя он выведет предупреждение, если нет графического процессора.
Вы можете найти более общий учебник по сингулярности здесь.
Какой бы метод вы ни использовали для запуска кода (будь то в контейнере Docker, контейнере для сингулярности или нет контейнера), есть некоторые дополнительные шаги настройки и предварительной обработки, которые вам необходимо запустить. Следующий сценарий позаботится об этом для вас (если вы используете контейнер, вы должны запустить это внутри контейнера ):
$ bash scripts/setup.bash
Более конкретно, этот сценарий:
Все файлы в src/ должны работать с использованием poetry , чтобы они имели доступ к пакетам Python, предоставленным менеджером поэтических пакетов. Это означает, что вы должны либо предварительно префикс всех ваших команд с помощью poetry run , либо запустить poetry shell заранее, чтобы ввести оболочку с включенным VirtualEnv Poetry. Вы должны запускать сценарии Python и Bash с поэзией, потому что сценарии Bash могут вызвать сценарии Python. Все сценарии Bash в src/ должны выполняться с src/ в качестве текущего рабочего каталога.
Все сценарии в рамках scripts/ должны выполняться с каталогом верхнего уровня в качестве текущего рабочего каталога.
experiments/ каталог содержит сценарии для воспроизведения всех экспериментов и участков, представленных в статье. Некоторые из этих сценариев предназначены для использования для подачи заданий в вычислительный кластер. Они должны работать за пределами контейнера. Вам нужно будет отредактировать experiments/submit-job.bash чтобы адаптировать его к вашему конкретному вычислительному кластеру. Другие сценарии предназначены для построения или печати столов и должны быть запущены внутри контейнера.