TRLX-это распределенная учебная структура, разработанная с нуля, чтобы сосредоточиться на тонкой настройке крупных языковых моделей с обучением подкреплением, используя либо предоставленную функцию вознаграждения, либо наборный набор данных.
Поддержка обучения? Модели обнимающего лица предоставляются тренерами, поддерживаемыми ускорением, позволяя пользователям точную настройку причинно-следственных и T5-моделей на параметрах до 20B, таких как facebook/opt-6.7b , EleutherAI/gpt-neox-20b и google/flan-t5-xxl . Для моделей, превышающих 20B, параметры TRLX предоставляет тренеров NEMO, поддерживаемые NVIDIA, которые используют эффективные методы эффективного масштабирования параллелизма для эффективного масштаба.
В настоящее время реализованы следующие алгоритмы RL:
| Алгоритм | Ускоренный тренер | Немо тренер |
|---|---|---|
| Проксимальная оптимизация политики (PPO) | ✅ | ✅ |
| Неявный язык Q-обучение (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 . Для получения дополнительной информации см. Примеры. Вы также можете попробовать ноутбуки Colab ниже:
| Описание | Связь |
|---|---|
| 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 уровне будут напечатаны на стандартный вывод.
Чтобы напрямую изменить уровень журнала, вы можете использовать установщик условности. Например, чтобы установить уровень журнала на использование 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()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, библиотеке, которая изначально вдохновила это репо.