이 저장소에는 논문 "비 결정적 스택 RNN의 놀라운 계산 능력"(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/ : 소프트웨어 환경 설정, 컨테이너 이미지 구축, 컨테이너 실행, 파이썬 패키지 설치, 전처리 데이터 등을위한 도우미 스크립트가 포함되어 있습니다. 이러한 스크립트 사용에 대한 지침은 다음과 같습니다.src/ : 모든 모델, 교육 루틴, 스크립트 플롯 등의 소스 코드가 포함되어 있습니다.tests/ : src/ 의 코드에 대한 단위 테스트가 포함되어 있습니다. 재현성을 높이기 위해이 백서의 코드는 Dockerfile-dev 파일에 정의 된 Docker 컨테이너 내부에서 개발되어 실행되었습니다. 이 코드를 실행하려면 Docker 이미지를 직접 만들고 Docker를 사용하여 실행할 수 있습니다. 또는 Docker를 설치하고 싶지 않다면 Dockerfile-dev 자신의 시스템에서 소프트웨어 환경을 설정하기위한 참조로 사용하면 간단히 사용할 수 있습니다. 또한 HPC 클러스터에서 사용할 수있는 동등한 특이점 이미지를 빌드 할 수 있으며, 여기서 Docker는 사용할 수 없지만 특이점은 있습니다.
어쨌든, NVIDIA GPU에 액세스 할 수있는 기계에서 대부분의 실험을 실행하여 합리적인 시간 내에 마무리하는 것이 좋습니다. 이에 대한 예외는 공식 언어 모델링 작업에서 기준선 모델 (LSTM, 중첩 스택 LSTM 및 계층화 스택 LSTM)에 대한 실험입니다. GPU보다는 CPU에서 더 빠르게 마무리되며 CPU 모드에서 실행되어야하므로 예외입니다.
Docker 이미지를 사용하려면 먼저 Docker를 설치해야합니다. GPU에서 실험을 실행하려는 경우 NVIDIA 드라이버가 올바르게 설정되어 NVIDIA 컨테이너 툴킷을 설치하는지 확인해야합니다.
공개 Docker 이미지를 자동으로 당기려면 컨테이너를 시동하고 그 안에 배쉬 쉘을 열고 실행하십시오.
$ 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 Image) 파일로 변환해야합니다. 이를 위해서는 해당 기계에 Docker와 Singularity를 설치해야합니다. 위의 지침에 따라 Docker 이미지를 이미 작성했다고 가정하면 다음을 사용하여 .sif 파일을 만들 수 있습니다.
$ bash scripts/build-singularity-image.bash
이것은 nondeterministic-stack-rnn-2023.sif 파일을 생성합니다. 몇 분이 걸리는 것은 정상입니다. 그 후 .sif 파일을 HPC 클러스터에 업로드하여 사용할 수 있습니다.
사용을 사용하여 특이점 컨테이너에서 쉘을 열 수 있습니다.
$ bash scripts/singularity-shell.bash
NVIDIA GPU가없는 기계에서 작동하지만 GPU가 없으면 경고를 출력합니다.
여기에서 특이점에 대한보다 일반적인 튜토리얼을 찾을 수 있습니다.
코드를 실행하는 데 사용하는 메소드 (Docker 컨테이너, 특이성 컨테이너 또는 컨테이너 없음)는 실행해야 할 추가 설정 및 전처리 단계가 있습니다. 다음 스크립트는 귀하를 위해이를 처리합니다 (컨테이너를 사용하는 경우 컨테이너 쉘 내부에서 이를 실행해야합니다).
$ bash scripts/setup.bash
보다 구체적 으로이 스크립트 :
src/ 의 모든 파일은 poetry 사용하여 실행하여 시가 패키지 관리자가 제공하는 Python 패키지에 액세스 할 수 있도록해야합니다. 즉, poetry run 으로 모든 명령을 접두사하거나 poetry shell 미리 실행하여시의 virtualenv가 항상 활성화 된 껍질에 들어가야합니다. Bash 스크립트가 Python 스크립트를 호출 할 수 있기 때문에 시로 Python과 Bash 스크립트를 모두 실행해야합니다. src/ 의 모든 BASH 스크립트는 src/ 로 현재 작업 디렉토리로 실행해야합니다.
scripts/ 의 모든 스크립트는 최상위 디렉토리와 함께 현재 작업 디렉토리로 실행해야합니다.
experiments/ 디렉토리에는 논문에 제시된 모든 실험과 플롯을 재현하기위한 스크립트가 포함되어 있습니다. 이 스크립트 중 일부는 컴퓨팅 클러스터에 작업을 제출하는 데 사용됩니다. 컨테이너 외부에서 실행해야합니다. 특정 컴퓨팅 클러스터에 맞게 파일 experiments/submit-job.bash 편집해야합니다. 다른 스크립트는 테이블을 플로팅하거나 인쇄하기위한 것이며 컨테이너 내부에서 실행해야합니다.