* اعتبارًا من أغسطس، لم يعد يتم الاحتفاظ بكود 2021. يتم حفظه هنا في شكل أرشيفي للأشخاص الذين يرغبون في الاستمرار في استخدامه.
؟ 1T أو تمثال نصفي يا رفاق؟
تنفيذ نماذج وبيانات متوازية لنماذج تشبه GPT3 باستخدام مكتبة Mesh-tensorflow.
إذا كنت هنا فقط للعب مع نماذجنا المدربة مسبقًا، فإننا نوصيك بشدة بتجربة تكامل HuggingFace Transformer.
يتم دعم التدريب والاستدلال رسميًا على TPU ويجب أن يعمل على وحدة معالجة الرسومات أيضًا. ستتم أرشفة هذا المستودع (في الغالب) بينما ننقل التركيز إلى الريبو الخاص بوحدة معالجة الرسومات، GPT-NeoX.
بالإضافة إلى الوظائف التي يوفرها GPT-3، فإننا نقدم أيضًا ما يلي:
ملحوظة: بينما يمكن لـ neo من الناحية الفنية تشغيل خطوة تدريبية عند 200B+ من المعلمات، إلا أنه غير فعال للغاية في تلك المقاييس. هذا، بالإضافة إلى حقيقة أن العديد من وحدات معالجة الرسومات أصبحت متاحة لنا، من بين أمور أخرى، دفعنا إلى نقل التطوير إلى GPT-NeoX.
تحديث 21/03/2021:
نحن فخورون بإصدار نموذجين من نماذج GPT-Neo تم تدريبهما مسبقًا على The Pile، ويمكن تنزيل الأوزان والتكوينات مجانًا من the-eye.eu.
1.3ب: https://mystic.the-eye.eu/public/AI/gptneo-release/GPT3_XL/
2.7 ب: https://mystic.the-eye.eu/public/AI/gptneo-release/GPT3_2-7B/
لمزيد من المعلومات حول كيفية إعداد هذه العناصر، راجع دفتر ملاحظات colab، أو اقرأ بقية الملف التمهيدي.
النموذج والحجم | كومة BPB | كومة PPL | ويكيتكست PPL | لامبادا PPL | لامبادا ايه سي سي | فينوغراندي | هيلاسواج |
---|---|---|---|---|---|---|---|
جي بي تي-نيو 125م | ----- | ----- | 32.285 | 30.266 | 37.36% | 50.43% | 28.67% |
جي بي تي-3 125 م | ----- | ----- | ----- | 18.6 | 42.7% | 52.0% | 33.7% |
جي بي تي-نيو 350 م | ----- | ----- | 22.5657 | 13.876 | 47.27% | 51.14% | 32.16% |
جي بي تي-3 350 م | ----- | ----- | ----- | 9.09 | 54.3% | 52.1% | 43.6% |
جي بي تي-3 آدا | 0.9631 | ----- | ----- | 9.954 | 51.60% | 52.90% | 35.93% |
جي بي تي-نيو 1.3ب | 0.7527 | 6.159 | 13.10 | 7.498 | 57.23% | 55.01% | 38.66% |
جي بي تي-3 1.3ب | ----- | ----- | ----- | 5.44 | 63.6% | 58.7% | 54.7% |
جي بي تي-2 1.5 ب | 1.0468 | ----- | 17.48 | 10.634 | 51.21% | 59.40% | 40.03% |
جي بي تي-نيو 2.7 بي | 0.7165 | 5.646 | 11.39 | 5.626 | 62.22% | 56.50% | 42.73% |
جي بي تي-3 2.7 ب | ----- | ----- | ----- | 4.60 | 67.1% | 62.3% | 62.8% |
النموذج والحجم | MathQA | PubMedQA | بيكا |
---|---|---|---|
جي بي تي-نيو 125م | 22.78% | 55.10% | 63.06% |
جي بي تي-3 125 م | ----- | ----- | 64.6% |
جي بي تي-نيو 350 م | 23.45% | 53.80% | 65.07% |
جي بي تي-3 350 م | ----- | ----- | 70.2% |
جي بي تي-3 آدا | 24.29% | 52.80% | 68.88% |
جي بي تي-نيو 1.3ب | 24.05% | 54.40% | 71.11% |
جي بي تي-3 1.3ب | ----- | ----- | 75.1% |
جي بي تي-2 1.5 ب | 23.64% | 58.33% | 70.78% |
جي بي تي-نيو 2.7 بي | 24.72% | 57.54% | 72.14% |
جي بي تي-3 2.7 ب | ----- | ----- | 75.6% |
ملحوظة: تم إجراء جميع التقييمات باستخدام أداة التقييم الخاصة بنا. بعض نتائج GPT-2 وGPT-3 غير متوافقة مع القيم الواردة في الأوراق المعنية. نحن نبحث حاليًا عن السبب، ونقدر بشدة التعليقات والاختبارات الإضافية لأداة التقييم الخاصة بنا.
git clone https://github.com/EleutherAI/GPTNeo
cd GPTNeo
pip3 install -r requirements.txt
قم بالتسجيل في Google Cloud Platform، وقم بإنشاء مجموعة تخزين.
قم بإنشاء VM الخاص بك من خلال google shell ( https://ssh.cloud.google.com/
) مع ctpu up --vm-only
حتى يتمكن من الاتصال بحاوية Google ووحدات TPU الخاصة بك وتثبيت المتطلبات باستخدام النقطة (انظر أعلاه) .
يوفر Google colab وحدات tpu-v8s مجانًا، والتي يجب أن تكون كافية لضبط نماذجنا حتى أحجام GPT3XL (معلمة 1.5B). انقر للتصفح من خلال مثال دفتر ملاحظات colab الخاص بنا.
للحصول على تعليمات أكثر تفصيلاً، قم بتشغيل دليل التدريب أدناه.
يمكنك أيضًا اختيار تدريب GTTNeo محليًا على وحدات معالجة الرسومات الخاصة بك. للقيام بذلك، يمكنك حذف خطوات إعداد Google Cloud أعلاه، واستنساخ git للمستودع محليًا. قم بتشغيل دليل التدريب أدناه، ثم عند تشغيل main.py، عليك ببساطة حذف علامة tpu
وتمرير معرفات GPU بدلاً من ذلك.
ملاحظة: أبلغ بعض المستخدمين عن وجود صعوبة في جعل MTF يتعرف على وحدات معالجة الرسومات الخاصة بهم. انظر هنا للحصول على التفاصيل والتعليمات حول كيفية إصلاحها.
بمجرد حصولك على نموذج مدرب، أو تنزيل أحد نماذجنا المدربة مسبقًا، يكون إنشاء النص أمرًا بسيطًا مثل تشغيل البرنامج النصي main.py مع تشغيل علامة --predict
. يمكنك تمرير مسار إلى ملف txt الخاص بك باستخدام علامة --prompt
، كما يلي:
python3 main.py --predict --prompt < example_prompt.txt > --tpu < tpu_name > --model < config_name >
أو، في حالة استخدام وحدات معالجة الرسومات:
python3 main.py --predict --prompt < example_prompt.txt > --gpu_ids < device:GPU:0 device:GPU: 1> --model < config_name >
نوصيك باستخدام رمز GPT2 المُدرب مسبقًا من Huggingface مع الريبو الخاص بنا (الإرشادات المتوفرة أدناه)، ولكن إذا كنت ترغب في تدريب نموذج بحجم مفردات مختلف، فإننا نقدم تسهيلات لتدريب رمز مميز خاص بك كما يلي:
python data/train_tokenizer.py
--base_dir ./path/to/your/txt/files
--output_dir ./output/path
--file_type txt
--vocab_size 50257
# if it succeeded, you should see the message
# 'tokenizer saved at ./output/path/byte-level-bpe.tokenizer.json'
إذا كنت تريد فقط اختبار التدريب، فيمكنك تخطي هذه الخطوة وتنزيل بعض البيانات الوهمية كما يلي:
wget https://storage.googleapis.com/connors-datasets/bundestag/bundestag_0.tfrecords
ثم انسخ البيانات إلى مجموعتك، أو إلى دليل محلي إذا كنت تستخدم وحدات معالجة الرسومات:
gsutil cp bundestag_0.tfrecords gs://<your bucket>/
إذا كنت تستخدم بياناتك الخاصة للتدريب، فيمكنك استخدام البرنامج النصي data/create_tfrecords.py
لترميز بياناتك النصية في tfrecords.
يجب أن تكون بياناتك إما على شكل عدد كبير من ملفات .txt العادية (مستند واحد لكل ملف)، أو بأي تنسيق يدعمه lm_dataformat.
يمكنك تشغيل البرنامج النصي بدون معلمات لرؤية المساعدة لجميع الخيارات.
في وضع المستند، كل مثال في tfrecords هو مستند واحد (متنوع الحجم). يتم استخدام هذا مع وضعي أخذ العينات documents_fixed
و documents_random
(لمزيد من التفاصيل، راجع القسم المرجعي للمعلمات). وضع المستند هو الوضع الافتراضي.
سيقوم الأمر أدناه بترميز كافة الملفات بالتنسيقات المقبولة في base_dir باستخدام gpt2 tokenizer وحفظها في Output_dir
python3 create_tfrecords.py --mode documents --input_dir <base> --name <name> --output_dir <output> --use_gpt2_tokenizer --minimum_size <min>
input_dir
: يحدد المجلد الذي توجد به بياناتك. سيقوم البرنامج النصي بتشفير كافة الملفات الموجودة في هذا المجلد.name
: اسم ملفات الإخراج سيكون name_i.tfrecords
حيث i هو رقم الملف.output_dir
: مكان حفظ تسجيلات tfrecordsuse_gpt2_tokenizer
: ما إذا كان سيتم استخدام رمز HuggingFace GPT2 المُدرب مسبقًا، وفي هذه الحالة سيتم تعيين الفاصل على [50256].encoder_path
: إذا لم تكن تستخدم رمز gpt2 المُدرب مسبقًا، فاستخدم هذه العلامة لتوفير مسار إلى رمز json الذي تم إنشاؤه.separator
: مكتوب بتنسيق القائمة، رمز (رموز) الفاصل المراد إدراجه بين المستندات (على سبيل المثال "[0]"). سوف يعتمد على التشفير الخاص بك.minimum_size
: الحد الأدنى للحجم (بالرموز) الذي يجب أن يحتوي عليه المستند، وإلا فسيتم تجاهله. هذا هو ما سيحدد معلمة stitch
الخاصة بك لاحقًا: stitch * minimum_size
يجب أن يكون دائمًا أكبر أو يساوي n_ctx
(لمزيد من التفاصيل، راجع القسم المرجعي للمعلمات). لاستخدام مجموعة بيانات في نموذج، يجب عليك أولاً تسجيل مجموعة البيانات هذه ضمن المجلد ./configs/dataset_configs
. اختر أولاً اسم ملف بامتداد .json
. سيكون اسم الملف هذا بمثابة تعريف لمجموعة البيانات. ينبغي ملء التكوين بالطريقة التالية.
إذا كانت لديك مجموعة بيانات مشفرة باستخدام رمز gpt2 المُدرب مسبقًا، فيمكنك تحديد ذلك على النحو التالي:
{
"n_vocab" : 50257 ,
"path" : " gs://neo-datasets/openwebtext-documents/openwebtext_*.tfrecords " ,
"eval_path" : " gs://neo-datasets/openwebtext-documents/openwebtext_*.tfrecords " ,
"tokenizer_is_pretrained" : true ,
"tokenizer_path" : " gpt2 "
}
أو إذا قمت بتدريب أداة رمزية مخصصة، كما يلي:
{
"n_vocab" : 32768 ,
"path" : " ./path/to/your/*.tfrecords " ,
"eval_path" : " ./path/to/your/eval/*.tfrecords " ,
"tokenizer_path" : " ./path/to/your/byte-level-bpe.tokenizer.json "
}
أخيرًا، في تكوين النموذج الخاص بك، أضف اسم الملف الذي قمت بإنشائه أعلاه إلى مصفوفة datasets
.
سيكون <dataset id>
هو اسم الملف، باستثناء .json
الذي قمت بإنشائه أعلاه
"datasets": [[<dataset id>, <stitch>, <datatype>, <weight>]] # datasets key defines at run time how each dataset is processed for training
بمجرد الانتهاء من إعداد مجموعات البيانات الخاصة بك، ابحث عن التكوين المناسب في /configs
.
نستخدم هنا نموذجًا بحجم GPT3-XL كمثال، ولكن هناك المزيد في ./configs
، وكلها تحتوي على ملخصات قصيرة في قسم التكوينات المتاحة.
كل ما عليك فعله هو تحرير معرف مجموعة البيانات كما هو موضح أعلاه، وتحرير model_path
(حيث سيتم حفظ السجلات ونقاط التفتيش) للإشارة إلى مجموعة السحابة التي لديك حق الوصول للكتابة إليها (أو المسار المحلي، في حالة استخدام وحدات معالجة الرسومات).
{
"n_head" : 32 ,
"n_vocab" : 50257 ,
"embed_dropout" : 0.1 ,
"lr" : 0.0002 ,
"lr_decay" : " cosine " ,
"warmup_steps" : 3000 ,
"beta1" : 0.9 ,
"beta2" : 0.95 ,
"epsilon" : 1e-8 ,
"opt_name" : " adam " ,
"weight_decay" : 0.1 ,
"train_batch_size" : 512 ,
"attn_dropout" : 0.1 ,
"train_steps" : 286150 ,
"eval_steps" : 0 ,
"predict_steps" : 1 ,
"res_dropout" : 0.1 ,
"eval_batch_size" : 128 ,
"predict_batch_size" : 1 ,
"iterations" : 2500 ,
"n_embd" : 2048 ,
"datasets" : [[ " your_dataset_name " , 25 , " documents_random " , 1.0 ]],
"model_path" : " gs://neo-models/GPT3_XL " ,
"n_ctx" : 2048 ,
"n_layer" : 24 ,
"scale_by_depth" : true ,
"scale_by_in" : false ,
"attention_types" : [[[ " global " ], 24 ]],
"mesh_shape" : " x:128,y:2 " ,
"layout" : " batch:x,memory_length:y,embd:y " ,
"activation_function" : " gelu " ,
"recompute_grad" : true ,
"gradient_clipping" : 1.0 ,
"tokens_per_mb_per_replica" : 2048
}
python3 main.py --model <your_config_name> --steps_per_checkpoint <n> --tpu <tpu-name>
tpu
: اسم مادة TPU المستخدمة.steps_per_checkpoint
: تكرار الخطوات التي يتم بها حفظ نقاط التفتيش.--auto_layout
و --auto_layout_and_mesh_shape
(اختياري): قم بتعطيل التدريب وبدلاً من ذلك قم بإنشاء layout
فعال للذاكرة (و mesh_shape
) تلقائيًاgpu_ids
: إذا كنت تتدرب باستخدام وحدات معالجة الرسومات، فاحذف علامة tpu
وقم بإدخال معرفات وحدة معالجة الرسومات الخاصة بك. في المثال أدناه، نتدرب على 3 وحدات معالجة رسوميات، مع تحديد معرفات أجهزتهم المحددة بمسافات: python3 main.py --model <your_config_name> --steps_per_checkpoint <n> --gpu_ids <device:GPU:0 device:GPU:1>
لدينا العديد من أحجام النماذج المتاحة، ولكن بعض تكويناتنا تتطلب وحدات معالجة حرارية كبيرة وستحتاج إلى التغيير والتبديل لتعمل على الأجهزة الأصغر حجمًا، أو وحدات معالجة الرسومات. فيما يلي دليل قصير لكل نموذج في دليل التكوينات:
المهام
يساعد Sacred في تتبع التجارب ويعتبر العمل به أفضل بكثير من Tensorboard.
للإعداد:
قم بتثبيت Docker وDocker-compose
قم بتشغيل docker-compose up
للاستخدام:
تأكد من أن model_dir لا يحتوي على أي سجلات قياس (فإنه يقوم برحلة إلى العناصر المترية للوحة الشد، والتي تفترض أنها استمرار للتشغيل الحالي). يمكنك استخدام gsutil rm -r ...
لحذف النموذج dir
قم بتشغيل python3 run_experiment.py --tpu sometpuhere --model someconfig.json
الخيارات هي نفس خيارات main.py
.
يمكنك الانتقال إلى http://server_ip_goes_here:8081/ للاطلاع على نظرة عامة على Omniboard. إذا كنت تفضل رؤية لوحة الشد، فسيقوم البرنامج النصي أيضًا بتدويرها للأعلى وتعيين منفذ لها تلقائيًا. يجب أن يقوم البرنامج النصي بطباعة منفذ لوحة الشد بالقرب من أعلى السجل.
إذا كنت في حيرة من أمرك بشأن مجموعة البيانات الخاصة بملف تكوين معين، فيمكنك بسهولة التحقق من الحد الأدنى والحد الأقصى لمعرفات الرموز المميزة باستخدام أمر واحد. يعد هذا مفيدًا للتأكد من أن حجم مفردات النموذج كبير على الأقل مثل الحد الأقصى لمعرف الرمز المميز. لن يخطئ Tensorflow إذا حاولت التجميع في مصفوفة بها مؤشرات خارج الحدود، لذلك تحتاج إلى التأكد من أن حجم مفرداتك كبير بما يكفي.
python main --model {config_name} --check_dataset
بالإضافة إلى القدرة على تدريب GPT الكبيرة، يتيح لك هذا المستودع أيضًا القيام بسهولة بنمذجة اللغة المقنعة (BERT، RoBERTa). للقيام بذلك، يجب عليك اتباع خطوتين إضافيتين.
عند ترميز مجموعة البيانات الخاصة بك، يجب عليك حجز معرف خاص للرمز [mask]
.
في التكوينات، سيتعين عليك تحديد حقلين إضافيين
"mlm_training" : true , # must be set to true
"mlm_mask_id" : < mask id > # the mask id that you reserved from above
هذا هو كل ما تحتاجه لتدريب نموذج بهدف الامتيازات والرهون البحرية، وهو جيد لأي نوع من البيانات التي قمت بتشفيرها بشكل صحيح. إذا كنت ترغب في تعديل المعلمات الفائقة الأخرى ذات الصلة، فيرجى مواصلة القراءة.
"mlm_cls_token_id" : < cls token id > , # auto append specified CLS token id on the left
"mlm_mask_prob" : 0.15 , # the probability of masking a token, defaults to 15%
"mlm_same_token_prob" : 0.10 , # probability of keeping the token the same, defaults to 10%
"mlm_random_token_prob" : 0.10 , # probability of tokens that are replaced with random tokens, 10% was recommended by the BERT paper
"mlm_mask_ignore_ids" : [ < cls token > , < sep token > ] # ignore masking other special tokens, if any
اختر تكوينًا صالحًا من /configs
وقم بتعديل المعلمات حسب الحاجة:
n_heads
: عدد رؤوس الانتباه.n_embd
: يجب أن يكون حجم الطبقات المخفية قابلاً للقسمة على n_heads
.n_vocab
: حجم المفردات.embed_dropout
، res_dropout
، attn_dropout
: احتمالية التسرب لتضمين الكلمات/البقايا/الانتباهlr
: معدل التعلمwarmup_steps
: عدد الخطوات قبل الوصول إلى معدل التعلم الكامل (المنحدر الخطي من 0
إلى lr
).lr_decay
: cosine
أو linear
.opt_name
: adam
أو adafactor
.beta1
و beta2
و epsilon
: adam
محسن المعلمات.beta1
و ada_epsilon1
و ada_epsilon2
: معلمات مُحسِّن adafactor
.weight_decay
: معلمة تناقص الوزن، في حالة عدم وجودها، لا يتم استخدام تناقص الوزن (يتم استخدام إصلاح تناقص الوزن لآدم) (الافتراضي: 0.01) (اختياري).train_batch_size
: حجم الدفعة أثناء التدريب.train_steps
: عدد خطوات التدريب (الدفعات)، تم ضبطها على فترة واحدة تقريبًا في الوقت الحالي (إجمالي عدد الرموز المميزة في مجموعة البيانات الخاصة بك / عدد الرموز المميزة لكل دفعة (= train_batch_size
/ n_ctx
)).eval_steps
: عدد الخطوات التي سيتم تنفيذها لكل تقييم. اضبط على 0
لعدم وجود تقييم. أي بعد كل نقطة تفتيش، يتم اختبار النموذج لـ eval_steps
iterations
: يجب أن يكون عدد الخطوات الموضوعة في قائمة الانتظار لـ TPU أصغر من steps_per_checkpoint
. (الافتراضي: 500)datasets
: قائمة مجموعات بيانات tfrecords المراد استخدامها. كل مجموعة بيانات عبارة عن قائمة تحتوي على المعلمات التالية: [train glob , eval glob, stitch, sampling_mode, weight]
. على سبيل المثال، بالنسبة لمجموعة بيانات واحدة (لاحظ القائمة المزدوجة): [["bundestag_*.tfrecords", "", 10, "random_sample", 1.0]]
dataset_id
: اسم ملف تكوين مجموعة البيانات في ./configs/dataset_configs
stitch
: إذا تم استخدام sampling_mode
random_sample
، فسيقوم خط أنابيب الإدخال باختبار هذا المقدار من النصوص في نص واحد لأخذ عينة منه. يجب عليك تحديد الغرزة بحيث تكون stitch * minimum_document_length >= n_ctx
sampling_mode
: chunks
(تتم معالجة tfrecords مسبقًا بالطول الصحيح وتتم قراءتها بالتسلسل) أو documents_random
(يتم stitch
كمية المستندات متسلسلة ثم يتم أخذ عينات فرعية من قطعة n_ctx
بشكل عشوائي)weights
: مقدار الوزن النسبي لمجموعة البيانات هذه مقارنةً بالمجموعات الأخرىmodel
: أي نموذج للتدريب. حاليًا يتم دعم GPT
فقط، ويتم تعيينه افتراضيًا على هذا إذا لم يكن موجودًا.model_path
: موقع حاوية تخزين Google (أو المسار المحلي، في حالة استخدام وحدات معالجة الرسومات) لحفظ نقاط التحقق والسجلات النموذجية.n_ctx
: حجم نافذة السياق. الافتراضي هو 2048n_layer
: عدد الطبقات (الكتل) في النموذج.scale_by_depth
: إذا كان هذا صحيحًا، فسيتم قياس تهيئة وزن الطبقات حسب عمقها كما هو الحال في ورقة GPT2.scale_by_in
: إذا كان صحيحًا، فسيتم قياس تهيئة وزن الطبقات حسب عدد مدخلاتها كما في ورقة GPT2.mesh_shape
: الشبكة عبارة عن مجموعة من المعالجات ذات أبعاد n ذات أبعاد مسماة تستخدم للتوازي في مكتبة Mesh-tensorflow. يتم تقسيم كل Tensor بالتساوي عبر أبعاد الشبكة وفقًا للتخطيط (انظر أدناه). "mesh_shape" هو شكل هذه المصفوفة، ويجب أن يكون مساويا لعدد المعالجات. على سبيل المثال، بالنسبة لـ v3-128 TPU "mesh_shape": "x:16,y:8".layout
: يتم وضع Tensor على شبكته بشريحة واحدة على كل معالج. "تخطيط" الموتر عبارة عن خريطة جزئية حقنية تحدد أبعاد الموتر التي يتم تقسيمها (بالتساوي) عبر أبعاد الشبكة. لا يجوز تقسيم أي بعد للموتر عبر بعدين من شبكته ولا يجوز تقسيم بعدين للموتر عبر نفس البعد لشبكته. يحدد المستخدم مجموعة عامة من قواعد التخطيط في شكل أزواج (اسم البعد الموتر، اسم البعد الشبكي). يتم تقسيم بُعد الموتر عبر بُعد شبكته إذا كانت هناك قاعدة مطابقة، على سبيل المثال (في المثال أعلاه، Mesh_shape: "layout":batch:x,heads:y"activation_function
: selu
(التطبيع الذاتي) أو gelu
(المستخدم بواسطة الزراعة العضوية)، وظيفة التنشيط المستخدمة في تمريرات التغذية الأمامية. (الافتراضي: جيلو)attention_types
: نوع الانتباه لكل طبقة في القائمة بالتنسيق التالي [[["attention_type"], n_layers]]. على سبيل المثال، لشبكة مكونة من 12 طبقة [[["عالمية"]، 12]] أو [[["محلية"]، 10]، [["عالمية"]، 2]].linear
أو global
أو local
أو none
. لقد وجدنا مزيجًا بنسبة 50/50 من global
linear
للعمل بشكل جيد. none
يسمح لك بإنشاء طبقات تغذية للأمام فقط لنماذج محولات PAR الأكثر كفاءة.precision
: float32
أو bfloat16
.tokens_per_mb_per_replica
: إذا لم يكن هناك شيء، فسيتم تقسيم الدفعة إلى دفعات صغيرة أصغر تحتوي على الرموز tokens_per_mb_per_replica
لتجنب OOMs. يتم تجميع التدرجات محليًا ويتم تقليلها مرة واحدة. هام: تشير ميغابايت إلى دفعة صغيرة وليس ميغابايت هنا.مزيج من الخبراء
moe_layers
: قائمة بأرقام الطبقات لإلحاق خليط من طبقة الخبراء بها. على سبيل المثال: [2,4,6,8,10,12]
. لقد وجدنا بشكل تجريبي طبقة مو لكل طبقتين من طبقات الاهتمام الذاتي تعمل بشكل جيد.moe_params
: قاموس kwargs الإضافي لتمريره إلى طبقة moe. على سبيل المثال {"moe_dropout_rate": 0.0 }
الميزات التجريبية
axial_pos_emb_
: إذا كان صحيحًا، فسيتم استخدام [التضمين الموضعي المحوري](https://arxiv.org/abs/1912.12180.mlp_glu
: إذا كان صحيحًا، فإنه يستخدم متغير وحدة خطية مسورة لطبقات التغذية الأمامية.scalenorm
: إذا كان صحيحًا، يستخدم Scalenorm بدلاً من Layernorm.rezero
: إذا كان صحيحًا، يستخدم rezero بدلاً من Layernorm.num_mem_kv
: يضيف قيم الذاكرة/المفتاح من ورقة كل الاهتمام. Param هو int مع عدد قيم الذاكرة/المفتاح المطلوبة.macaron
: إذا كان صحيحًا - يستخدم محول معكرون لكل كتلة طبقة. إذا وجدت أن GPT-Neo مفيد في عملك، فيمكنك الاستشهاد بهذا المستودع باسم
@software{gpt-neo,
author = {Black, Sid and
Gao, Leo and
Wang, Phil and
Leahy, Connor and
Biderman, Stella},
title = {{GPT-Neo: Large Scale Autoregressive Language
Modeling with Mesh-Tensorflow}},
month = mar,
year = 2021,
note = {{If you use this software, please cite it using
these metadata.}},
publisher = {Zenodo},
version = {1.0},
doi = {10.5281/zenodo.5297715},
url = {https://doi.org/10.5281/zenodo.5297715}
}
يجب استبدال رقم الإصدار برقم الإصدار الذي تستخدمه، والسنة تتوافق مع إصدار المشروع مفتوح المصدر.
إذا كنت مهتمًا على وجه التحديد بالاستشهاد بنماذج GPT-Neo التي تم تدريبها على Pile، فنحن نقدر أيضًا الاستشهاد بها
@article{gao2020pile,
title={The Pile: An 800GB Dataset of Diverse Text for Language Modeling},
author={Gao, Leo and Biderman, Stella and Black, Sid and Golding, Laurence and Hoppe, Travis and Foster, Charles and Phang, Jason and He, Horace and Thite, Anish and Nabeshima, Noa and others},
journal={arXiv preprint arXiv:2101.00027},
year={2020}
}