Disclaimer: Это не официальная реализация GPT2! Я сделал все возможное, чтобы следовать спецификациям оригинальной модели GPT2 как можно точнее, но будьте предупреждены, что я не смог воспроизвести полную производительность оригинальной модели с помощью этого кода. Я не знаю, почему это происходит, я не смог найти баг, который мог бы вызывать это.
Реализация обучения для GPT2 с поддержкой как GPU, так и TPU. Скрипты для датасета немного костыльные и, вероятно, потребуют адаптации под ваши нужды.
Для GPU:
pip3 install tensorflow-gpu regex
Для TPU:
pip3 install tensorflow regex google-api-python-client oauth2client
Для загрузки моделей:
pip3 install requests tqdm
Для генерации датасета (в дополнение к Tensorflow):
pip3 install ftfy tqdm newspaper3k
Если вы хотите использовать мои модели, я в настоящее время предлагаю "117M", "PrettyBig" и "1.5B". 117M был обучен на одном v2 TPU в течение недели (вероятно, меньше, чем оригинальная модель OpenAI), PrettyBig немного больше 345M и был обучен на v2-256 pod в течение недели. Поскольку OpenAI выпустила свою модель, я теперь также выпустил свою (менее совершенную) модель 1.5B, которая была обучена на v3-512 pod в течение недели.python3 download_model.py PrettyBig
Это создаст два каталога, один с именем модели и другой с именем "encoder". Измените параметры "model_dir" и "encoder_path" в соответствующем .json файле, чтобы указать на эти пути соответственно.
Если вам нужен только encoder, используйте:
python3 download_model.py encoder
Чтобы предсказать, вы можете либо передать подсказку напрямую в командной строке, либо иметь её прочитанной из файла. (Это полезно для подсказок, которые включают новые строки) Текст выводится в консоль и в файл, указанный в параметре "predict_path". Для работы вам потребуется checkpoint модели и копия BPE encoder в доступном месте. (Измените параметры "model_dir" и "encoder_path" в .json) Из командной строки:
python3 main.py --model Your-Model.json [--top_k Top-K-Truncation] --predict_text "Привет! Меня зовут"
Из файла:
python3 main.py --model Your-Model.json [--top_k Top-K-Truncation] --predict_file input.txt
Необязательный параметр top_k заставляет модель учитывать только top k наиболее вероятных токенов на каждом шаге. Установка этого параметра примерно на 40 обычно приводит к лучшим результатам, но с меньшим разнообразием.
Предсказание на TPU не поддерживается.
Чтобы обучить модель, определите её параметры в файле .json (см. примеры) и затем просто вызовите
python3 main.py --model Your-Model.json [--tpu Your-TPU-Name]
Использование TPU является необязательным, модель работает хорошо и на GPU без каких-либо изменений. (Примечание: Оценка не работает на TPU-подах и должна быть закомментирована)Это предполагает, что у вас есть версия корпуса OpenWebText, хранящаяся в доступном месте. Если у вас её нет, см. ниже, как сгенерировать свою собственную версию.
GPT2 обучается на корпусе webtext, который представляет собой практически все веб-сайты, связанные с Reddit с минимумом 3 Karma. Поскольку база данных огромна и содержит много материала, защищённого авторскими правами, я не могу предоставить её для загрузки здесь. Вместо этого я опишу, как я её получил. Будьте осведомлены, что мне пришлось потратить около 500€ на облачные вычислительные ресурсы для загрузки и обработки всего этого, но я не утверждаю, что был оптимально эффективен.
base_dir = "/home/connor/my_text_dir" # Путь к папке, где находятся ваши файлы .txt
files_per = 175000 # Количество txt файлов, которые нужно поместить в один tfrecord, не слишком важно
name = "my-custom-data" # Имя выходных файлов будет name_i.tfrecords, где i — номер файла
output_dir = "/home/connor/output" # Папка для хранения .tfrecords файлов
log_dir = "logs" # Здесь будут сохранены некоторые логи для поддержки перезапуска, если кодировка была прервана
files = glob.glob(os.path.join(base_dir, "**/*.txt")) # Это должно привести к списку путей ко всем вашим txt файлам
processes = 64 # Количество процессов кодирования
encoder_path = "/home/connor/encoder" # Путь к файлам кодировщика
minimum_size = 128 # Минимальная длина (в BPE токенах) файла, который разрешено иметь, иначе файл будет отброшен.
return bpe_text(params["batch_size"], files, amount=params["n_ctx"], iterations=params["iterations"], stitch=9, batch=True)
4. Зарегистрируйте вашу новую функцию ввода в *main.py*.
```python
inputs = {
"openwebtext": openwebtext, # Стандартный ввод OpenWebtext
"openwebtext_longbiased": openwebtext_longbiased, # OpenWebtext с предпочтением к более длинным (>512 токенов) примерам
"openwebtext_long": openwebtext_long, # Openwebtext, который показывает только длинные примеры
"my_input": my_input,
}
[...]
"iterations": 500,
"n_embd": 768,
"input": "my_input",
"model": "GPT2",
[...]
Поскольку передача двадцати с лишним параметров через командную строку была бы утомительной, вы передаете все параметры модели в файле .json. Обратите внимание, что любые пути поддерживают пути Google Storage и должны быть gs:// путями, если вы работаете на TPU.Значения, которые вы наверняка захотите изменить:
Параметры обучения:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )