يحتوي هذا المستودع على رمز الورقة "القوة الحسابية المذهلة لـ Nondeterministic Stack RNNs" (Dusell and Chiang ، 2023). ويشمل جميع الكود اللازم لإعادة إنتاج التجارب والأرقام المستخدمة في الورقة ، وكذلك تعريف صورة Docker يمكن استخدامه لتكرار بيئة البرنامج التي تم تطويرها فيها.
إذا كنت تبحث عن الكود الخاص بالورقة السابقة "تعلم الهياكل الهرمية مع مداخن غير محددة قابلة للتمييز" (Dusell و Chiang ، 2022) ، يرجى الاطلاع على هذا الإصدار.
إذا كنت تبحث عن الكود الخاص بالورقة السابقة "اللغات الخالية من السياق مع RNNs المكدس غير المحدود" (Dusell and Chiang ، 2020) ، يرجى الاطلاع على هذا الإصدار.
يتضمن هذا المستودع تطبيقات Pytorch للنماذج التالية:
data/ : يحتوي على مجموعات بيانات تستخدم للتجارب ، وهي مجموعة بيانات نمذجة لغة PTB.experiments/ : يحتوي على برامج نصية لإعادة إنتاج جميع التجارب والأشكال المقدمة في الورقة.capacity/ : البرامج النصية لتجارب السعة في القسم 5.non-cfls/ : البرامج النصية للتجارب غير CFL في القسم 4.ptb/ : البرامج النصية لتجارب نمذجة لغة PTB في القسم 6.scripts/ : تحتوي على البرامج النصية المساعد لإعداد بيئة البرمجيات ، وبناء صور الحاويات ، وتشغيل الحاويات ، وتثبيت حزم Python ، وبيانات المعالجة المسبقة ، وما إلى ذلك.src/ : يحتوي على رمز مصدر لجميع النماذج ، وروتين التدريب ، وتخطيط البرامج النصية ، إلخ.tests/ : يحتوي على اختبارات الوحدة للرمز تحت src/ . من أجل تعزيز الاستنساخ ، تم تطوير رمز هذه الورقة وتشغيله داخل حاوية Docker محددة في ملف Dockerfile-dev . لتشغيل هذا الرمز ، يمكنك إنشاء صورة Docker بنفسك وتشغيلها باستخدام Docker. أو ، إذا كنت لا ترغب في تثبيت Docker ، فيمكنك ببساطة استخدام Dockerfile-dev كمرجع لإعداد بيئة البرنامج على نظامك الخاص. يمكنك أيضًا إنشاء صورة متفرقة مكافئة يمكن استخدامها على مجموعة HPC ، حيث من المحتمل أن Docker غير متوفر ولكن التفرد.
على أي حال ، يوصى بشدة بإجراء معظم التجارب على الجهاز مع إمكانية الوصول إلى وحدة معالجة الرسومات NVIDIA بحيث تنتهي في غضون فترة زمنية معقولة. الاستثناء من ذلك هو التجارب على نماذج خط الأساس (LSTM ، مكدس التراكب LSTM ، ومكدس التقسيم الطبقي LSTM) على مهام نمذجة اللغة الرسمية ، حيث تنتهي بسرعة أكبر على وحدة المعالجة المركزية بدلاً من GPU ويجب تشغيلها في وضع وحدة المعالجة المركزية.
من أجل استخدام صورة Docker ، يجب عليك أولاً تثبيت Docker. إذا كنت تنوي إجراء أي تجارب على وحدة معالجة الرسومات ، فيجب عليك أيضًا التأكد من إعداد برنامج تشغيل NVIDIA بشكل صحيح وتثبيت مجموعة أدوات حاوية NVIDIA.
من أجل سحب صورة Docker العامة تلقائيًا ، وابدأ الحاوية ، وفتح قذيفة باش بداخلها ، قم بتشغيلها
$ bash scripts/docker-shell.bash --pull
إذا كنت تفضل بناء الصورة من الصفر بنفسك ، فيمكنك الركض
$ bash scripts/docker-shell.bash --build
بعد أن تقوم ببناء الصورة مرة واحدة ، ليست هناك حاجة للقيام بذلك مرة أخرى ، لذلك بعد ذلك يمكنك ببساطة الجري
$ bash scripts/docker-shell.bash
بشكل افتراضي ، يبدأ هذا البرنامج النصي الحاوية في وضع GPU ، والذي سيفشل إذا كنت لا تعمل على جهاز مع وحدة معالجة الرسومات. إذا كنت ترغب فقط في تشغيل الأشياء في وضع وحدة المعالجة المركزية ، فيمكنك التشغيل
$ bash scripts/docker-shell.bash --cpu
يمكنك الجمع بين هذا مع --pull أو --build .
إذا كنت تستخدم مجموعة HPC المشتركة في مؤسستك ، فقد لا تدعم Docker ، ولكن هناك فرصة لدعم التفرد ، وهو وقت تشغيل بديل للحاويات أكثر ملاءمة لبيئات الحوسبة المشتركة.
من أجل تشغيل الكود في حاوية Singularity ، يجب أولاً الحصول على صورة Docker ثم تحويلها إلى ملف .sif (صورة المفرد) على جهاز يمكنك الوصول إلى الجذر (على سبيل المثال الكمبيوتر الشخصي أو محطة العمل). هذا يتطلب تثبيت كل من Docker و Singularity على هذا الجهاز. على افتراض أنك قمت بالفعل بإنشاء صورة Docker وفقًا للتعليمات أعلاه ، يمكنك استخدام ما يلي لإنشاء ملف .sif :
$ bash scripts/build-singularity-image.bash
سيؤدي ذلك إلى إنشاء الملف nondeterministic-stack-rnn-2023.sif . من الطبيعي أن يستغرق هذا عدة دقائق. بعد ذلك ، يمكنك تحميل ملف .sif إلى مجموعة HPC واستخدامه هناك.
يمكنك فتح قذيفة في حاوية التفرد باستخدام
$ bash scripts/singularity-shell.bash
سيعمل هذا على الآلات التي لا تحتوي على وحدة معالجة الرسومات NVIDIA ، على الرغم من أنها ستخرج تحذيرًا إذا لم يكن هناك وحدة معالجة الرسومات.
يمكنك العثور على برنامج تعليمي أكثر عمومية حول التفرد هنا.
مهما كانت الطريقة التي تستخدمها لتشغيل الرمز (سواء في حاوية Docker أو حاوية التفرد أو حاوية بدون) ، هناك بعض الخطوات الإضافية للمعالجة التي تحتاج إلى تشغيلها. سوف يعتني البرنامج النصي التالي من أجلك (إذا كنت تستخدم حاوية ، فيجب عليك تشغيل هذا داخل قشرة الحاوية ):
$ bash scripts/setup.bash
بشكل أكثر تحديدًا ، هذا البرنامج النصي:
يجب تشغيل جميع الملفات تحت src/ باستخدام poetry حتى تتمكن من الوصول إلى حزم Python التي يوفرها مدير حزمة الشعر. هذا يعني أنه يجب عليك إما بادئة جميع الأوامر الخاصة بك مع poetry run أو تشغيل poetry shell مسبقًا لإدخال قذيفة مع تمكين Viretry's VirtualEnV طوال الوقت. يجب عليك تشغيل كل من البرامج النصية Python و Bash مع الشعر ، لأن البرامج النصية Bash قد تدعو إلى البرامج النصية Python. يجب تشغيل جميع البرامج النصية للباش تحت src/ مع src/ كدليل العمل الحالي.
يجب تشغيل جميع البرامج النصية تحت scripts/ مع دليل المستوى الأعلى كدليل عمل حالي.
يحتوي experiments/ الدليل على برامج نصية لإعادة إنتاج جميع التجارب والمؤامرات المقدمة في الورقة. تهدف بعض هذه البرامج النصية إلى استخدام الوظائف إلى مجموعة الحوسبة. يجب تشغيلها خارج الحاوية. ستحتاج إلى تحرير experiments/submit-job.bash لتخصيصها مع مجموعة الحوسبة المحددة الخاصة بك. البرامج النصية الأخرى مخصصة للتخطيط أو الطباعة ويجب تشغيلها داخل الحاوية.