該存儲庫包含“非確定堆棧RNN的令人驚訝的計算能力”的代碼(Dusell and Chiang,2023)。它包括複製論文中使用的實驗和數字所需的所有代碼,以及可用於復制開發的軟件環境的Docker Image定義。
如果您正在尋找我們較早的論文的代碼,“學習具有不同的非確定堆棧的層次結構”(Dusell and Chiang,2022),請參閱此版本。
如果您正在尋找我們較早的論文“使用非確定性堆棧RNN的無上下文語言”的代碼(Dusell and Chiang,2020),請參閱此版本。
該存儲庫包括以下模型的Pytorch實現:
data/ :包含用於實驗的數據集,即PTB語言建模數據集。experiments/ :包含用於復制論文中所有實驗和數字的腳本。capacity/ :第5節中容量實驗的腳本。non-cfls/ :腳本。ptb/ :第6節中PTB語言建模實驗的腳本。scripts/ :包含用於設置軟件環境,構建容器圖像,運行容器,安裝Python軟件包,預處理數據等的輔助腳本。使用這些腳本的說明如下。src/ :包含所有模型,培訓例程,繪圖腳本等的源代碼。tests/ :在src/下包含代碼的單元測試。 為了培養可重複性,開發了本文的代碼並在文件Dockerfile-dev中定義的Docker容器內部運行。要運行此代碼,您可以自己構建Docker Image並使用Docker運行它。或者,如果您不想安裝Docker,則只需使用Dockerfile-dev作為參考即可在您自己的系統上設置軟件環境。您還可以構建一個等效的奇異圖像,該圖像可以在HPC群集上使用,在那裡很可能docker不可用,但奇異性是。
無論如何,強烈建議在機器上運行大多數實驗,並可以使用NVIDIA GPU,以便它們在合理的時間內完成。此例外是基線模型(LSTM,疊加堆棧LSTM和分層堆棧LSTM)的實驗,因為它們在CPU而不是GPU上更快地完成,因此應在CPU模式下運行。
為了使用Docker映像,您必須首先安裝Docker。如果您打算在GPU上運行任何實驗,則還必須確保正確設置NVIDIA驅動程序並安裝NVIDIA容器工具包。
為了自動拉動公共Docker映像,啟動容器並打開其內部的bash殼,運行
$ bash scripts/docker-shell.bash --pull
如果您希望自己從頭開始構建圖像,則可以運行
$ bash scripts/docker-shell.bash --build
構建圖像一次後,無需再做一次,因此您可以簡單地運行
$ bash scripts/docker-shell.bash
默認情況下,此腳本以GPU模式啟動容器,如果您在使用GPU的計算機上運行,該腳本將失敗。如果您只想在CPU模式下運行事物,則可以運行
$ bash scripts/docker-shell.bash --cpu
您可以將其與--pull或--build選項相結合。
如果您在機構使用共享的HPC群集,它可能不支持Docker,但是它確實有可能支持奇異性,這是一種替代的容器運行時,更適合共享計算環境。
為了在奇異容器中運行代碼,您必須首先獲取Docker映像,然後將其轉換為具有root訪問的機器上的.sif (奇異映像)文件(例如您的個人計算機或工作站)。這需要在該機器上同時安裝Docker和奇異性。假設您已經根據上述說明構建了Docker映像,則可以使用以下來創建.sif文件:
$ bash scripts/build-singularity-image.bash
這將創建文件nondeterministic-stack-rnn-2023.sif 。這需要幾分鐘的時間是正常的。之後,您可以將.sif文件上傳到HPC群集並在此處使用。
您可以使用奇異容器中的外殼使用
$ bash scripts/singularity-shell.bash
這將適用於具有NVIDIA GPU的機器,儘管如果沒有GPU,它將輸出警告。
您可以在此處找到有關奇點的更一般的教程。
無論您使用什麼方法來運行代碼(無論是在碼頭容器,奇異容器還是沒有容器中),都需要運行一些其他設置和預處理步驟。以下腳本將為您照顧這些(如果您使用的是容器,則必須在容器外殼內運行):
$ bash scripts/setup.bash
更具體地說,此腳本:
src/下的所有文件都應使用poetry運行,以便它們可以訪問詩歌軟件包管理器提供的Python軟件包。這意味著您應該將所有命令都帶有poetry run ,或者事先將poetry shell前綴以始終啟用詩歌的Virtualenv進入外殼。您應該使用詩歌同時運行Python和Bash腳本,因為Bash腳本可能會呼喚Python腳本。 src/下的所有BASH腳本都應以src/作為當前工作目錄運行。
scripts/下的所有腳本都應以最高級別目錄作為當前工作目錄運行。
experiments/目錄包含用於復制論文中所有實驗和圖的腳本。其中一些腳本旨在將作業提交到計算集群中。它們應該在容器外面運行。您將需要編輯文件experiments/submit-job.bash將其定制為特定的計算集群。其他腳本用於繪製或打印表,應在容器內運行。