
Этот репозиторий содержит код для обучения, создания, оценки, оценки и развертывания LLMS для вывода с композитором и платформой MosaICML. Эта кодовая база, разработанная для того, чтобы быть простым в использовании, эффективной и гибкой, обеспечивает быстрые эксперименты с последними методами.
Вы найдете в этом репо:
llmfoundry/ - исходный код для моделей, наборов данных, обратных вызовов, утилит и т. Д.scripts/ - Сценарии для запуска рабочей нагрузки LLMdata_prep/ - Преобразование текстовых данных из исходных источников в формат StreamingDatasettrain/ - поезда или модели Huggingface и MPT с параметрами 125 млн. - 70btrain/benchmarking - профиль пропускная пропускная способность и MFUinference/ - конвертировать модели в формат HuggingFace или ONNX и генерируйте ответыinference/benchmarking - задержка вывода профиля и пропускная способностьeval/ -Оценка LLMS по академическим (или пользовательским) задачам обучения контекстаmcli/ - Запустите любую из этих рабочих нагрузок с помощью MCLI и платформы MOSAICMLTUTORIAL.md - более глубокое погружение в репо, примеры рабочих процессов и часто задаваемые вопросыDBRX-это современная LLM с открытым исходным кодом, обученная командой DataBricks Mosaic. Он использует архитектуру смеси экспертов (MOE) и обучалась оптимизированным версиям Composer, LLM Foundry и Megablocks. Модель имеет общие параметры 132B и 36b активные параметры. Мы выпустили две модели DBRX:
| Модель | Контекст длины | Скачать |
|---|---|---|
| DBRX Base | 32768 | https://huggingface.co/databricks/dbrx-base |
| DBRX инструктируется | 32768 | https://huggingface.co/databricks/dbrx-instruct |
Наши веса модели и код лицензированы как для исследователей, так и для коммерческих организаций. Лицензии с открытым исходным кодом Databricks можно найти по лицензии, и наша политика приемлемого использования можно найти здесь.
Для получения дополнительной информации о моделях DBRX см. Https://github.com/databricks/dbrx.
Предварительные трансформаторы Mosaic (MPT) представляют собой модели в стиле GPT с некоторыми специальными функциями-вспыхивают внимание к эффективности, алиби для экстраполяции длины контекста и улучшения стабильности для смягчения потерь. В рамках серии Foundation Mosaicml мы открыли несколько моделей MPT:
| Модель | Контекст длины | Скачать | Коммерческое использование? |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | Да |
| MPT-30B-Instruct | 8192 | https://huggingface.co/mosaicml/mpt-30b-instruct | Да |
| MPT-30B-чат | 8192 | https://huggingface.co/mosaicml/mpt-30b-chat | Нет |
| MPT-7B-8K | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k | Да |
| MPT-7B-8K-чат | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-chat | Нет |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | Да |
| MPT-7B-Instruct | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | Да |
| MPT-7B-чат | 2048 | https://huggingface.co/mosaicml/mpt-7b-chat | Нет |
| MPT-7B StoryWhriter | 65536 | https://huggingface.co/mosaicml/mpt-7b-storywriter | Да |
Чтобы выполнить эти модели локально, следуйте инструкциям в scripts/inference/README.md чтобы предпринять модели HF с использованием наших сценариев HF_Generate.py или HF_CHAT.PY.
Мы были поражены всей удивительной работой, которую сообщество вкладыло в MPT! Здесь мы предоставляем несколько ссылок на некоторые из них:
replit-code-v1-3b -это модель причинно-следственного языка 2.7b, ориентированная на завершение кода. Модель была обучена подмножеству набора данных DEDUP V1.2, охватывающего 20 языков, таких как Java, Python и C ++Учебные видео из сообщества:
Что -то не хватает? Внести свой вклад в PR!
Эта кодовая база была протестирована с помощью Pytorch 2.4 с NVIDIA A100S и H100S. Эта кодовая база может также работать в системах с другими устройствами, такими как потребительские карты NVIDIA и карты AMD, но мы не активно тестируем эти системы. Если у вас есть успех/сбой, используя LLM Foundry в других системах, сообщите нам об этом в проблеме GitHub, и мы обновим матрицу поддержки!
| Устройство | Версия факела | Версия CUDA | Статус |
|---|---|---|---|
| A100-40GB/80 ГБ | 2.5.1 | 12.4 | ✅ Поддерживается |
| H100-80GB | 2.5.1 | 12.4 | ✅ Поддерживается |
Мы настоятельно рекомендуем использовать наши предварительно построенные изображения Docker. Вы можете найти их здесь: https://hub.docker.com/orgs/mosaicml/repositories.
Изображения mosaicml/pytorch прикрепляются к конкретным версиям Pytorch и CUDA, и они стабильны и редко обновляются.
Изображения mosaicml/llm-foundry создаются с новыми тегами на каждом коммите в main ветви. Вы можете выбрать конкретный хэш для коммита, такой как mosaicml/llm-foundry:2.5.1_cu124-9867a7b или взять последний, используя mosaicml/llm-foundry:2.5.1_cu124-latest .
Обратите внимание: изображения mosaicml/llm-foundry не поставляются с пакетом llm-foundry , предварительно установленным, только зависимости. Вам все равно нужно будет pip install llm-foundry либо из PYPI, либо из источника.
| Docker Image | Версия факела | Версия CUDA | Установлены зависимости LLM LLM? |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12.4 (Infiniband) | Нет |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12.4 (Infiniband) | Да |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4 (EFA) | Да |
Это предполагает, что у вас уже установлены Pytorch, Cmake и упаковка. Если нет, вы можете установить их с помощью pip install cmake packaging torch .
Чтобы начать, клонировать репо и настроить окружающую среду. Инструкции по этому поводу немного отличаются в зависимости от того, используете ли вы Docker.
Мы настоятельно рекомендуем работать с LLM Foundry в контейнере Docker (см. Наше рекомендуемое изображение Docker выше). Если вы это делаете, следуйте этим шагам, чтобы клонировать репо и установить требования.
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.Если вы решите не использовать Docker, вы должны создавать и использовать виртуальную среду.
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv
source llmfoundry-venv/bin/activate
pip install cmake packaging torch # setup.py requires these be installed
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.GPU NVIDIA H100 обладают поддержкой FP8; Мы уже установили Flash Attect and Transformer на наших изображениях Docker (см. Выше). Если вы не используете наши изображения Docker, вы можете установить эти пакеты с помощью:
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableСмотрите здесь для более подробной информации о включении слоев трансформации и AMP_FP8.
В нашем тестировании графических процессоров AMD настройка ENV включает в себя:
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv-amd
source llmfoundry-venv-amd/bin/activate
# installs
pip install cmake packaging torch
pip install -e . # This installs some things that are not needed but they don't hurt
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2Наконец , установите вспышку ROCM, включенное в вспышку (инструкции здесь).
Примечания:
numpy==1.23.5 ), прежде чем все работает без проблем. Поддержка LLM Foundry на устройствах Intel Gaudi является экспериментальной, пожалуйста, используйте филиал habana_alpha и посмотрите на Readme в этой филиале, в котором есть инструкции по установке и известные проблемы.
Для обучения и результатов вывода результатов эффективности на акселераторах Intel Gaudi2 см. В нашем блоге: https://www.databricks.com/blog/llm training-and inference-intel-gaudi2-ai-ccelerators
Примечание Обязательно пройдите шаги установки выше, прежде чем попробовать QuickStart!
Вот сквозной рабочий процесс для подготовки подмножества набора данных C4, обучение модели MPT-125M для 10 партий, преобразование модели в формат HuggingFace, оценка модели на вызове Winograd и создание ответов на подсказки.
(Помните, что это QuickStart, чтобы продемонстрировать инструменты - чтобы получить хорошее качество, LLM должен быть обучен дольше 10 партий?)
cd scripts
# Convert C4 dataset to StreamingDataset format
python data_prep/convert_dataset_hf.py
--dataset allenai/c4 --data_subset en
--out_root my-copy-c4 --splits train_small val_small
--concat_tokens 2048 --tokenizer EleutherAI/gpt-neox-20b --eos_text ' <|endoftext|> '
# Train an MPT-125m model for 10 batches
composer train/train.py
train/yamls/pretrain/mpt-125m.yaml
variables.data_local=my-copy-c4
train_loader.dataset.split=train_small
eval_loader.dataset.split=val_small
max_duration=10ba
eval_interval=0
save_folder=mpt-125m
# Convert the model to HuggingFace format
python inference/convert_composer_to_hf.py
--composer_path mpt-125m/ep0-ba10-rank0.pt
--hf_output_path mpt-125m-hf
--output_precision bf16
# --hf_repo_for_upload user-org/repo-name
# Evaluate the model on a subset of tasks
composer eval/eval.py
eval/yamls/hf_eval.yaml
icl_tasks=eval/yamls/copa.yaml
model_name_or_path=mpt-125m-hf
# Generate responses to prompts
python inference/hf_generate.py
--name_or_path mpt-125m-hf
--max_new_tokens 256
--prompts
" The answer to life, the universe, and happiness is "
" Here's a quick recipe for baking chocolate chip cookies: Start by " Примечание. Команда composer , используемая выше для обучения модели, относится к распределенной пусковой установке библиотеки композитора.
Если у вас есть токен Autken Authectain с поддержкой записи, вы можете при желании загрузить свою модель в концентратор! Просто экспортируйте свой знак, как это:
export HF_TOKEN=your-auth-token inference/convert_composer_to_hf.py не понаправду --hf_repo_for_upload ... содержащая строку
Вы можете использовать реестр для настройки своих рабочих процессов, не поднимая библиотеку. Некоторые компоненты LLM Foundry регистрируются, такие как модели, лесозаготовители и обратные вызовы. Это означает, что вы можете зарегистрировать новые параметры для этих компонентов, а затем использовать их в конфигурации YAML.
Чтобы помочь найти и понять регистрируемые компоненты, вы можете использовать команду CLI llmfoundry registry .
В настоящее время мы предоставляем две команды:
llmfoundry registry get [--group] : Перечислите все реестры и их компоненты, при желании указать конкретный реестр. Пример использования: llmfoundry registry get --group loggers или llmfoundry registry getllmfoundry registry find <group> <name> : получить информацию о конкретном зарегистрированном компоненте. Пример использования: llmfoundry registry find loggers wandb Используйте --help любую из этих команд для получения дополнительной информации.
Эти команды также могут помочь вам понять, из чего состоит каждый реестр, так как каждый реестр содержит Docstring, который будет распечатан. Общая концепция заключается в том, что каждый реестр определяет интерфейс, и компоненты, зарегистрированные в этом реестре, должны реализовать этот интерфейс. Если есть часть библиотеки, которая в настоящее время не расширяется, но вы думаете, что это должно быть, пожалуйста, откройте проблему!
Есть несколько способов зарегистрировать новый компонент:
Вы можете указать зарегистрированные компоненты через Python IntryPoint, если вы создаете свой собственный пакет с зарегистрированными компонентами. Это было бы ожидаемым использованием, если вы строите большое расширение на литейный завод LLM и собираетесь переоценить многие компоненты. Обратите внимание, что вещи, зарегистрированные с помощью точек входа, будут переоценить компоненты, зарегистрированные непосредственно в коде.
Например, следующее зарегистрирует класс MyLogger , под ключом my_logger , в реестре llm_foundry.loggers :
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "foundry_registry"
version = "0.1.0"
dependencies = [
" mosaicml " ,
" llm-foundry " ,
]
# Note: Even though in python code, this would be llmfoundry.registry.loggers,
# when specified in the entry_points, it has to be "llmfoundry_loggers". That is,
# the segments of the name should be joined by an _ in the entry_points section.
[project.entry-points."llmfoundry_loggers"]
my_logger = "foundry_registry.loggers:MyLogger" Если разработка новых компонентов с помощью точек входа, важно отметить, что входные точки Python являются глобальными для среды Python. Это означает, что если у вас есть несколько пакетов, которые регистрируют компоненты с одним и тем же ключом, последний установлен будет использован. Это может быть полезно для переоценки компонентов в LLM Foundry, но также может привести к неожиданному поведению, если не осторожно. Кроме того, если вы измените pyproject.toml, вам нужно будет переустановить пакет для вступления в силу. Вы можете сделать это быстро, установив с pip install -e . --no-deps чтобы избежать переустановки зависимостей.
Вы также можете зарегистрировать компонент непосредственно в вашем коде:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
class MyLogger ( LoggerDestination ):
pass
loggers . register ( "my_logger" , func = MyLogger )Вы также можете использовать декораторы для регистрации компонентов непосредственно из вашего кода:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
@ loggers . register ( "my_logger" )
class MyLogger ( LoggerDestination ):
pass Как для подходов прямого вызова, так и для декоратора, при использовании сценариев LLM Foundry Train/Eval вам необходимо будет предоставить аргумент code_paths , который является списком файлов, необходимого для выполнения, чтобы зарегистрировать ваши компоненты. Например, у вас может быть файл с именем foundry_imports.py , который содержит следующее:
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger ) Затем вы предоставите code_paths для сценариев поезда/оценки в вашей конфигурации YAML:
...
code_paths :
- foundry_imports.py
...Одним из них было бы ожидаемое использование, если вы строите небольшое расширение на литейный завод LLM, переопределяете лишь несколько компонентов и, следовательно, не хотите создавать целый пакет.
Проверьте Tutorial.md, чтобы продолжать изучать работу с LLM Foundry. В учебном положении подчеркивается пример рабочих процессов, указывает вам на другие ресурсы по всему репо и отвечает часто задаваемые вопросы!
Если вы столкнетесь с любыми проблемами с кодом, пожалуйста, подайте проблемы GitHub непосредственно в это репо.
Если вы хотите обучить LLMS на платформе MosaICML, обратитесь к нам по адресу [email protected]!