Руководства, код и конфиги для семейства моделей ReplitLM .
Он постоянно обновляется, чтобы добавить больше способов использования и развития наших моделей.
Модель | Контрольно-пропускной пункт [CC BY-SA 4.0] | Словарь [CC BY-SA 4.0] | Код [Apache 2.0] |
---|---|---|---|
код повторения-v1-3b | Ссылка для скачивания | Скачать | Репо |
код повторения-v1_5-3b | (Вскоре) | (Вскоре) | Вскоре |
2 мая 2023 г.: replit-code-v1-3b
У нас также есть пространство на базе графического процессора для модели replit-code-v1-3b
, где вы можете использовать ее напрямую!
Размещенная демонстрация на базе графического процессора
Все выпущенные модели Replit доступны на Hugging Face на странице организации Replit и могут использоваться с библиотекой Hugging Face Transformers.
Вы можете использовать модели Replit с библиотекой Hugging Face Transformers. README для каждой выпущенной модели содержит инструкции по использованию модели с трансформерами Hugging Face. Убедитесь, что вы установили clean_up_tokenization_spaces=False
при декодировании с помощью токенизатора, а также используйте рекомендуемую постобработку, указанную в README.
Модель | ЧИТАЙТЕ |
---|---|
код повторения-v1-3b | Документация |
Мы рекомендуем любое дальнейшее обучение, предварительное обучение и тонкую настройку моделей Replit с помощью MosaicML LLM Foundry и Composer.
Наши модели Replit совместимы с LLM Foundry и могут быть обучены/настроены высокооптимизированным способом с помощью LLM Foundry + Composer с использованием современных методов обучения, архитектурных компонентов, оптимизаторов и многого другого. Все модели, LLM Foundry и платформа обучения Composer основаны на Pytorch. Используя их, вы можете обучать модели Replit на своих собственных наборах данных.
Следующие шаги дают вам представление о том, что необходимо сделать для обучения моделей, со ссылками на разделы документации LLM Foundry, необходимые для каждого шага:
Установить LLM Foundry
Чтобы начать работу с LLM Foundry, вы можете следовать README LLM Foundry, чтобы:
На высоком уровне LLM Foundry используется путем определения yaml конфигурации, а затем запуска сценария обучения train/train.py
в репозитории LLM Foundry с определенным yaml конфигурации с помощью такой команды, как composer train/train.py <configuration_yaml_path> <extra_args>
. Каталог scripts/train/yamls содержит примеры YAML-файлов как для точной настройки, так и для предварительного сохранения.
Установите другие требования для моделей Replit
Затем вам придется установить несколько других зависимостей, указанных в файле requirements.txt
.
Для обучения с помощью LLM Foundry вам необходимо преобразовать набор данных в формат Mosaic StreamingDataset.
Поддерживаемые типы источников наборов данных: наборы данных JSON и наборы данных Hugging Face.
В документации по подготовке данных в LLM Foundry описаны шаги, как это сделать.
При запуске convert_dataset_hf.py
или convert_dataset_json.py
на описанных выше шагах вам нужно будет указать, что вы используете токенизатор Replit, передав аргумент --tokenizer replit/replit-code-v1-3b
. Ключевым шагом (из-за текущей реализации llm-foundry
) является редактирование scripts/data_prep/convert_dataset_hf.py
путем передачи trust_remote_code=True
в вызов AutoTokenizer.from_pretrained
, когда токенизатор загружается в методе main()
.
Тестирование вашего преобразованного набора данных
Чтобы протестировать преобразованный набор данных и убедиться, что он работает с загрузчиком данных, вы можете следовать разделу «Проверка загрузчика данных» в документации LLM Foundry.
Для обучения с помощью LLM Foundry вам необходимо определить yaml конфигурации запуска. Этот Yaml определяет модель, набор обучающих данных, набор оценочных данных и метрику, параметры обучения и многое другое.
Использование моделей повторения
Для любой конфигурации YAML, которую вы определяете для обучения/настройки с помощью LLM Foundry, вы можете подключить и использовать модель Replit, заменив ключи модели и токенизатора в вашем YAML следующим образом:
...
model:
name: hf_causal_lm
pretrained: true
pretrained_model_name_or_path: replit/replit-code-v1-3b
config_overrides:
attn_config:
attn_impl: triton
attn_uses_sequence_id: false
tokenizer:
name: replit/replit-code-v1-3b
kwargs:
model_max_length: ${max_seq_len}
trust_remote_code: true
...
Это загрузит нашу модель с ее весами из Hugging Face для вашей конфигурации.
После преобразования набора данных и определения yaml конфигурации запуска вы можете запустить обучение с помощью LLM Foundry.
Для проведения обучения следуйте разделу «Как начать обучение» в документации LLM Foundry. В этом разделе показано, как запустить обучение с одним и несколькими узлами. По сути, вы запустите сценарий обучения scripts/train/train.py
в репозитории LLM Foundry с определенным yaml конфигурации, используя такую команду, как composer train/train.py <configuration_yaml_path> <extra_args>
.
В Composer есть некоторая жестко запрограммированная логика, которую нам нужно обойти, чтобы сохранить контрольные точки. В скрипте обучения scripts/train/train.py
добавьте строку model.tokenizer = None
сразу после инициализации модели и перед настройкой загрузчика данных поезда, т. е. в момент написания строки 147 в main()
. Это эффективно гарантирует, что мы не сохраним токенизатор с состоянием контрольной точки. Нам нужен этот обходной путь, поскольку в настоящее время Composer не может обрабатывать сохранение контрольных точек с помощью токенизаторов, которые включают файлы *.py
.
Вы можете настроить наши модели ReplitLM для вашего собственного варианта использования. В большинстве случаев использования инструкций по настройке мы рекомендуем начинать с примеров «Обнимающего лица», приведенных ниже. В противном случае мы также предоставляем подробное руководство по настройке инструкций с помощью LLM Foundry.
Вы можете настроить модель replit-code-v1-3b
на наборах данных в стиле Альпаки, используя библиотеку transformers
.
Для этого вам понадобится набор данных настройки инструкций, который уже находится в формате в стиле Альпаки, например:
Участник открытого исходного кода Teknium разветвил исходный репозиторий Alpaca на репозиторий stanford_alpaca-replit, который предварительно настроен для работы с нашими моделями. Мы настоятельно рекомендуем вам использовать это в качестве отправной точки.
Репозиторий содержит инструкции по настройке и запуску трейнера. Требуемый формат набора данных в стиле Альпаки описан здесь. Любой набор данных, отформатированный в стиле Альпаки, будет работать с тренером. Например, набор данных Code Alpaca можно использовать для настройки нашей модели с помощью обучающего сценария в репозитории Teknium.
Вы также можете использовать LLM Foundry для настройки инструкций. Для этого вам необходимо выполнить следующие шаги на высоком уровне с конкретными деталями и шагами, которые вам необходимо выполнить, со ссылками по мере необходимости:
Установить LLM Foundry
Чтобы начать работу с LLM Foundry, вы можете следовать README LLM Foundry, чтобы:
На высоком уровне LLM Foundry используется путем определения yaml конфигурации, а затем запуска сценария обучения train/train.py
в репозитории LLM Foundry с определенным yaml конфигурации с помощью такой команды, как composer train/train.py <configuration_yaml_path> <extra_args>
. Каталог scripts/train/yamls содержит примеры YAML-файлов как для точной настройки, так и для предварительного сохранения.
Установите другие требования для моделей Replit
Затем вам придется установить несколько других зависимостей, указанных в файле requirements.txt
.
Может быть любым из следующих:
В зависимости от используемого вами набора данных вам может потребоваться или не потребоваться форматировать набор данных в формат, ожидаемый LLM Foundry.
Наборы данных, для которых не требуется пользовательская предварительная обработка
Некоторые наборы данных, такие как мозаика/dolly_hhrlhf, уже имеют функцию предварительной обработки, которую вы можете использовать прямо сейчас. На момент публикации следующие наборы данных Hugging Face имели предварительно зарегистрированную функцию предварительной обработки: HuggingFaceH4/databricks_dolly_15k
, Muennighoff/P3
, Muennighoff/flan
, bigscience/P3
, tatsu-lab/alpaca
.
Наборы данных, для которых необходима пользовательская предварительная обработка
Если вы не используете ни один из вышеперечисленных наборов данных, вам нужно будет написать собственную функцию предварительной обработки и зарегистрировать ее.
Для любого набора данных вам необходимо, чтобы каждый пример был отформатирован как словарь со следующими ключами:
formatted_example = { 'prompt' : < prompt_text > , 'response' : < response_text > }
т. е. каждый образец представляет собой словарь с двумя ключами. Это формат, который ожидает загрузчик данных finetuning
.
Руководство по форматированию набора данных
В разделе «Форматирование данных» исходного репозитория LLM Foundry описано, как это сделать.
В случае, если вам нужно создать собственную функцию предварительной обработки для приведения ваших данных в правильный формат, а шаги, описанные в документации LLM Foundry, сбивают вас с толку, перефразированный вариант TL;DR выглядит следующим образом:
preprocess.py
) где-то в вашей кодовой базе, например, в том же каталоге, что и ваш обучающий скрипт, при условии, что он может быть импортирован вашим обучающим скриптом.preprocess_function()
которая принимает в качестве входных данных один образец из вашего набора данных и возвращает словарь с ключами prompt
и response
, как описано выше, в соответствии с вашей логикой форматирования образца в требуемый формат.preprocess.py
) и функцию (например, preprocess_function()
), которую вы создали. Теперь вы можете использовать свой набор данных для точной настройки модели Replit.
Гид
В разделе «Использование» исходного репозитория LLM Foundry описано, как использовать ваш набор данных и точно настраивать модель Replit.
Если вы используете варианты 1) или 2) в этом разделе, вы измените train_loader
и eval_loader
если применимо, в своем обучающем YAML-файле на основе того, что вы сделали на предыдущих двух шагах. Если вы используете вариант 3) (т. е. потоковый набор данных), вы сначала преобразуете набор данных в правильный формат с помощью ключей подсказки и ответа, а затем записываете его в локальный набор данных MDS. После этого вы можете изменить свой YAML, чтобы указать на это.