พื้นที่เก็บข้อมูลนี้มีรหัสสำหรับกระดาษ "พลังการคำนวณที่น่าประหลาดใจของสแต็คแบบไม่ใช้สแต็ค" (Dusell and Chiang, 2023) มันรวมถึงรหัสทั้งหมดที่จำเป็นในการทำซ้ำการทดลองและตัวเลขที่ใช้ในกระดาษรวมถึงคำจำกัดความของภาพนักเทียบท่าที่สามารถใช้ในการทำซ้ำสภาพแวดล้อมซอฟต์แวร์ที่พัฒนาขึ้น
หากคุณกำลังมองหารหัสสำหรับกระดาษก่อนหน้านี้ของเรา "การเรียนรู้โครงสร้างลำดับชั้นที่มีสแต็คแบบ nondeterministic ที่แตกต่างกัน" (Dusell and Chiang, 2022) โปรดดูรุ่นนี้
หากคุณกำลังมองหารหัสสำหรับบทความก่อนหน้านี้ของเรา "การเรียนรู้ภาษาที่ปราศจากบริบทด้วยสแต็คแบบไม่ใช้สแต็ค" (Dusell and Chiang, 2020) โปรดดูรุ่นนี้
ที่เก็บนี้รวมถึงการใช้งาน pytorch ของรุ่นต่อไปนี้:
data/ : มีชุดข้อมูลที่ใช้สำหรับการทดลองคือชุดข้อมูลการสร้างแบบจำลองภาษา PTBexperiments/ : มีสคริปต์สำหรับการทำซ้ำการทดลองและตัวเลขทั้งหมดที่นำเสนอในกระดาษcapacity/ : สคริปต์สำหรับการทดลองกำลังการผลิตในส่วนที่ 5non-cfls/ : สคริปต์สำหรับการทดลองที่ไม่ใช่ CFL ในส่วนที่ 4ptb/ : สคริปต์สำหรับการทดลองการสร้างแบบจำลองภาษา PTB ในส่วนที่ 6scripts/ : มีสคริปต์ตัวช่วยสำหรับการตั้งค่าสภาพแวดล้อมซอฟต์แวร์การสร้างภาพคอนเทนเนอร์การทำงานคอนเทนเนอร์การติดตั้งแพ็คเกจ Python ข้อมูลการประมวลผลล่วงหน้า ฯลฯ คำแนะนำสำหรับการใช้สคริปต์เหล่านี้อยู่ด้านล่างsrc/ : มีซอร์สโค้ดสำหรับทุกรุ่น, รูทีนการฝึกอบรม, การพล็อตสคริปต์ ฯลฯtests/ : มีการทดสอบหน่วยสำหรับรหัสภายใต้ src/ เพื่อส่งเสริมการทำซ้ำรหัสสำหรับบทความนี้ได้รับการพัฒนาและทำงานภายในคอนเทนเนอร์ Docker ที่กำหนดไว้ในไฟล์ Dockerfile-dev ในการเรียกใช้รหัสนี้คุณสามารถสร้างอิมเมจนักเทียบท่าด้วยตัวเองและเรียกใช้โดยใช้ Docker หรือหากคุณไม่รู้สึกอยากติดตั้ง Docker คุณสามารถใช้ Dockerfile-dev เป็นข้อมูลอ้างอิงสำหรับการตั้งค่าสภาพแวดล้อมซอฟต์แวร์ในระบบของคุณเอง นอกจากนี้คุณยังสามารถสร้างภาพความเป็นเอกเทศที่เทียบเท่าซึ่งสามารถใช้กับคลัสเตอร์ HPC ซึ่งเป็นไปได้ว่านักเทียบท่าไม่พร้อมใช้งาน แต่เป็นเรื่องธรรมดา
ไม่ว่าในกรณีใดขอแนะนำให้ทำการทดลองส่วนใหญ่บนเครื่องที่มีการเข้าถึง Nvidia GPU เพื่อให้เสร็จภายในระยะเวลาที่เหมาะสม ข้อยกเว้นนี้คือการทดลองสำหรับรุ่นพื้นฐาน (LSTM, Superposition Stack LSTM และการแบ่งชั้น LSTM) ในงานการสร้างแบบจำลองภาษาอย่างเป็นทางการเนื่องจากพวกเขาเสร็จสิ้นการซีพียูมากกว่า GPU และควรทำงานในโหมด CPU
ในการใช้อิมเมจนักเทียบท่าคุณต้องติดตั้ง 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 แต่มีโอกาสที่จะสนับสนุนความเป็นเอกเทศซึ่งเป็นรันไทม์ของคอนเทนเนอร์ทางเลือกที่เหมาะสำหรับสภาพแวดล้อมการคำนวณที่ใช้ร่วมกัน
ในการเรียกใช้รหัสในคอนเทนเนอร์เอกพจน์คุณต้องได้รับอิมเมจนักเทียบท่าก่อนจากนั้นแปลงเป็นไฟล์ .sif (ภาพเอกพจน์) บนเครื่องที่คุณมีการเข้าถึงรูท (เช่นคอมพิวเตอร์ส่วนบุคคลหรือเวิร์กสเตชันของคุณ) สิ่งนี้ต้องมีการติดตั้งทั้งนักเทียบท่าและความเป็นเอกเทศในเครื่องนั้น สมมติว่าคุณได้สร้างอิมเมจนักเทียบท่าตามคำแนะนำด้านบนแล้วคุณสามารถใช้สิ่งต่อไปนี้เพื่อสร้างไฟล์ .sif :
$ bash scripts/build-singularity-image.bash
สิ่งนี้จะสร้างไฟล์ nondeterministic-stack-rnn-2023.sif เป็นเรื่องปกติที่จะใช้เวลาหลายนาที หลังจากนั้นคุณสามารถอัปโหลดไฟล์ .sif ไปยังคลัสเตอร์ HPC ของคุณและใช้งานได้ที่นั่น
คุณสามารถเปิดเปลือกในภาชนะที่เป็นเอกเทศโดยใช้
$ bash scripts/singularity-shell.bash
สิ่งนี้จะทำงานกับเครื่องจักรที่ทำและไม่มี Nvidia GPU แม้ว่ามันจะส่งออกคำเตือนหากไม่มี GPU
คุณสามารถหาบทช่วยสอนทั่วไปเกี่ยวกับความเป็นเอกเทศได้ที่นี่
ไม่ว่าคุณจะใช้วิธีการใดในการเรียกใช้รหัส (ไม่ว่าจะอยู่ในคอนเทนเนอร์ Docker, Container Singularity หรือไม่มีคอนเทนเนอร์) มีขั้นตอนการตั้งค่าเพิ่มเติมและขั้นตอนการประมวลผลล่วงหน้าที่คุณต้องเรียกใช้ สคริปต์ต่อไปนี้จะดูแลสิ่งเหล่านี้ให้คุณ (หากคุณใช้คอนเทนเนอร์คุณต้องเรียกใช้สิ่งนี้ ภายในเชลล์คอนเทนเนอร์ ):
$ bash scripts/setup.bash
โดยเฉพาะอย่างยิ่งสคริปต์นี้:
ไฟล์ทั้งหมดภายใต้ src/ ควรเรียกใช้โดยใช้ poetry เพื่อให้สามารถเข้าถึงแพ็คเกจ Python ที่จัดทำโดย Poetry Package Manager ซึ่งหมายความว่าคุณควรนำหน้าคำสั่งทั้งหมดของคุณด้วย poetry run หรือเรียกใช้ poetry shell ล่วงหน้าเพื่อเข้าสู่เชลล์ด้วย VirtualEnV ของบทกวีที่เปิดใช้งานตลอดเวลา คุณควรเรียกใช้สคริปต์ Python และ Bash ด้วยบทกวีเพราะสคริปต์ Bash อาจเรียกร้องให้สคริปต์ Python สคริปต์ Bash ทั้งหมดภายใต้ src/ ควรทำงานด้วย src/ เป็นไดเรกทอรีการทำงานปัจจุบัน
สคริปต์ทั้งหมดภายใต้ scripts/ ควรเรียกใช้กับไดเรกทอรีระดับบนสุดเป็นไดเรกทอรีการทำงานปัจจุบัน
experiments/ ไดเรกทอรีมีสคริปต์สำหรับการทำซ้ำการทดลองทั้งหมดและแปลงที่นำเสนอในกระดาษ สคริปต์เหล่านี้บางส่วนมีวัตถุประสงค์เพื่อใช้ในการส่งงานไปยังคลัสเตอร์คอมพิวเตอร์ พวกเขาควรจะวิ่งนอกคอนเทนเนอร์ คุณจะต้องแก้ไข experiments/submit-job.bash เพื่อปรับให้เข้ากับคลัสเตอร์คอมพิวเตอร์เฉพาะของคุณ สคริปต์อื่น ๆ สำหรับการพล็อตหรือการพิมพ์ตารางและควรทำงานภายในคอนเทนเนอร์