هذا هو الكود لإعادة إنتاج التجارب من ورقة EMNLP 2021 "قوة المقياس لضبط موجه المفعول مع المعلمة" (Lester et al. ، 2021).
هذه النماذج مبنية على T5x ، والتي تحدد النموذج وحلقة التدريب ؛ بوكسورمر ، الذي يحدد حساب النموذج الفعلي ؛ الكتان ، الذي يحدد طبقات النموذج منخفض المستوى ؛ وجاكس ، الذي يوفر التنفيذ الفعلي. يمكن العثور على تفاصيل تنفيذنا هنا.
gs://{bucket-name}/path/to/item/in/bucket . هذا هو المكان الذي سنخزن فيه مجموعات البيانات المخبأة بالإضافة إلى نقاط التفتيش والنتائج النموذجية. لسهولة الرجوع إليها ، هناك بعض الأوامر السحابية الأكثر شيوعًا للتفاعل مع VMs TPU # Create a Cloud TPU VM
$ gcloud alpha compute tpus tpu-vm create ${TPU_NAME}
--zone ${ZONE}
--accelerator-type v3-8
--version v2-alpha
# SSH into a Cloud TPU VM
$ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME} --zone ${ZONE}
# Delete a Cloud TPU VM
$ gcloud alpha compute tpus tpu-vm delete ${TPU_NAME} --zone ${ZONE}git clone --branch=main https://github.com/google-research/prompt-tuning
cd prompt-tuningpython3 -m pip install .[tpu] -f https://storage.googleapis.com/jax-releases/libtpu_releases.html إذا واجهت خطأً حيث تحاول PIP التثبيت في وقت سابق وإصدارات Earliler من التبعيات (TensorFlow على سبيل المثال) حتى تحاول تثبيت الإصدار 0.0.0 ثم يفشل محاولة إضافة --use-deprecated=legacy-resolver إلى أمر التثبيت. يرتبط هذا الخطأ بالإصدارات المطلوبة التبعيات ، وغالبًا ما يطلق على السلوك التراجع. إذا كنت تستخدم العلامة ، فمن الممكن تثبيت إصدارات غير متوافقة من المكتبات ويجب أن تبحث عن تحذيرات حول عدم التطابق في إخراج أمر التثبيت.
ملاحظة: إذا كنت تخطط للاختراق على الداخلية من الضبط السريع وتحتاج إلى تثبيت قابل للتحرير (لذلك يتم استخدام التغييرات في الكود المستنسخ عند تشغيل التدريب) قم بتشغيل pip مع علامة -e وقد تحتاج إلى حذف ملف pyproject.toml إذا كنت تحصل على أخطاء أثناء التثبيت.
لتشغيل الاختبارات ، قم بتثبيت الحزمة باستخدام خيار [test] ( python3 -m pip install .[test] ... ) ثم تشغيل python3 -m pytest من جذر المستودع المستنسخ.
يتشابه تدريب المطالبة مع صياغة نموذج مع T5x ؛ الفرق الرئيسي هو أن لدينا مجموعة خاصة من ملفات تكوين الضبط السريع للاستخدام.
نحن نقدم البرنامج النصي التجريبي ( prompt_tuning/scripts/sst2-demo.sh ) يحتوي على جميع الأجزاء المطلوبة لتدريب موجه. يمكنك استخدام هذا كنقطة انطلاق ، أو تعيين متغيرات بيئة MODEL_DIR و TFDS_DATA_DIR مع مسارات إلى دلو التخزين السحابي من Google لتشغيل هذا البرنامج النصي مباشرةً.
./prompt-tuning/prompt_tuning/scripts/sst2-demo.shللمساعدة في سرعة التكرار ، نميل إلى تحديد المزيد من الخيارات التي يتجاوزها سطر الأوامر بدلاً من تجميع جميع التكوين في ملف Gin واحد. بعض الخيارات الملاحظة:
--gin_search_paths :: a faxa مفصولة قائمة من الدلائل لاستخدامها كبادئات مسار لملفات الجن. يمكننا استخدام prompt_tuning.scripts.find_module ${module} للعثور على موقع تثبيت المكتبات التي تجمع معها.--gin_file :: ملف الجن لتحميل. نميل إلى استخدام المسارات النسبية بدءًا من المكتبة التي يتم تثبيتها بها ، IE prompt_tuning/configs/models/t5_1_1_base_prompt.gin عبر models/t5_1_1_base_prompt.gin لتجنب أي ارتباك. باستخدام العلامة ، يمكن استخدام عدة وقت لتحديد ملفات Gin المتعددة التي سيتم دمجها معًا. ستستخدم أي خيارات تكوينات في ملفات متعددة القيمة من الملف الأخير في القائمة.--gin.{PARAM}={VALUE} PARAM VALUE يمكن استخدام ذلك لتعيين خيارات التكوين بسهولة دون مطالبة بها ليكون وسيطات سطر الأوامر الفعلية. على سبيل المثال. --gin.utils.SaveCheckpointConfig.keep=20 سيحفظ آخر 20 نقطة تفتيش.مع زيادة حجم النماذج ، فإن XL و XXL على سبيل المثال ، لا تتناسب مع 8 TPU التي تأتي مع TPU VM واحد. في هذه الحالات ، سنحتاج إلى شريحة من جراب TPU (يمكن العثور على مزيد من المعلومات حول بنية TPU والتكوينات المتاحة هنا). الفرق الرئيسي بين تدريب مطالبة على TPU VM واحد وعلى شريحة POD هو أن لدينا الآن متعددة TPU VMs وسوف ندير نفس SPMD Jax في كل VM ، تحتوي هذه الصفحة على مزيد من المعلومات حول برامج Jax متعددة المضيفات. يقدم هذا الدليل مقدمة سريعة لتشغيل برامج Jax على شريحة TPU Pod ، لكننا سنصل إلى النقاط الرئيسية هنا.
$ gcloud alpha compute tpus tpu-vm create ${TPU_NAME}
--zone ${ZONE}
--accelerator-type v3-32
--version v2-alpha--command= flag وأنه يجب تشغيله على جميع أجهزة VM (المسمى العمال) مع --worker=all . $ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME}
--zone ${ZONE}
--worker=all
--command= " git clone --branch=main https://github.com/google-research/prompt-tuning && cd prompt-tuning && "
python3 -m pip install . -f https://storage.googleapis.com/jax-releases/libtpu_releases.html اكتب البرنامج النصي لتدريب موجه. قمنا بتضمين برنامج نصي تجريبي ( /prompt_tuning/scripts/sst2-xxl-demo.sh ) يدرب مطالبة بحل مجموعة بيانات SST2 باستخدام T5 1.1 LM100K XXL. يمكنك استخدام هذا كنقطة انطلاق أو مجرد ملء المسارات إلى دلو تخزين Google Cloud الخاص بك لتحديد المكان الذي تريد حفظ النتائج الخاصة بك ( MODEL_DIR ) ومكان تخزين بيانات TFDS ( TFDS_DATA_DIR ) ، أو تعيينها كمتغيرات بيئة.
انسخ نص التدريب الخاص بك كل عامل. إذا كانت هذه هي المرة الأولى التي تقوم فيها بتشغيل scp فقد تحصل على خطأ ، قم بتشغيل أمر ssh-add /.../.ssh/google_compute_engine من رسالة الخطأ وحاول مرة أخرى.
$ gcloud alpha compute tpus tpu-vm scp sst2-xxl-demo.sh ${TPU_NAME} :
--zone= ${ZONE}
--worker=all$ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME}
--zone ${ZONE}
--worker=all
--command= " ./sst2-xxl-demo.sh " إذا كان لدى أحد العمال خطأ أثناء التدريب ، فسيتم تركك مع عمليات تستخدم TPUs على العمال الآخرين. سيمنعك هذا من إعادة تشغيل وظيفتك حتى يتم إنهاء هذه العمليات وإصدار TPU. يجب أن ينهي الأمر التالي كل هذه العمليات. قد ترى صفحة رجل قيادة kill تعود من العامل الذي كان لديه الخطأ الأولي.
$ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME}
--zone ${ZONE}
--worker=all
--command= " sudo lsof -t /dev/accel0 | xargs kill -9 "لتدريب المطالبات باستخدام قطع غيار مخصصة ، مثل مجموعة البيانات الخاصة بك ، اتبع تعليمات T5X على المكونات المخصصة
إذا قمت بتعبئة الكود الخاص بك كحزمة بيثون قابلة للتركيب ، فلن تكون ملزماً بدليل واحد ، ويمكنك استخدام python3 -m prompt_tuning.scripts.find_module {your_module} للمساعدة في تعيين gin_search_paths بحيث يتم العثور على تكوينات gin في مكتبتك. ملاحظة: إذا كنت تخطط لتكوينات Gin Gin في حزمة قابلة للتثبيت ، فتأكد من أن الدلائل التي تحتوي على ملفات التكوين لها __init__.py لأن Gin تتطلب الملفات في حزمة Python.
إذا كانت أجزاء من مكوناتك المخصصة قابلة للتكوين GIN ، فيجب استيرادها بشكل صريح في ملفات الجن الخاصة بك ؛ إذا انتهى الأمر بالاستيراد بعد تحليل ملفات الجن ، فسوف يتسبب في حدوث خطأ. إذا لم تحتوي أي من تبعياتك على تكوينات GIN ، فيمكنك تجنب كتابة ملف GIN عن طريق المرور --gin.MIXTURE_OR_TASK_MODULE="'path.to.your.module' . سيؤدي ذلك تلقائيًا إلى استيراد الوحدة النمطية الخاصة بك ويكون مريحًا عندما تقوم كل ما تفعله بتقديم مجموعات البيانات.
تتمثل الطريقة المقترحة في الاستدلال مع موجه هي تحميل نقطة التفتيش الأصلية المستخدمة لتهيئة النموذج ، والمطالبة من ملف. كما هو موضح في هذا القسم حول التحميل الجزئي ، يدعم T5X تحميل بعض معلمات النموذج مع تهيئة الآخرين من نقطة الصفر. نستخدم هذا بالاقتران مع from_array Promize لإعادة تحميل المعلمات المجمدة من نقطة التفتيش الأصلية وملف ملف Artive A. يقوم configs/runs/prompt_eval.gin بإعداد هذا التكوين لك ؛ عليك فقط توفير PROMPT_FILE . إذا تم تدريب النموذج الخاص بك مع أي من ملفات prompts/ التكوين ، فيمكنك إزالتها من الوسيطات إلى البرنامج النصي للتقييم.
يُظهر البرنامج النصي sst2-demo-eval.sh مثالًا على إجراء التقييم بهذه الطريقة. كل ما هو مطلوب هو تعيين متغيرات البيئة EVAL_DIR و TFDS_DATA_DIR إلى مسارات تخزين إخراج التقييم ومجموعات بيانات TensorFlow احتراما.
في T5X ، يفترض البرنامج النصي للتقييم أن مجموعة البيانات الخاصة بك لديها ملصقات وتخرج النتائج النهائية من وظائف مقياس البيانات الخاصة بك. لا يتطلب البرنامج النصي للاستدلال تسميات وبدلاً من ذلك يخرج تنبؤ النموذج الخاص بك. نقوم بتضمين ملف prompt_infer.gin مماثل لاستخدامه مع البرنامج النصي للاستدلال.
إذا كنت ترغب في القيام بالاستدلال أو التقييم مع نقطة تفتيش T5X التي يتم إنتاجها من تشغيل تدريب على ضبط الموجه ، فيمكنك استخدام (eval|infer).gin جين من T5x مباشرة. ستحتاج إلى تحديث utils.RestoreChekcpointConfig رغم ذلك. يجب عليك تعيين path على نقطة التفتيش الجديدة ، assignment_map=() و fallback_to_scratch=False .
جميع النماذج والتدريب والتقييم والتوفير والاستعادة ، إلخ. يتم التكوين عبر GIN. انظر مستودع Gin-Config للحصول على مقدمة عامة على الجن وهذا التمهيدي
نتبع تخطيط تكوين T5x:
runs/ :: يحتوي على تكوينات للتدريب الفعلي للنموذج. هذا هو المكان الذي تذهب إليه أشياء مثل مجموعة البيانات وتكوين التقييم.architectures/ :: يحتوي على تكوينات لكيفية عمل النموذج. هذا هو المكان الذي يتم فيه تكوين أشياء مثل تشفير DecoDer vs Decoder-only و Simbeding.models/ :: يحتوي على تكوينات التي تعيين معلمات نموذج محددة مثل عدد الطبقات أو حجم جدول التضمين. كما أنه يقوم بتكوين أشياء مثل غلاف نموذج T5X المستخدم.models/decoding/ :: يحتوي على تكوينات سهلة الاستخدام لمبادلة كيفية إنشاء النموذج النص أثناء الاستدلال ، ويشمل التكوينات للبحث عن الشعاع وأخذ عينات من النواة.models/sizes/ :: على الإعدادات المختلفة لإنشاء نماذج ذات أحجام مختلفة ، يتم دمجها مع الإصدارات الافتراضية لإنشاء إصدار بحجم ، على سبيل المثال ، t5_1_1_prompt.gin + sizes/large.gin ينشئ نموذجًا كبيرًا T5 1.1. تتضمن بعض المجموعات الشائعة المتوفرة بالفعل كملفات الجن مع اليمين ( t5_1_1_large_prompt.gin لمثالنا أعلاه). ملاحظة: يجب أن تأتي ملفات الحجم هذه بعد ملف النموذج الرئيسي.prompts/ :: يحتوي الدليل الإضافي الخاص بنا على تكوينات تضع متغير GIN PROMPT ، مما يتيح سهولة التبديل للتهيئة المطبقة التي تتم إضافة ملف المطالبة models/ --gin_file عند تحديد وسيطات --gin_file في سطر الأوامر ، يهم الترتيب. الترتيب العام الذي يجب تحديد ملفات الجن هو:
models/*.ginprompts/*.ginmodels/sizes/*.gin*models/decoding/*.ginruns/*.gin يحتوي T5x على بعض الحقول المطلوبة مثل MIXTURE_OR_TASK_NAME أو TASK_FEATURE_LENGTHS . نضيف اثنين آخرين:
PROMPT_LENGTH :: طول الموجه الذي نستخدمه ، يتم استخدام هذا في بعض الأماكن المختلفة التي نطلبها كماكرو لجين يمكننا الإشارة إليه في أماكن متعددة وضمان أن تكون القيم متزامنة.PROMPT :: هذا هو تكوين وحدة المطالبة الفعلية التي سيتم استخدامها في فئات FlaxFormer PromptX . ملاحظة: لا يدعم الضبط السريع حاليًا تعبئة الأمثلة. هذا يعني أن طول الهدف الأقصى الخاص بنا يجب أن يكون طويلاً بما يكفي لتناسب الهدف لكل مثال. هذا يعني أن مفتاح targets في تعيين TASK_FEATURE_LENGTHS يمكن أن يكون أقصر بكثير ، على سبيل المثال حوالي 4 بالنسبة للعديد من مهام SuperGlue (Wang et al. ، 2019) ، مقارنة بـ 62 وهو ما هو افتراضي P5x.
هناك عدة خيارات لتهيئة المعلمة المطالبة. نحن ندعم الطرق المختلفة في القسم 3.2 ورقتنا ، وكذلك التهيئة من ملف. هذا الأخير يسمح للمرء القيام بأشياء مثل القطار على boolq بدءا من موجه تعلمت على mnli.
تتبع جميع المهيئات واجهة برمجة تطبيقات المصادفة للكتان من كونها دالة معلمة تُرجع إغلاقًا على وظيفة التهيئة. وظيفة التهيئة الفعلية لها دائمًا توقيع
def initializer ( rng : Array , shape : Sequence [ int ]) -> Array :
... نحن نقدم كل مخطط تهيئة كملف تكوين GIN في دليل configs/prompts . يمكن استخدامها عن طريق تضمين ملف GIN مع --gin_file=path/to/configs/prompts/scheme.gin . يجب أن يأتي هذا الملف بعد ملف النموذج الرئيسي ، وإلا فإن طريقة الافتراضية (الموحدة العشوائية) ستعمل على الكتابة فوق تلك التي حددتها. ستتطلب منك بعض أساليب التهيئة هذه تعيين قيم الجن الإضافية إما على الرغم من أن علامة التجاوز في أحد ملفات الجن.
موحد عشوائي
تهيئة عشوائية قياسية مماثلة لما استخدمه الأشخاص لتضمين التهيئة. هذا هو الافتراضي ولا يلزم وجود ملف جين. يمكن ضبط مقياس القيم العشوائية عن طريق تجاوز prompt_init/linen.initializers.uniform.scale=N .
عينة المفردات
عينة من التضمين الرمزي لاستخدامه كتهيئة لكل موضع مطالبة باستخدام from_sample_of_embeddings . يمكنك الحد من أخذ العينات على أول تضمينات n مع prompt_init/prompts.from_samples_of_embeddings.population_size المعلمة.
يمكن استخدام هذا مع --gin_file=prompt_tuning/configs/prompts/from_sampled_vocab.gin . تستخدم هذه الطريقة جدول التضمين المستخرج من نقطة تفتيش النموذج الأولي. يمكنك أيضًا تزويد ملف التضمين الخاص بك باستخدام --gin_file=prompt_tuning/configs/prompts/from_sampled_vocab_numpy.gin . تتطلب هذه الطريقة أن توفر قيمة EMBEDDING_FILE وهي مجموعة من الجدول التضمين للنموذج. يمكن استخلاص ذلك من نقطة تفتيش نموذج باستخدام report_tuning.scripts.extract_variable.
تسمية الفصل
نحن ندعم تهيئة الطوابع الزمنية المطالبة بتضمين ملصقات الفئة (الملقب بفيروسات ) عبر مُهيئ من from_embedded_list . المستخدمون الذين يقدمون قائمة بالكلمات (ملصقات الفصل) للاستخدام. كل كلمة رمزية بواسطة مفردات مقدمة. مضمن مع جدول المفردات المقدمة. مجمعة ، إذا لزم الأمر ، عبر المداخن الفرعية ؛ وتستخدم لتهيئة خطوة زمنية سريعة. إذا لم تغطي الرموز المميزة المقدمة طول الموجه الكامل ، فسيتم تهيئة الرموز المفقودة باستخدام مُعمى السقوط المتوفرة.
يمكننا مطابقة الورقة ، حيث يتم ملء الرموز المذهلة غير المعبأة عن طريق أخذ العينات من جدول التضمين ، عن طريق تكوين هذا التهيئة مع واحد أعلاه. يمكن استخدامه مع --gin_file=prompt_tuning/configs/prompts/from_class_labels.gin . يتطلب هذا تعيين CLASS_LABELS ، وهي قائمة بالكلمات التي تريد تضمينها كتهيئة سريعة. يمكنك أيضًا توفير ملف التضمين الخاص بك (وهو نفسه كما هو مذكور أعلاه) مع --gin_file=prompt_tuning/configs/prompts/from_class_labels_numpy.gin . هذا يتطلب بالإضافة إلى ذلك تعيين EMBEDDING_FILE .
من السلسلة
نحن ندعم أيضًا تهيئة مطالبة بتضمين بعض السلسلة ، وغالبًا ما تستخدم للبدء من موجه منفصل أو وصف مهمة. هذا يستخدم from_embedded_string . يتم رمز الخيط بواسطة المفردات المقدمة ، ويتم النظر إلى كل رمز في جدول التضمين المقدم ، ويتم استخدام التمثيل المضمّن الناتج للسلسلة كتوضيح موجه. إذا لم تغطي الرموز المميزة المقدمة طول الموجه الكامل ، فسيتم تهيئة الرموز المفقودة باستخدام مُعمى السقوط المتوفرة.
ملاحظة: تقوم المفردات فقط بتحويل السلسلة إلى سلسلة من المعرفات ، ستحتاج إلى التأكد من أن السلسلة تطابق نتيجة أي تنسيق نص (مسافات حول علامات الترقيم ، وما إلى ذلك) التي تقوم بها مهمة Seqio.
من الملف
يمكنك أيضًا تحميل مطالبة من ملف باستخدام from_array Entremizer لتمكين النقل عبر المهام. يتم ذلك باستخدام --gin_file=prompt_tuning/configs/prompts/from_file.gin . يتطلب هذا تعيين PROMPT_FILE مع مسار إلى ملف numpy مع موجه للتحميل. يتم تنبعث إصدارات numpy من المطالبة افتراضيًا عند التدريب ، ولكن يمكن أيضًا استخراج المطالبة مع البرنامج النصي المذكور أعلاه.
لقد أصدرنا نقاط التفتيش الأصلية T5X لنقاط التفتيش T5 1.1 التي كان لها 100 ألف خطوة من تكييف نموذج اللغة.
يتم تحويلها من نقاط التفتيش الشبكية الشبكية العامة.
لقد أصدرنا مطالبات ما قبل الرضا على مجموعة متنوعة من المهام ، ونخطط لإضافتها مع مرور الوقت.
يمكن العثور على المطالبات في دليل pretrained_prompts . من هناك كل مجموعات من مجموعات الدليل الفرعي يطالب بالنموذج الذي تم تدريبه من أجله. أسهل طريقة للرجوع إلى هذه المطالبات التي يتم تجميعها مع المكتبة هي:
--PROMPT_FILE= ` python3 -m prompt_tuning.scripts.find_module prompt_tuning ` /pretrained_prompts/{MODEL_SIZE}/{PROMPT}.npy نظرًا للعشوائية المتأصلة في الحساب المتوازي ، هناك بعض الإعدادات التي تحتاج إلى مطابقة بين التدريب والتقييم للحصول على نفس الأرقام بالضبط. يحتوي كل دليل فرعي من النماذج على README.md يحدد ما يجب أن تكون عليه هذه الإعدادات. أهم الإعدادات التي تتطابق مع حجم الدفعة ، طوبولوجيا TPU ، وتقسيم التوازي النموذجية. تتضمن الجداول الدرجات التي يجب أن تتوقع معرفة ما إذا كنت تستخدم هذه المطالبات في t5x.eval
هذه مجموعة من الموارد الإضافية حول الضبط الفوري.
إذا كنت تستخدم هذا العمل كنقطة انطلاق ، يرجى الاستشهاد
@inproceedings { lester-etal-2021-power ,
title = " The Power of Scale for Parameter-Efficient Prompt Tuning " ,
author = " Lester, Brian and
Al-Rfou, Rami and
Constant, Noah " ,
booktitle = " Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing " ,
month = nov,
year = " 2021 " ,
address = " Online and Punta Cana, Dominican Republic " ,
publisher = " Association for Computational Linguistics " ,
url = " https://aclanthology.org/2021.emnlp-main.243 " ,
doi = " 10.18653/v1/2021.emnlp-main.243 " ,
pages = " 3045--3059 " ,
}هذا ليس منتج Google المدعوم رسميًا.