TRLX ist ein verteiltes Trainingsrahmen, das von Grund auf entworfen wurde, um sich auf die Feinabstimmung von großsprachigen Modellen mit Verstärkungslernen zu konzentrieren, indem sie entweder eine bereitgestellte Belohnungsfunktion oder einen Belohnungsdatensatz unter Verwendung einer gelieferten Belohnungsfunktion verwenden.
Trainingsunterstützung für? Umarmende Gesichtsmodelle werden von Accelerate-Backed-Trainern bereitgestellt, mit denen Benutzer kausale und T5-basierte Sprachmodelle von bis zu 20B-Parametern wie facebook/opt-6.7b , EleutherAI/gpt-neox-20b und google/flan-t5-xxl . Für Modelle, die über 20B-Parameter hinausgehen, bietet TRLX NVIDIA NEMO-unterstützte Trainer, die effiziente Parallelitätstechniken nutzen, um effektiv zu skalieren.
Die folgenden RL -Algorithmen werden derzeit implementiert:
| Algorithmus | Trainer beschleunigen | Nemo Trainer |
|---|---|---|
| Proximale Politikoptimierung (PPO) | ✅ | ✅ |
| Implizite Sprache Q-Learning (ILQL) | ✅ | ✅ |
Dokumentation
? Käse sammeln menschliche Annotationen für Ihre RL-Anwendung mit unserer Datenerfassungsbibliothek für Mensch.
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 . Weitere Verwendung finden Sie unter Beispiele. Sie können auch die folgenden Colab -Notizbücher ausprobieren:
| Beschreibung | Link |
|---|---|
| Simulacra (GPT2, ILQL) | |
| Gefühl (GPT2, ILQL) |
Die neuesten Läufe der Beispiele sind auf unseren Gewichten und Vorurteilen
Sie können ein Modell mithilfe einer Belohnungsfunktion oder einem Belohnungsdatensatz trainieren.
trainer = trlx . train ( 'gpt2' , reward_fn = lambda samples , ** kwargs : [ sample . count ( 'cats' ) for sample in samples ])Für das Belohnungsmodell Training finden Sie in unserer Autokrit -Bibliothek.
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 ])Um die Speicherverwendung zu verringern (wenn Sie CUDA aus Speicherfehlern erleben), versuchen Sie zunächst die niedrigste Einstellung für die folgenden Hyperparameter und erhöhen Sie sie schließlich:
# 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.pyBefolgen Sie die Setup -Anweisungen im Nemo Readme.
python examples/nemo_ilql_sentiments.pyWeitere Verwendung finden Sie im 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 python -m trlx.reference octocat/trlx-fork:fix-branch TRLX verwendet die Standard -Python logging , um Trainingsinformationen in der Konsole zu protokollieren. Der Standardprotokoll ist auf die INFO -Ebene eingestellt, was bedeutet, dass INFO , WARNING , ERROR und CRITICAL Level -Nachrichten auf die Standardausgabe gedruckt werden.
Um die Protokollebene direkt zu ändern, können Sie den ausführlichen Setter verwenden. Zum Beispiel, um die Protokollebene auf WARNING festzulegen:
import trlx
trlx . logging . set_verbosity ( trlx . logging . WARNING ) Dadurch werden Nachrichten auf INFO -Level unterdrückt, aber dennoch WARNING , ERROR und CRITICAL Level -Nachrichten drucken.
Sie können auch die Ausführlichkeit der Protokollierung steuern, indem Sie die Variable der TRLX_VERBOSITY -Umgebung auf einen der Namensnamen der Protokollierungsebene einstellen:
CRITICAL ( trlx.logging.CRITICAL )ERROR ( trlx.logging.ERROR )WARNING ( trlx.logging.WARNING )INFO ( trlx.logging.INFO )DEBUG ( trlx.logging.DEBUG ) export TRLX_VERBOSITY=WARNING Standardmäßig werden tqdm -Fortschrittsbalken verwendet, um den Trainingsfortschritt anzuzeigen. Sie können sie deaktivieren, indem Sie trlx.logging.disable_progress_bar() , ansonsten trlx.logging.enable_progress_bar() aufrufen, um zu aktivieren.
Nachrichten können durch Einstellen trlx.logging.enable_explicit_format() mit größerem Detail formatiert werden. Dadurch wird jedes Protokollinformationen in die Eingabe von Anruf-Site-Informationen eingerichtet, die beim Debuggen hilfreich sein können.
[2023-01-01 05:00:00,000] [INFO] [ppo_orchestrator.py:63:make_experience] [RANK 0] Message...Tipp: Um die Menge an Protokollierungsausgabe zu reduzieren, ist es möglicherweise hilfreich, die Protokollpegel von von TRLX verwendeten Bibliotheken von Drittanbietern zu ändern. Versuchen Sie beispielsweise,
transformers.logging.set_verbosity_error()zu Ihren TRLX -Skripten hinzuzufügen, um aus dertransformers-Bibliothek ausführliche Nachrichten zum Schweigen zu bringen (weitere Details finden Sie in ihren Protokollierungsdokumenten).
Für die Entwicklung finden Sie diese Richtlinien und lesen Sie auch unsere Dokumente
@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",
}
Vielen Dank an Leandro von Werra für den Beitrag zu TRL, einer Bibliothek, die dieses Repo ursprünglich inspirierte.