TRLX est un cadre de formation distribué conçu à partir de zéro pour se concentrer sur des modèles de langage de grande envergure avec un apprentissage de renforcement en utilisant une fonction de récompense fournie ou un ensemble de données marqué par récompense.
Soutien de la formation pour? Hugging Face Models est fourni par des formateurs à soutenir d'accélération, permettant aux utilisateurs de régler des modèles de langue causale et basés sur T5 de paramètres allant jusqu'à 20B, tels que facebook/opt-6.7b , EleutherAI/gpt-neox-20b et google/flan-t5-xxl . Pour les modèles au-delà des paramètres 20B, TRLX fournit des formateurs soutenus par NVIDIA NEMO qui exploitent efficacement les techniques de parallélisme efficaces.
Les algorithmes RL suivants sont actuellement implémentés:
| Algorithme | Accélérer l'entraîneur | Nemo Trainer |
|---|---|---|
| Optimisation de la politique proximale (PPO) | ✅ | ✅ |
| Langue implicite Q-Learning (ILQL) | ✅ | ✅ |
Documentation
? Le fromage recueille des annotations humaines pour votre application RL avec notre bibliothèque de collecte de données humaine en boucle.
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 . Pour plus d'utilisation, voir des exemples. Vous pouvez également essayer les cahiers Colab ci-dessous:
| Description | Lien |
|---|---|
| Simulacra (gpt2, ilql) | |
| Sentiment (GPT2, ILQL) |
Les dernières courses des exemples sont sur nos poids et biais
Vous pouvez former un modèle à l'aide d'une fonction de récompense ou d'un ensemble de données marqué par récompense.
trainer = trlx . train ( 'gpt2' , reward_fn = lambda samples , ** kwargs : [ sample . count ( 'cats' ) for sample in samples ])Pour la formation du modèle de récompense , reportez-vous à notre bibliothèque 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 ])Pour réduire l'utilisation de la mémoire (si vous vivez CUDA hors des erreurs de mémoire), essayez d'abord le réglage le plus bas pour les hyperparamètres suivants et éventez-vous finalement augmenter:
# 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.pySuivez les instructions de configuration dans le Nemo Readme.
python examples/nemo_ilql_sentiments.pyPour plus d'utilisation, voir le 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 de Trlx python -m trlx.reference octocat/trlx-fork:fix-branch TRLX utilise la bibliothèque logging Python standard pour enregistrer les informations de formation à la console. L'enregistreur par défaut est défini sur le niveau d' INFO , ce qui signifie que INFO , WARNING , ERROR et les messages de niveau CRITICAL seront imprimés en sortie standard.
Pour modifier directement le niveau du journal, vous pouvez utiliser le secteur de verbosité. Par exemple, pour définir le niveau du journal sur WARNING :
import trlx
trlx . logging . set_verbosity ( trlx . logging . WARNING ) Cela supprimera les messages de niveau INFO , mais toujours des messages WARNING , ERROR et de niveau CRITICAL .
Vous pouvez également contrôler la verbosité de la journalisation en définissant la variable TRLX_VERBOSITY Environment à l'un des noms de niveau de journalisation standard:
CRITICAL ( trlx.logging.CRITICAL )ERROR ( trlx.logging.ERROR )WARNING ( trlx.logging.WARNING )INFO ( trlx.logging.INFO )DEBUG ( trlx.logging.DEBUG ) export TRLX_VERBOSITY=WARNING Par défaut, les barres de progrès tqdm sont utilisées pour afficher les progrès de la formation. Vous pouvez les désactiver en appelant trlx.logging.disable_progress_bar() , sinon trlx.logging.enable_progress_bar() pour activer.
Les messages peuvent être formatés avec plus de détails en définissant trlx.logging.enable_explicit_format() . Cela injectera des informations sur le site d'appel dans chaque journal qui peut être utile pour le débogage.
[2023-01-01 05:00:00,000] [INFO] [ppo_orchestrator.py:63:make_experience] [RANK 0] Message...CONSEIL: Pour réduire la quantité de sortie de journalisation, vous pourriez trouver utile de modifier les niveaux de journal des bibliothèques tierces utilisées par TRLX. Par exemple, essayez d'ajouter
transformers.logging.set_verbosity_error()en haut de vos scripts trlx pour faire taire les messages verbeux de la bibliothèquetransformers(voir leurs documents de journalisation pour plus de détails).
Pour le développement, consultez ces directives et lisez également nos documents
@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",
}
Un grand merci à Leandro von Werra pour avoir contribué à TRL, une bibliothèque qui a initialement inspiré ce dépôt.