Премиальное программное обеспечение и практические уроки
Легкая и эффективная система обучения и выравнивания LLM промышленного уровняOpenRLHF поддерживает полнопараметрическое и полнопроцессное обучение модели RLHF 70B!
OpenRLHF 是什么?自ChatGPTПосле её появления люди обратили внимание на технологию выравнивания RLHF, представленную InstructGPT, и на её основе попытались воспроизвести процесс обучения ChatGPT. Постепенно появились репрезентативные работы по воспроизведению RLHF, такие как ColossalChat и DeepSpeed-Chat. Однако в то время всеобщее понимание технологии выравнивания было в основном сосредоточено вокруг InstructGPT. Поскольку OpenAI в последнее время не был особо открытым, ему фактически не хватало сторонних верификаций. К счастью,LLaMA2Вскоре был запущен, который не только полностью подтвердил эффективность технологии RLHF, но и имел достаточно инноваций (таких как отказ от выборки и мульти-RM и т.д.), что сразу же дало старт всемумагистр праваСообщество разработчиков ПО с открытым исходным кодом.
Учитывая популярность InstructGPT и LLaMA2, мы, участники сообщества разработчиков ПО с открытым исходным кодом OpenLLMAI, изучили существующие популярные фреймворки для обучения выравниванию и обнаружили, что большинство из них не поддерживают полнопроцессное обучение LLaMA2 по всем параметрам, недостаточно масштабируемы или не обладают достаточной лёгкостью и удобством использования. Поэтому мы стремимся разработать по-настоящему промышленную фреймворк для обучения выравниванию LLM, который воспроизводит процесс обучения на больших моделях, представленный InstructGPT и LLaMA2, поддерживает популярные методы выравнивания, такие как RLHF и DPO, и помогает каждому быстро реализовать свои идеи по выравниванию.
所以,欢迎来到OpenRLHF,快速开启你的对齐工作吧!
https://github.com/OpenLLMAI/OpenRLHF
Введение в проект OpenRLHF
В настоящее время OpenLLMAI работает над двумя крупными проектами:
Остальные проекты будут зависеть от последующих трудозатрат и интересов. В ближайшем будущем мы, возможно, запустим фреймворк KD или SE. Пока что мы, возможно, не очень заинтересованы в обучении небольшой универсальной модели. Главная причина в ограниченности времени, средств и энергии. Поддерживать энтузиазм довольно сложно, поэтому мы часто рассматриваем модели, основанные на интересах. Однако интерес, в конце концов, не съедается, поэтому мы недавно потратили много сил на подготовку этого рекламного материала (одноклассник Сяньюй раньше был слишком буддистом/обсессивно-компульсивным/занятым, и у него было много проблем, ха-ха). Надо признать, что OpenLLMAI всё ещё очень невежественен.OpenRLHF пока не идеаленОднако мы приложили все усилия и надеемся получить более широкое признание и поддержку сообщества. Вместе мы можем добиться большего!
Идеи дизайна OpenRLHF
1. Цели дизайна:Легкий и эффективныйизПромышленный классСтруктура обучения и выравнивания LLM
Поскольку в отрасли в настоящее время отсутствует по-настоящему промышленная платформа для выравнивания LLM, большинство производителей могут решить внедрить её самостоятельно (спасибо OpenAI за хорошее начало). В краткосрочной перспективе это понятно, но в долгосрочной перспективе проблема изобретения велосипеда неизбежна.
Поэтому наша цель — создать лёгкую, эффективную систему обучения и адаптации LLM промышленного уровня. Для этого мы тщательно разработали и протестировали первую версию, стремясь к удобству использования. Мы также официально открываем её исходный код для привлечения большего числа единомышленников. Мы твёрдо убеждены, что открытый исходный код — залог долголетия этой системы.
2. Концепция дизайна: простота использования, высокая производительность, масштабируемость и исследовательский характер.
Простота использования: Простота использования — главный руководящий принцип при разработке фреймворка OpenRLHF. Поскольку высокая производительность — обязательное условие для квалифицированного фреймворка, мы не придаём этому слишком большого значения. Обеспечивая высокую производительность, мы стремимся к повышению простоты использования.
Масштабируемость: основан на 7B, обратно совместим с обучением небольших моделей 1-2B и постепенно поддерживает обучение моделей растущих размеров, таких как 34B/70B/170B.
Исследовательский: Помимо обеспечения базовой функциональности фреймворка, мы будем оставаться на передовых позициях в технологиях выравнивания, отслеживая новейшие разработки и оперативно внедряя их. Мы также предоставим доступ к новейшим алгоритмам выравнивания, разработанным нашей командой. Мы также разработаем модуль LLMPipeline для быстрого внедрения и объективного сравнения основных алгоритмов выравнивания и методов обучения моделей.
3. Идеи реализации
Простота использования: В качестве базовой платформы для крупномасштабных моделей мы изучили фреймворки для обучения LLM, такие как DeepSpeed и Megatron-LM, и выбрали DeepSpeed за его простоту и удобство использования в первой версии. В качестве библиотеки моделей мы без колебаний выбрали HugBaoHugFace. Для обеспечения распределённой масштабируемости мы выбрали Ray (используемый в основном для планирования ресурсов).
Масштабируемость и высокая производительность: Используйте луч, чтобы сделать разумнымПланирование ресурсов графического процессора, назначая модели «Актёр», «Награда», «Ссылка» и «Критик» отдельным графическим процессорам,Изолирующее обучение и выводДля того, чтобы в полной мере использовать прекрасные инструменты сообщества логического вывода и сотрудничать с offload, PEFT и т. д.Сохранение видеопамятиТехнология достижения масштабируемости и эффективного обучения больших моделей.
Исследовательский подход: В этой первой версии мы полностью воспроизвели процесс обучения InstructGPT и LLaMA2 и поддержали новые методы выравнивания, такие как Determined Proportional Object (DPO). Мы продолжим придерживаться этого исследовательского подхода и разработаем модули конвейера для поддержки конвейеров основных моделей, таких как InstructGPT Pipeline и LLaMA2 Pipeline, помогая сообществу проводить больше научных сравнений и исследований.
Ключевые моменты OpenRLHF
Ключевые особенности OpenRLHF
Первое полное воспроизведение LLaMA2 с открытым исходным кодоми структура выравнивания RLHF InstructGPT;
Поддержка полного обучения процессам SFT/RM/PPO;
поддерживатьвыборка с отклонением, множественные РМ;
Простота использования: OpenRLHF — одна из самых простых высокопроизводительных библиотек RLHF, доступных в настоящее время, и может быть реализована на одном узле DGXA100 с 8 картами. 34Б Обучение модели RLHF можно проводить с помощью сценариевОбучение в один клик;
Раздельное обучение и push, распределенный и масштабируемый RLHF;
Использование нескольких карт24 ГБ Графический процессор RTX 40907Б Полное обучение модели
Использование нескольких карт А100 80Г GPU и vLLMМодель 70B+Полное обучение процессу
Разделение обучения и подталкивания: разделение обучения и вывода для повторного использования хороших инструментов вывода из сообщества (в конечном итоге мы использовали vLLM) для сокращения задержки вывода;
Распределенный и масштабируемыйБлагодаря поддержке Ray/DeepSpeed/VLLM и разумному планированию ресурсов мы добились эффективного и масштабируемого обучения. Ниже приведены два примера:
Высокая производительность: благодаря Ray/DeepSpeed и другим технологиям экономии памяти, а также платформам ускорения вывода, наша производительность обучения на модели 13B LLaMA2 более чем в 4 раза превышает производительность DeepSpeedChat.
нулевая серия
FlashAttention2
LoRA, QLoRA
разгрузка
градиентная контрольная точка
Ускорение вывода: vLLM
Советы по экономии видеопамяти:
Передовые технологии: идя в ногу с передовыми разработками, в настоящее время поддерживает основные технологии выравнивания и основные большие модели;
LLaMA
байчуань
qwen
Микстраль 8*7б
Новейшие модели:
Стандарт RLHF: SFT/RM/PPO;
Отбраковочная выборка;
DPO (прямая оптимизация предпочтений)/IPO/cDPO;
Оптимизация Канемана-Тверски (КТО);
Условный SFT (https://arxiv.org/abs/2308.12050);
Современная технология выравнивания:
Методы обучения с подкреплением: мы интегрировали приемы реализации для PPO, чтобы улучшить стабильность обучения, ссылаясь на «Вопросы реализации» в «Глубоких градиентах политики» и «ppo-implementation-details».
Демонстрация производительности OpenRLHF
Матрица поддержки:
Следующая матрица поддержки показывает, как OpenRLHF соотносится с основными учебными системами выравнивания LLM (опрос может быть отложен, поэтому, пожалуйста, свяжитесь с нами, чтобы исправить любые ошибки или упущения):
Хитрости PPO | 34B Полное участие/4 A100 | 70B+полные параметры/16 A100 | 7B Full/4 RTX4090 | QLoRA | Микстраль МОЕ 8*7б | |
---|---|---|---|---|---|---|
OpenRLHF | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
DeepSpeedChat | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ColossalAIChat | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ТРЛ | ✔ | ✖️ | ✖️ | ✖️ | ✔ | ✖️ |
LLaMA-Factory | ✖️ | ✖️ | ✖️ | ✖️ | ✔ | ✔(QLoRA) |
Основными преимуществами OpenRLHF являются:Хорошая масштабируемостьиЭффективная производительность, который может поддерживать эффективное обучение всего процесса и параметров модели 70B, а также справляться с более масштабным расширением в будущем. Однако такие фреймворки, как LLaMA-Factory/trl/trlx, сталкиваются с аналогичными проблемами. Не поддерживает полнопараметрическую тренировку RLHF 70B.Некоторые фреймворки фокусируются на тонкой настройке моделей уровня 13b Lora, обычно на выборкеОбъединение актерско-критикических решений(Это временная мера для небольших RLHF, позволяющая экономить видеопамять, но она не соответствует стандартной реализации RLHF, а ее масштабируемость очень низкая, поэтому всегда наступит время, когда от нее нельзя будет отказаться.) Конечно, у OpenRLHF есть и некоторые недостатки, такие как неполная документация и тесты производительности.Необходимо улучшить удобство использованияВ частности, мы предлагаем следующее сравнение OpenRLHF с различными популярными фреймворками RLHF (пожалуйста, исправляйте любые ошибки или упущения). Более подробное и полное сравнение можно найти в нашем официальном техническом отчёте, который будет опубликован позже.
LLaMA-Factory: Преимущества модели заключаются в эффективной тонкой настройке и простоте использования (чему стоит поучиться, и у неё даже есть веб-интерфейс). Однако она использует объединённый актор-критику, не поддерживает полнопараметрическое обучение PPO на 70B и непроста в масштабировании модели.
Colossal-Chat: использует пошаговое обучение с подкреплением, в то время как наш фреймворк использует пошаговое обучение с подкреплением. Подробнее см. в разделе OpenRLHF и Colossal-Chat.
trl/trlx: Их преимущество — отличная совместимость с экосистемой Hugging Face, но у них могут быть проблемы с глубокой инкапсуляцией, что затрудняет их модификацию. Кроме того, в настоящее время они не поддерживают полнопараметрическое обучение PPO 70B. Они также используют объединённый актёр-критика для экономии видеопамяти, что не соответствует стандартной реализации.
NeMo-Aligner: Эффективность генерации на основе Megatron в настоящее время низкая, что влияет на общую эффективность обучения. Кроме того, она плохо совместима с экосистемой Hugging Face, и модель может потребовать специальных доработок.
Данные о производительности:
Согласно существующим тестам, эффективность обучения нашего фреймворка OpenRLHF на модели 13B примерно в четыре раза выше, чем у DeepSpeedChat. (Из-за ограниченности рабочей силы тестирование может быть отложено. Пожалуйста, сообщите нам данные о производительности других фреймворков для внесения исправлений.)
7B llama2 RLHF | 13B llama2 RLHF (50 тыс. образцов) | |
---|---|---|
OpenRLHF | - | 17 часов с 8 А100 |
DeepSpeedChat | - | 48 часов с 16 А100 |
Пропускная способность обучения:
Конфигурация по умолчанию:
4 A100 80G для актера, 2 A100 80G для критика, 1 A100 80G для RM и 1 A100 80G для InitPolicy
ZeRO2 с Adam Offload
Максимальная длина последовательности: 2048
Производительность пропускной способности (выборок/с в конфигурации по умолчанию, которая позже будет изменена на токены/с):
7B llama2: 0,105 выборок/gpu/сек micro_batch_size = 16/8 (развертывание/обучение), generation_length = 100~300
13B llama2: 0,04 выборки/gpu/сек micro_batch_size = 8/4 (развертывание/обучение), generation_length = 200~400
34B codellama: 0,007 выборок/gpu/сек micro_batch_size = 2/1 (развертывание/обучение), generation_length = 300~800
Данные о производительности основных моделей (из-за нехватки рабочей силы повторное тестирование не представляется возможным. Приведённые здесь данные о производительности получены, когда модель поддерживалась. Текущая версия PPO должна работать намного быстрее. Дополнительные модели и обновлённые данные о производительности будут добавлены в официальный технический отчёт позже):
модель | СФТ | РМ | ППО | Примечания |
---|---|---|---|---|
Байчуань2-7Б | 1 час | 4 часа | 71ч | |
Qwen-7B | - | - | - |
Как использовать OpenRLHF
Официальная документация:
Официальная документация, включая эту статью, будет поддерживаться на Github. Повышение качества документации для повышения удобства использования также является одним из наших ключевых направлений работы в будущем. (Из-за ограничений по количеству сотрудников документация в настоящее время находится в относительно сыром состоянии, поэтому мы будем рады любым вашим дополнениям.)
Домашняя страница проекта
Официальная документация
Установка OpenRLHF
Мы поддерживаемnvidia-docker (рекомендуется во избежание потенциальных проблем с окружением)Или установка среды conda (вы можете предоставить настроенную среду conda или образ позже):
Сначала клонируем репозиторий:
Клонируйте репозиторий: git clone https://github.com/openllmai/OpenRLHF.git
Затем установите среду nv-docker или conda:
# install nv-docker cd examples/scripts # install nvidia-docker (Необязательно) ./nvidia_docker_install.sh # launch nvidia container ./docker_run.sh # нам понадобится conda conda create -n openrlhf python=3.10 # поэтому нам нужно вручную установить некоторые пакеты: при установке torch install вам может потребоваться сопоставить соответствующую версию cuda. pip install packing ninja pip3 install torch # check ninjia ninja --version echo $? # output: 0 # install flash-attn: может занять некоторое время. # При сетевой ошибке: вы можете загрузить указанную версию с https://github.com/Dao-AILab/flash-attention/releases. pip install flash-attn==2.4.2 ./build_openrlhf.sh # наслаждайтесь! conda активируйте openrlhf
Обучение OpenRLHF
Сценарий обучения:
После настройки среды перейдите в каталог /openrlhf/examples/scripts, измените сценарий обучения в соответствии с вашими потребностями и запустите обучение одним щелчком мыши. Поддерживается обучение как на одной машине, так и на нескольких машинах.Поддерживает полномасштабное и полнопроцессное обучение моделей 7B-70B+Ниже приведены некоторые важные параметры, которые пользователи могут изменять в соответствии со своими потребностями для поддержки обучения собственной модели:
-pretrain: адрес модели предварительного обучения в формате Hugface
-dataset: адрес набора данных в формате Hugface
-dataset_probs: вероятность выборки нескольких смешанных наборов данных, например: 0,5, 0,4, 0,1
-save_path: адрес сохранения модели, формат Hugface
-max_epochs: количество эпох обучения
-micro_train_batch_size: размер партии для одного графического процессора
-train_batch_size: глобальный размер партии
-learning_rate: скорость обучения
Сценарий автономного обучения:
cd examples/scripts # установка nvidia-docker (необязательно) ./nvidia_docker_install.sh # запуск контейнера nvidia ./docker_run.sh # cd в контейнере cd /openrlhf/examples/scripts # сборка OpenRLHF (т. е. установка pip) ./build_openrlhf.sh # huggingface вход ~/.local/bin/huggingface-cli вход # продолжение предварительной подготовки ./train_continue_pretrain_llama.sh # тренировка модели SFT ./train_sft_llama.sh # тренировка модели RM ./train_rm_llama.sh # тренировка модели PPO ./train_ppo_llama.sh # тренировка модели DPO ./train_dpo_llama.sh # train KTO model ./train_kto_llama.sh # train Модель выборки отбраковки ./train_rejection_sampling_llama.sh # train Условная модель SFT ./train_conditional_llama.sh
Сценарий многомашинного обучения,Полнопараметрическое обучение RLHF на модели A100 70B с 16 картами:
cd examples/scripts # запуск контейнера nvidia ./docker_run.sh # cd в контейнере cd /openrlhf/examples/scripts # сборка OpenRLHF (т. е. установка pip) ./build_openrlhf.sh # из-за совместимости образа nVIDIA PyTorch pip uninstall xgboost transformer_engine -y # huggingface login ~/.local/bin/huggingface-cli login # запуск главного узла ray в контейнере ray start --head --node-ip-address 0.0.0.0 --num-gpus 8 # если вы хотите запустить ray на нескольких узлах, используйте ray start --address {MASTER-NODE-ADDRESS}:6379 --num-gpus 8 # обучение модели ray PPO, по умолчанию требуется 8 графических процессоров config ./train_ppo_llama_ray.sh # для моделей 70B и RLHF на основе vLLM (важно!) pip install vllm==0.3.2 # из-за совместимости vLLM pip uninstall flash_attn -y ./train_ppo_llama_ray_70b.sh
рассуждения
Для обоснования и оценки мы рекомендуем использовать инструменты и коды с открытым исходным кодом. Вы можете обратиться к следующим скриптам:
Будущая работа
Дальнейшее развитие OpenRLHF будет сосредоточено на удобстве использования и практичности (документация, обучающие материалы, практический опыт и т. д.), передовых функциях (новые алгоритмы, конвейеры моделей и т. д.) и стабильности. В частности, существуют следующие потенциальные задачи, в решении которых, как мы надеемся, каждый сможет принять участие:
Документы: версии на китайском и английском языках
Учебное пособие: Обеспечивает хорошееУчебное пособие
Окружение: укажите настроенный образ или среду conda.;
Тестирование производительности, бенчмаркинг;
Тестирование основных функций
Сравнение с другими фреймворками
Поддержка тестирования модели
Тестирование алгоритма выравнивания
Дальнейшая оптимизация производительности;
Повышение стабильности: регулярный обзор кода;
Новые функции и новые алгоритмы;
Поддержка новых моделей: новые модели Google и т. д.
Модуль оценки обеспечивает более комплексные возможности оценки;
Введение в организацию
Профиль организации
OpenLLMAI: Открытый ИИ для всех.
Возможно, нам ещё далеко до OpenAI, но мы очень близки к открытости. Поэтому мы просим от наших участников лишь двух вещей: открытости и уверенности. Наш девиз: «Пусть ваша страсть сияет». Мы с нетерпением ждём возможности пройти вместе с вами трудный путь развития ИИ. Учёный должен быть решительным и непоколебимым, ведь впереди долгий и трудный путь!
Мы все здесь для двух целей: 1. Обмен методиками LLM (обмен техническими знаниями и их распространение); 2. Разработка инструментов LLM (фреймворки обучения, модели, работа с данными и т. д.). Приглашаем всех желающих присоединиться к нам! Подробное введение об организации см. в предыдущей публикации Zhihu «Знакомство с организацией OpenLLMAI».
Разработчики
За это время проект OpenRLHF привлек более 20 участников, внес более 130 коммитов и получил более 800 звезд. Мы хотели бы поблагодарить всех участников, особенно hijkzzz, wuxibin и Xianyu за их выдающийся вклад в развитие проекта. hijkzzz и Xianyu являются инициаторами этого проекта. Как администратор проекта, hijkzzz представил первую версию кода проекта и посвятил много энергии его поддержке в течение длительного периода времени, внеся незаменимый вклад в развитие проекта. wuxibin, как основной разработчик проекта, в основном отвечает за масштабное расширение фреймворка на основе Ray и посвятил много энергии его ежедневной поддержке в течение длительного периода времени. Xianyu, как администратор проекта, отвечает за разработку части NLP и некоторую работу по планированию проекта. Кроме того, pikaqqqqqq, li-plus, wwxFromTju, jovany-wang, xffxff, dabney777, suc16, Dylancer1998 и другие студенты также внесли важный вклад в развитие проекта (перечислить их всех здесь невозможно, и имена всех разработчиков будут указаны в официальном техническом отчёте/документе позже; также есть много студентов и преподавателей, которые, хотя и не участвовали напрямую в проекте, внесли множество ценных предложений. Большое спасибо всем вам). Мы также рады видеть новых единомышленников и надеемся, что OpenLLMAI будет развиваться вместе со всеми!
Студенты, желающие внести свой вклад, могут напрямую участвовать в разработке на Git, связавшись с соответствующим ответственным лицом или по официальному адресу электронной почты.
RL: hijkzzz
Рэй:уксибинь
НЛП: Сяньюй
Официальный адрес электронной почты: xianyuai@openllmai.top
Спонсор нас
В настоящее время OpenLLMAI — организация с полностью открытым исходным кодом. Такие проекты, как OpenRLHF/OpenLLMWiki, а также OpenLLM Talk и группа технического обмена, полностью открыты и доступны. Однако в долгосрочной перспективе без финансовой поддержки мы обречены на провал. С нашей страстью к мощи достичь этого непросто. Спасибо всем за вашу поддержку на этом пути. И наконец, мы ищем спонсоров. Мы будем рады финансовой поддержке (вычислительной мощности!!!) или личной поддержке (участию в разработке или другим вкладам). По вопросам спонсорства или сотрудничества обращайтесь по адресу xianyuai@openllmai.top.
Ссылки
https://github.com/OpenLLMAI/OpenRLHF
https://github.com/NVIDIA/Megatron-LM
InstructGPT
LLaMA2
https://github.com/facebookresearch/llama
Обнимающие Трансформеры
DeepSpeed
https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-chat
Рэй
https://github.com/hpcaitech/ColossalAI/tree/main/applications/Chat
https://github.com/CarperAI/trlx
https://github.com/NVIDIA/NeMo-Aligner
https://github.com/hiyouga/LLaMA-Factory
https://github.com/OpenLLMAI/OpenLLMWiki
【OpenLLMAI】Верьте в силу открытого исходного кода: у нас есть своя организация! Впереди долгий путь, но если мы продолжим идти, мы достигнем цели! - Статьи OpenLLMAI - Zhihuhttps://zhuanlan.zhihu.com/p/647882819
Как правильно воспроизвести Instruct GPT / RLHF? - Статья Snail in the Garden Parkour - Zhihu https://zhuanlan.zhihu.com/p/622134699
Начало тренировочного пути: создание полномасштабной тренировочной платформы RLHF с открытым исходным кодом для моделей 70B+ на основе Ray и vLLM — статья Snail in the Garden Parkour — Zhihuhttps://zhuanlan.zhihu.com/p/678828949
[OpenLLM 006] LoRA: Низкоранговая адаптация больших моделей — Что же представляет собой LoRA, ставшая в последнее время популярной? Почему используются как стабильная диффузия, так и воспроизведение с открытым исходным кодом ChatGPT? — Статья OpenLLMAI — Zhihu
https://zhuanlan.zhihu.com/p/620327907
https://arxiv.org/abs/2005.12729
https://iclr-blog-track.github.io/2022/03/25/ppo-implementation-details/
https://github.com/baichuan-inc/Baichuan2
https://github.com/QwenLM/Qwen
https://mistral.ai/news/mixtral-of-experts/
https://github.com/OpenLLMAI/OpenRLHF/issues/221