TRLX هو إطار تدريب موزع مصمم من الألف إلى الياء للتركيز على صياغة نماذج اللغة الكبيرة مع التعلم التعزيز باستخدام وظيفة المكافأة المقدمة أو مجموعة بيانات ذات علامات مكافأة.
دعم التدريب؟ يتم توفير نماذج الوجه المعانقة من خلال المدربين المدعومين من تسريع ، مما يسمح للمستخدمين بضبط نماذج اللغة السببية والمعلمة التي تصل إلى 20B ، مثل facebook/opt-6.7b و EleutherAI/gpt-neox-20b و google/flan-t5-xxl . بالنسبة للنماذج التي تتجاوز معلمات 20B ، يوفر TRLX مدربين مدعومون من NVIDIA والذين يستفيدون من تقنيات التوازي الفعالة لتوسيع نطاقها بشكل فعال.
يتم تطبيق خوارزميات RL التالية حاليًا:
| خوارزمية | مدرب تسريع | مدرب نيمو |
|---|---|---|
| تحسين السياسة القريبة (PPO) | ✅ | ✅ |
| اللغة الضمنية Q-Learning (ILQL) | ✅ | ✅ |
الوثائق
؟ جمع الجبن التعليقات التوضيحية البشرية لتطبيق RL الخاص بك من خلال مكتبة جمع البيانات البشرية الخاصة بنا.
git clone https://github.com/CarperAI/trlx.git
cd trlx
pip install torch --extra-index-url https://download.pytorch.org/whl/cu118
pip install -e . لمزيد من الاستخدام ، انظر الأمثلة. يمكنك أيضًا تجربة دفاتر كولاب أدناه:
| وصف | وصلة |
|---|---|
| Simulacra (GPT2 ، ILQL) | |
| المشاعر (GPT2 ، ILQL) |
أحدث أشكال الأمثلة على أوزاننا وتحيزاتنا
يمكنك تدريب نموذج باستخدام وظيفة المكافأة أو مجموعة بيانات ذات علامات مكافأة.
trainer = trlx . train ( 'gpt2' , reward_fn = lambda samples , ** kwargs : [ sample . count ( 'cats' ) for sample in samples ])لتدريب نموذج المكافأة ، راجع مكتبة Autocrit.
trainer = trlx . train ( 'EleutherAI/gpt-j-6B' , samples = [ 'dolphins' , 'geese' ], rewards = [ 1.0 , 100.0 ]) trainer = trlx . train ( 'gpt2' , samples = [[ 'Question: 1 + 2 Answer:' , '3' ], [ 'Question: Solve this equation: ∀n>0, s=2, sum(n ** -s). Answer:' , '(pi ** 2)/ 6' ]]) trainer . generate ( ** tokenizer ( 'Q: Who rules the world? A:' , return_tensors = 'pt' ), do_sample = True ) from trlx . data . default_configs import default_ppo_config
config = default_ppo_config ()
config . model . model_path = 'EleutherAI/gpt-neox-20b'
config . tokenizer . tokenizer_path = 'EleutherAI/gpt-neox-20b'
config . train . seq_length = 2048
trainer = trlx . train ( config = config , reward_fn = lambda samples , ** kwargs : [ len ( sample ) for sample in samples ])لتقليل استخدام الذاكرة (إذا كنت تواجه CUDA من أخطاء الذاكرة) ، جرب أولاً أدنى إعداد لمقاييس البارامات التالية وزيادةها في النهاية:
# micro batch size per gpu
config . train . batch_size = 1
# freeze all transformer layers
config . model . num_layers_unfrozen = 0
# maximum sample length, prompts or samples longer than that will be truncated
config . train . seq_length = 128
# micro batch size for sampling (specific for PPO)
config . method . chunk_size = 1
# use an additional Q-head (specific for ILQL)
config . method . two_qs = False trainer . save_pretrained ( '/path/to/output/folder/' )accelerate config # choose DeepSpeed option
accelerate launch examples/simulacra.pyاتبع تعليمات الإعداد في Nemo ReadMe.
python examples/nemo_ilql_sentiments.pyلمزيد من الاستخدام ، انظر Nemo ReadMe
ray start --head --port=6379
python -m trlx.sweep --config configs/sweeps/ppo_sweep.yml --accelerate_config configs/accelerate/ddp.yaml --num_gpus 4 examples/ppo_sentiments.pymain لـ Trlx python -m trlx.reference octocat/trlx-fork:fix-branch يستخدم TRLX مكتبة logging Python القياسية لتسجيل المعلومات التدريبية إلى وحدة التحكم. يتم تعيين المسجل الافتراضي على مستوى INFO ، مما يعني أنه سيتم طباعة INFO WARNING ERROR والرسائل المستوية CRITICAL إلى الإخراج القياسي.
لتغيير مستوى السجل مباشرة ، يمكنك استخدام Setter Verbosity. على سبيل المثال ، لتعيين مستوى السجل لاستخدام WARNING :
import trlx
trlx . logging . set_verbosity ( trlx . logging . WARNING ) سيؤدي ذلك إلى قمع رسائل مستوى INFO ، ولكن لا يزال يطبع WARNING ERROR والرسائل المستوية CRITICAL .
يمكنك أيضًا التحكم في الفعل في التسجيل عن طريق ضبط متغير بيئة TRLX_VERBOSITY إلى أحد أسماء مستوى التسجيل القياسية:
CRITICAL ( trlx.logging.CRITICAL )ERROR ( trlx.logging.ERROR )WARNING ( trlx.logging.WARNING )INFO ( trlx.logging.INFO )DEBUG ( trlx.logging.DEBUG ) export TRLX_VERBOSITY=WARNING بشكل افتراضي ، يتم استخدام أشرطة التقدم tqdm لعرض تقدم التدريب. يمكنك تعطيلها عن طريق استدعاء trlx.logging.disable_progress_bar() ، وإلا trlx.logging.enable_progress_bar() لتمكين.
يمكن تنسيق الرسائل بمزيد من التفاصيل عن طريق ضبط trlx.logging.enable_explicit_format() . سيؤدي ذلك إلى حقن معلومات موقع المكالمة في كل سجل قد يكون مفيدًا لتصحيح الأخطاء.
[2023-01-01 05:00:00,000] [INFO] [ppo_orchestrator.py:63:make_experience] [RANK 0] Message...نصيحة: لتقليل كمية إخراج التسجيل ، قد تجد أنه من المفيد تغيير مستويات السجل من مكتبات الطرف الثالث المستخدمة من قبل TRLX. على سبيل المثال ، حاول إضافة
transformers.logging.set_verbosity_error()إلى أعلى البرامج النصية TRLX لإسكات رسائل مطوّلة من مكتبةtransformers(انظر مستندات التسجيل لمزيد من التفاصيل).
للتنمية ، تحقق من هذه الإرشادات وقراءة مستنداتنا أيضًا
@inproceedings{havrilla-etal-2023-trlx,
title = "trl{X}: A Framework for Large Scale Reinforcement Learning from Human Feedback",
author = "Havrilla, Alexander and
Zhuravinskyi, Maksym and
Phung, Duy and
Tiwari, Aman and
Tow, Jonathan and
Biderman, Stella and
Anthony, Quentin and
Castricato, Louis",
booktitle = "Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing",
month = dec,
year = "2023",
address = "Singapore",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.emnlp-main.530",
doi = "10.18653/v1/2023.emnlp-main.530",
pages = "8578--8595",
}
شكرًا جزيلاً لـ Leandro von Werra للمساهمة مع TRL ، وهي مكتبة ألهمت في البداية هذا الريبو.