Repositori ini berisi kode untuk makalah "Kekuatan komputasi yang mengejutkan dari tumpukan nondeterministik" (Dusell dan Chiang, 2023). Ini mencakup semua kode yang diperlukan untuk mereproduksi percobaan dan angka yang digunakan dalam makalah, serta definisi gambar Docker yang dapat digunakan untuk mereplikasi lingkungan perangkat lunak yang dikembangkan.
Jika Anda mencari kode untuk makalah kami sebelumnya "belajar struktur hierarkis dengan tumpukan nondeterministik yang dapat dibedakan" (Dusell dan Chiang, 2022), silakan lihat rilis ini.
Jika Anda mencari kode untuk makalah kami sebelumnya "Pembelajaran Bahasa bebas konteks dengan tumpukan nondeterministik" (Dusell dan Chiang, 2020), silakan lihat rilis ini.
Repositori ini mencakup implementasi Pytorch dari model -model berikut:
data/ : Berisi dataset yang digunakan untuk percobaan, yaitu dataset pemodelan bahasa PTB.experiments/ : Berisi skrip untuk mereproduksi semua percobaan dan angka yang disajikan dalam makalah.capacity/ : Skrip untuk Eksperimen Kapasitas di Bagian 5.non-cfls/ : Skrip untuk eksperimen non-CFL di Bagian 4.ptb/ : Script untuk Eksperimen Pemodelan Bahasa PTB di Bagian 6.scripts/ : Berisi skrip helper untuk menyiapkan lingkungan perangkat lunak, membangun gambar kontainer, menjalankan wadah, menginstal paket python, data preprocessing, dll. Instruksi untuk menggunakan skrip ini ada di bawah ini.src/ : Berisi kode sumber untuk semua model, rutinitas pelatihan, merencanakan skrip, dll.tests/ : Berisi unit tes untuk kode di bawah src/ . Untuk menumbuhkan reproduktifitas, kode untuk makalah ini dikembangkan dan dijalankan di dalam wadah Docker yang ditentukan dalam file Dockerfile-dev . Untuk menjalankan kode ini, Anda dapat membangun gambar Docker sendiri dan menjalankannya menggunakan Docker. Atau, jika Anda tidak ingin menginstal Docker, Anda dapat menggunakan Dockerfile-dev sebagai referensi untuk menyiapkan lingkungan perangkat lunak pada sistem Anda sendiri. Anda juga dapat membangun gambar singularitas yang setara yang dapat digunakan pada cluster HPC, di mana kemungkinan Docker tidak tersedia tetapi singularitas.
Bagaimanapun, sangat disarankan untuk menjalankan sebagian besar percobaan pada mesin dengan akses ke GPU NVIDIA sehingga mereka selesai dalam waktu yang wajar. Pengecualian untuk ini adalah eksperimen untuk model awal (LSTM, Superposition Stack LSTM, dan Stack LSTM) pada tugas pemodelan bahasa formal, karena mereka selesai lebih cepat pada CPU daripada GPU dan harus dijalankan dalam mode CPU.
Untuk menggunakan gambar Docker, Anda harus terlebih dahulu menginstal Docker. Jika Anda bermaksud menjalankan percobaan apa pun pada GPU, Anda juga harus memastikan bahwa driver NVIDIA Anda diatur dengan benar dan menginstal toolkit wadah NVIDIA.
Untuk secara otomatis menarik gambar Docker publik, memulai wadah, dan buka shell bash di dalamnya, jalankan
$ bash scripts/docker-shell.bash --pull
Jika Anda lebih suka membangun gambar dari awal, Anda dapat berlari
$ bash scripts/docker-shell.bash --build
Setelah Anda membangun gambar sekali, tidak perlu melakukannya lagi, jadi setelah itu Anda bisa menjalankan
$ bash scripts/docker-shell.bash
Secara default, skrip ini memulai wadah dalam mode GPU, yang akan gagal jika Anda tidak berjalan pada mesin dengan GPU. Jika Anda hanya ingin menjalankan hal -hal dalam mode CPU, Anda dapat menjalankan
$ bash scripts/docker-shell.bash --cpu
Anda dapat menggabungkan ini dengan opsi --pull atau --build .
Jika Anda menggunakan cluster HPC bersama di institusi Anda, itu mungkin tidak mendukung Docker, tetapi ada kemungkinan itu mendukung singularitas, yang merupakan runtime kontainer alternatif yang lebih cocok untuk lingkungan komputasi bersama.
Untuk menjalankan kode dalam wadah singularitas, Anda harus terlebih dahulu mendapatkan gambar Docker dan kemudian mengonversinya ke file .sif (gambar singularitas) pada mesin di mana Anda memiliki akses root (misalnya komputer pribadi atau workstation). Ini membutuhkan pemasangan Docker dan singularitas pada mesin itu. Dengan asumsi Anda telah membangun gambar Docker sesuai dengan instruksi di atas, Anda dapat menggunakan yang berikut untuk membuat file .sif :
$ bash scripts/build-singularity-image.bash
Ini akan membuat file nondeterministic-stack-rnn-2023.sif . Adalah normal untuk ini untuk memakan waktu beberapa menit. Setelah itu, Anda dapat mengunggah file .sif ke cluster HPC Anda dan menggunakannya di sana.
Anda dapat membuka shell di wadah singularitas menggunakan
$ bash scripts/singularity-shell.bash
Ini akan bekerja pada mesin yang melakukan dan tidak memiliki GPU NVIDIA, meskipun akan menghasilkan peringatan jika tidak ada GPU.
Anda dapat menemukan tutorial yang lebih umum tentang singularitas di sini.
Metode apa pun yang Anda gunakan untuk menjalankan kode (baik dalam wadah Docker, wadah singularitas, atau tidak ada wadah), ada beberapa langkah tambahan dan langkah preprocessing yang perlu Anda jalankan. Script berikut akan mengurus ini untuk Anda (jika Anda menggunakan wadah, Anda harus menjalankan ini di dalam cangkang wadah ):
$ bash scripts/setup.bash
Lebih khusus lagi, skrip ini:
Semua file di bawah src/ harus dijalankan menggunakan poetry sehingga mereka memiliki akses ke paket Python yang disediakan oleh Paket Manajer Puisi. Ini berarti Anda harus mengawali semua perintah Anda dengan poetry run atau menjalankan poetry shell sebelumnya untuk memasukkan shell dengan virtualEnv puisi diaktifkan sepanjang waktu. Anda harus menjalankan skrip Python dan Bash dengan puisi, karena skrip Bash mungkin memanggil skrip Python. Semua skrip bash di bawah src/ harus dijalankan dengan src/ sebagai direktori kerja saat ini.
Semua skrip di bawah scripts/ harus dijalankan dengan direktori tingkat atas sebagai direktori kerja saat ini.
experiments/ direktori berisi skrip untuk mereproduksi semua percobaan dan plot yang disajikan dalam makalah. Beberapa skrip ini dimaksudkan untuk digunakan untuk mengirimkan pekerjaan ke kluster komputasi. Mereka harus dijalankan di luar wadah. Anda perlu mengedit experiments/submit-job.bash untuk menyesuaikannya dengan kluster komputasi spesifik Anda. Skrip lain adalah untuk merencanakan atau mencetak tabel dan harus dijalankan di dalam wadah.