このリポジトリには、論文「非決定的スタックRNNSの驚くべき計算能力」(Dusell and Chiang、2023)のコードが含まれています。これには、論文で使用されている実験と図を再現するために必要なすべてのコードと、開発されたソフトウェア環境を複製するために使用できるDocker画像定義が含まれます。
以前の論文「微分可能な非決定的スタックを使用して階層構造を学習する」(Dusell and Chiang、2022)のコードを探している場合は、このリリースを参照してください。
以前の論文「非決定的スタックRNNを使用したコンテキストフリー言語を学習する」(Dusell and Chiang、2020)のコードを探している場合は、このリリースをご覧ください。
このリポジトリには、次のモデルのPytorch実装が含まれています。
data/ :実験に使用されるデータセット、すなわちPTB言語モデリングデータセットが含まれています。experiments/ :論文で提示されているすべての実験と図を再現するためのスクリプトが含まれています。capacity/ :セクション5の容量実験のスクリプト。non-cfls/ :セクション4の非CFL実験のスクリプト。ptb/ :セクション6のPTB言語モデリング実験のスクリプト。scripts/ :ソフトウェア環境のセットアップ、コンテナ画像の構築、コンテナの実行、Pythonパッケージのインストール、プリプロシングデータなどのヘルパースクリプトが含まれています。これらのスクリプトを使用する手順は以下にあります。src/ :すべてのモデル、トレーニングルーチン、プロットスクリプトなどのソースコードが含まれています。tests/ : src/の下のコードの単体テストが含まれています。 再現性を促進するために、このペーパーのコードが開発され、ファイルDockerfile-devで定義されたDockerコンテナの内部で実行されました。このコードを実行するには、Dockerイメージを自分で作成し、Dockerを使用して実行できます。または、Dockerをインストールしたくない場合は、 Dockerfile-dev独自のシステムにソフトウェア環境をセットアップするための参照として使用できます。また、HPCクラスターで使用できる同等の特異点画像を構築することもできます。ここでは、Dockerが利用できない可能性がありますが、特異点は可能です。
いずれにせよ、NVIDIA GPUにアクセスできる機械でほとんどの実験を実行して、合理的な時間内に終了することを強くお勧めします。これの例外は、GPUではなくCPUでより迅速に終了し、CPUモードで実行する必要があるため、正式な言語モデリングタスクのベースラインモデル(LSTM、重ね合わせスタックLSTM、および層別化スタックLSTM)の実験です。
Docker画像を使用するには、最初にDockerをインストールする必要があります。 GPUで実験を実行する場合は、NVIDIAドライバーが適切にセットアップされていることを確認し、NVIDIAコンテナツールキットをインストールする必要があります。
パブリックドッカーの画像を自動的に引っ張るには、コンテナを起動し、その内側にバッシュシェルを開き、実行してください
$ 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をサポートしない可能性がありますが、共有コンピューティング環境により適した代替コンテナランタイムであるSingularityをサポートする可能性があります。
コードを特異なコンテナで実行するには、最初にDocker画像を取得し、次にルートアクセスがあるマシン(パーソナルコンピューターやワークステーションなど)の.sif (singularity画像)ファイルに変換する必要があります。これには、そのマシンにDockerと特異点の両方をインストールする必要があります。上記の手順に従って既にDocker画像を作成していると仮定すると、次のことを使用して.sifファイルを作成できます。
$ bash scripts/build-singularity-image.bash
これにより、ファイルnondeterministic-stack-rnn-2023.sifが作成されます。これが数分かかるのは普通です。その後、 .sifファイルをHPCクラスターにアップロードして、そこで使用できます。
あなたは単数のコンテナでシェルを開くことができます
$ bash scripts/singularity-shell.bash
これは、GPUがない場合は警告を出力しますが、NVIDIA GPUを使用していないマシンで機能します。
ここでは、より一般的なチュートリアルをここで見つけることができます。
コードを実行するために使用する方法(Dockerコンテナ、特異性コンテナ、またはコンテナなし)に使用するには、実行する必要がある追加のセットアップと前処理手順がいくつかあります。次のスクリプトがこれらの世話をします(コンテナを使用している場合は、コンテナシェル内でこれを実行する必要があります):
$ bash scripts/setup.bash
より具体的には、このスクリプト:
src/の下のすべてのファイルは、詩のパッケージマネージャーが提供するPythonパッケージにアクセスできるように、 poetryを使用して実行する必要があります。つまり、すべてのコマンドをpoetry runでプレフィックスするか、事前にpoetry shellを実行して、常に詩のVirtualenvを有効にしてシェルに入力する必要があります。 PythonスクリプトがPythonスクリプトに呼び出される可能性があるため、PythonとBash Scriptsを詩で実行する必要があります。 src/の下のすべてのBASHスクリプトは、現在の作業ディレクトリとしてsrc/を使用して実行する必要があります。
scripts/の下のすべてのスクリプトは、現在の作業ディレクトリとしてトップレベルのディレクトリを使用して実行する必要があります。
experiments/ディレクトリには、論文に示されているすべての実験とプロットを再現するためのスクリプトが含まれています。これらのスクリプトの一部は、コンピューティングクラスターにジョブを送信するために使用することを目的としています。それらはコンテナの外で走る必要があります。ファイルexperiments/submit-job.bashを編集して、特定のコンピューティングクラスターに合わせて調整する必要があります。他のスクリプトは、テーブルをプロットまたは印刷するためのものであり、コンテナ内で実行する必要があります。