GPT Neo
По состоянию на август 2021 года код больше не поддерживается. Он сохранён здесь в архивном виде для тех, кто хочет продолжать его использовать.
🎉 1T или всё, ребята! 🎉
Реализация моделей типа GPT3 и параллелизма данных с использованием библиотеки mesh-tensorflow.
Если вы просто хотите поиграть с нашими предварительно обученными моделями, мы настоятельно рекомендуем вам попробовать интеграцию с HuggingFace Transformer (https://huggingface.co/EleutherAI).
Обучение и вывод официально поддерживаются на TPU и должны работать также на GPU. Этот репозиторий будет (в основном) архивирован, поскольку мы переносим фокус на наш репозиторий, специфичный для GPU, GPT-NeoX (https://github.com/EleutherAI/gpt-neox/).
В дополнение к функциональности, предлагаемой GPT-3, мы также предлагаем следующее:
NB, хотя neo может технически выполнять шаг обучения при 200B+ параметрах, он очень неэффективен при таких масштабах. Это, а также тот факт, что многие GPU стали доступны нам, среди прочего, побудило нас перейти к разработке GPT-NeoX.
Обновление от 21.03.2021:
Мы с гордостью выпускаем две предварительно обученные модели GPT-Neo, обученные на The Pile, веса и конфиги можно свободно загрузить с the-eye.eu.
1,3 млрд: https://mystic.the-eye.eu/public/AI/gptneo-release/GPT3_XL/.
2,7 млрд: https://mystic.the-eye.eu/public/AI/gptneo-release/GPT3_2-7B/.
Для получения дополнительной информации о том, как их настроить, см. блокнот colab или прочтите остальную часть readme.
Модель и размер | Pile BPB | Pile PPL | Wikitext PPL | Lambada PPL | Lambada Acc | Winogrande | Hellaswag |
---|---|---|---|---|---|---|---|
GPT-Neo 125M | ----- | ----- | 32.285 | 30.266 | 37.36% | 50.43% | 28.67% |
GPT-3 125M | ----- | ----- | ----- | 18.6 | 42.7% | 52.0% | 33.7% |
GPT-Neo 350M | ----- | ----- | 22.5657 | 13.876 | 47.27% | 51.14% | 32.16% |
GPT-3 350M | ----- | ----- | ----- | 9.09 | 54.3% | 52.1% | 43.6% |
GPT-3 Ada | 0.9631 | ----- | ----- | 9.954 | 51.60% | 52.90% | 35.93% |
GPT-Neo 1.3B | 0.7527 | 6.159 | 13.10 | 7.498 | 57.23% | 55.01% | 38.66% |
GPT-3 1.3B | ----- | ----- | ----- | 5.44 | 63.6% | 58.7% | 54.7% |
GPT-2 1.5B | 1.0468 | ----- | 17.48 | 10.634 | 51.21% | 59.40% | 40.03% |
GPT-Neo 2.7B | 0.7165 | 5.646 | 11.39 | 5.626 | 62.22% | 56.50% | 42.73% |
GPT-3 2.7B | ----- | ----- | ----- | 4.60 | 67.1% | 62.3% | 62.8% |
Модель и размер | MathQA | PubMedQA | Piqa |
---|---|---|---|
GPT-Neo 125M | 22.78% | 55.10% | 63.06% |
GPT-3 125M | ----- | ----- | 64.6% |
GPT-Neo 350M | 23.45% | 53.80% | 65.07% |
GPT-3 350M | ----- | ----- | 70.2% |
GPT-3 Ada | 24.29% | 52.80% | 68.88% |
GPT-Neo 1.3B | 24.05% | 54.40% | 71.11% |
GPT-3 1.3B | ----- | ----- | 75.1% |
GPT-2 1.5B | 23.64% | 58.33% | Раздел ссылок) |
Режим документа является режимом по умолчанию.
Приведённая ниже команда токенизирует все файлы в приемлемых форматах в base_dir с использованием токенизатора gpt2 и сохраняет их в output_dir.
python3 create_tfrecords.py --mode documents --input_dir <base> --name <name> --output_dir <output> --use_gpt2_tokenizer --minimum_size <min>
input_dir
: Определяет папку, в которой находятся ваши данные. Скрипт закодирует все файлы, присутствующие в этой папке.name
: Имя выходных файлов будет name_i.tfrecords
, где i — номер файла.output_dir
: Где сохранить tfrecords.use_gpt2_tokenizer
: Использовать ли предварительно обученный токенизатор HuggingFace GPT2, в этом случае разделитель будет установлен на [50256].encoder_path
: если не используется предварительно обученный gpt2 токенизатор, используйте этот флаг, чтобы указать путь к вашему созданному файлу json токенизатора.separator
: Записанный в формате списка разделительный токен (ы) для вставки между документами (например, «[0]»). Будет зависеть от вашего кодировщика.minimum_size
: Минимальный размер (в токенах), который должен иметь документ, иначе он будет отброшен. Это то, что позже определит ваш параметр stitch
: stitch * minimum_size
всегда должно быть больше или равно n_ctx
(более подробную информацию см. в разделе параметров ссылки).4. Использование набора данных в модели
Чтобы использовать набор данных в модели, вы должны сначала зарегистрировать этот набор данных в папке ./configs/dataset_configs
. Сначала выберите имя файла с расширением .json
. Это имя файла будет служить идентификатором набора данных. Конфигурация должна быть заполнена следующим образом.
Если у вас есть набор данных, закодированный с использованием предварительно обученного токенизатора gpt2, вы можете указать это так:
{
"n_vocab": 50257,
"path": "gs://neo-datasets/openwebtext-documents/openwebtext_*.tfrecords",
"eval_path": "gs://neo-datasets/openwebtext-documents/openwebtext_*.tfrecords",
"tokenizer_is_pretrained": true,
"tokenizer_path": "gpt2"
}
или если вы обучили пользовательский токенизатор, например так:
{
"n_vocab": 32768,
"path": "./path/to/your/*.tfrecords",
"eval_path": "./path/to/your/eval/*.tfrecords",
"tokenizer_path": "./path/to/your/byte-level-bpe.tokenizer.json"
}
Наконец, в конфигурации вашей модели добавьте имя файла, которое вы создали выше, в массив datasets
.
<dataset id>
будет именем файла без расширения .json
, которое вы создали ранее.
"datasets": [[<dataset id>, <stitch>, <datatype>, <weight>]] # datasets key определяет во время выполнения, как каждый набор данных обрабатывается для обучения
5. Выберите конфигурацию модели
После настройки наборов данных найдите подходящую конфигурацию в /configs
.
Здесь мы используем модель размера GPT3-XL в качестве примера, но в ./configs
есть много других, все из которых имеют краткие сводки в разделе «Доступные конфигурации».
Всё, что вам нужно сделать, это отредактировать идентификатор набора данных, как описано выше, и отредактировать model_path
(где будут сохранены журналы и контрольные точки), чтобы он указывал на облачное хранилище, к которому у вас есть доступ для записи (или локальный путь, если используются графические процессоры).
{
"n_head": 32,
"n_vocab": 50257,
"embed_dropout": 0.1,
"lr": 0.0002,
"lr_decay": "cosine",
"warmup_steps": 3000,
"beta1": 0.9,
"beta2": 0.95,
"epsilon": 1e-8,
"opt_name": "adam",
"weight_decay": 0.1,
"train_batch_size": 512,
"attn_dropout": 0.1,
"train_steps": 286150,
"eval_steps": 0,
"predict_steps": 1,
"res_dropout": 0.1,
"eval_batch_size": 128,
"predict_batch_size": 1,
"iterations": 2500,
"n_embd": 2048,
"datasets": [["your_dataset_name", 25, "documents_random", 1.0]],
"model_path": "gs://neo-models/GPT3_XL",
"n_ctx": 2048,
"n_layer": 24,
"scale_by_depth": true,
"scale_by_in": false,
"attention_types" : [[["global"],24]],
"mesh_shape": "x:128,y:2",
"layout": "batch:x,memory_length:y,embd:y",
"activation_function": "gelu",
"recompute_grad": true,
"gradient_clipping": 1.0,
"tokens_per_mb_per_replica": 2048
}
6. Запуск обучения
python3 main.py --model <your_config_name> --steps_per_checkpoint <n> --tpu <tpu-name>
``` **Mixture of Experts**
- `moe_layers`: список номеров слоёв, к которым будет добавлен слой смеси экспертов (mixture of experts). Например: `[2, 4, 6, 8, 10, 12]`. Экспериментально было установлено, что хорошо работает слой moe для каждых двух слоёв самовнимания.
- `moe_params`: словарь дополнительных kwargs для передачи в слой moe. Например:
`{"moe_dropout_rate": 0.0 }`
**Экспериментальные функции**
- `axial_pos_emb_`: если верно, использует осевое позиционное встраивание.
- `mlp_glu`: если верно, используется вариант линейного блока с управляемым элементом слоёв feed forward.
- `scalenorm`: если верно, вместо layernorm используется scalenorm.
- `rezero`: если верно, вместо layernorm используется rezero.
- `num_mem_kv`: добавляет значения памяти / ключа из статьи «all-attention». Параметр — это целое число с количеством желаемых значений памяти/ключа.
- `macaron`: если верно — использует трансформатор macaron для каждого слоя блока.
## TODO:
- [x] завершить документацию;
- [ ] обновить конфиги.
## Цитирование GPT-Neo
Если вы нашли GPT-Neo полезным в своей работе, вы можете сослаться на этот репозиторий следующим образом:
@software{gpt-neo, author = {Black, Sid and Gao, Leo and Wang, Phil and Leahy, Connor and Biderman, Stella}, title = {{GPT-Neo: Large Scale Autoregressive Language Modeling with Mesh-Tensorflow}}, month = mar, year = 2021, note = {{If you use this software, please cite it using these metadata.}}, publisher = {Zenodo}, version = {1.0}, doi = {10.5281/zenodo.5297715}, url = {https://doi.org/10.5281/zenodo.5297715} }
Номер версии должен быть заменён номером версии, которую вы используете, а год соответствует релизу проекта с открытым исходным кодом.
Если вас интересует цитирование моделей GPT-Neo, обученных на The Pile, мы также будем признательны за цитирование:
@article{gao2020pile, title={The Pile: An 800GB Dataset of Diverse Text for Language Modeling}, author={Gao, Leo and Biderman, Stella and Black, Sid and Golding, Laurence and Hoppe, Travis and Foster, Charles and Phang, Jason and He, Horace and Thite, Anish and Nabeshima, Noa and others}, journal={arXiv preprint arXiv:2101.00027}, year={2020} }
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )