1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-GPTNeo

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

GPT Neo

DOI arXiv

По состоянию на август 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 )

Вы можете оставить комментарий после Вход в систему

Введение

GPT Neo использует библиотеку mesh-tensorflow для реализации языковых моделей серии GPT, включая GPT-2 и GPT-3. Заявляется о возможности расширения до полного размера GPT-3. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-GPTNeo.git
git@api.gitlife.ru:oschina-mirror/mirrors-GPTNeo.git
oschina-mirror
mirrors-GPTNeo
mirrors-GPTNeo
master