Обучаем GPT с нуля
Собираем и обучаем GPT с нуля
В этой статье я собираю данные, строю языковую модель и обучаю её предсказывать следующее слово в последовательности. После fine-tuning это может выглядеть как {in: системный промпт} + {in: диалог оборвавшийся на каком то слове} + {out: прогноз следующего слова}
1. Скачиваем данные
Скачивание может занять дня 3 и не зависит от скорости вашего провайдера. Архив потребует 27Гб места на диске. Так что можно запустить скачивание заранее. В качестве датасета возьмем Проект Гутенберг содержащий более 50 000 книг и более чем 3*10**9 слов-токенов. Токены будут читаться случайными окнами и для HDD это может стать узким местом - так что лучше разместить датасет на NVME или в кеше RAM.
git clone https://github.com/pgcorpus/gutenberg.git
cd gutenberg
pip install -r requirements.txt
python get_data.py
Железо и параметры
- GPU: NVIDIA GeForce RTX 4090, 24 ГБ GDDR6X, лимит мощности 450 Вт, пиковая bf16 около 165 TFLOP/s, пропускная способность памяти около 1 ТБ/с
- CPU: Intel Core i7-6700K, 4 ядра / 8 потоков, 4,0–4,2 ГГц, Skylake 2015 года
- RAM: 50,4 ГБ
- Диски: 2 × NVMe WD Blue SN550 по 1 ТБ, HDD WD Purple 6 ТБ, на нём лежит датасет
- Материнская плата: ASUS PRIME H270-PRO, PCIe 3.0
- ОС и софт: Ubuntu 22.04.5, ядро 6.8, Python 3.11.7, PyTorch 2.10.0 с CUDA 12.8, драйвер 580.178, tiktoken 0.9.0, numpy 2.4.2
Выбор модели
Вместо gpt 3 я выбираю gpt 2 small, потому что отличаются они лишь объемом обучающих данных и размером модели. Архитектура та же. gpt 2 small можно обучить за пару суток на одной пользовательской видео карте. Качество будет конечно ниже, но после fine-tuning с ней уже можно будет вести разговор.
- GPT-3: 175 млрд параметров, 300 млрд токенов, 1.7 токенов на параметр
- Chinchilla: 70 млрд параметров, 1,4 трлн токенов, 20 токенов на параметр
- Llama 3 8B: 8 млрд параметров, 15 трлн токенов, 1 900 токенов на параметр
- Наша GPT-2 small: 124 млн параметров, 6,4 млрд токенов, 52 токенов на параметр
Chinchilla
- 2020, Январь - Openai, Каплан и др. Scaling Laws for Neural Language Models. Выгоднее растить модель, а не данные.
- 2020, Май - GPT-3 Построена ровно по этому рецепту: 175 млрд параметров, всего 300 млрд токенов.
- 2022, Март - DeepMind, Хоффманн и др., Training Compute-Optimal Large Language Models. Нашли ошибку у Каплана: он не подстраивал длину расписания learning rate под длину обучения, и из-за этого недооценивал пользу данных. Правильный ответ: Модель и данные надо растить одинаково, и оптимум около 20 токенов на параметр. Взяли бюджет вычислений своей модели Gopher, 280 млрд параметров на 300 млрд токенов, и на тот же бюджет обучили модель вчетверо меньше, 70 млрд параметров, но на 1,4 трлн токенов. Назвали Chinchilla, и она обошла Gopher на широком наборе задач. Отсюда “правило 20” и слово “Chinchilla-optimal”.
| Каплан 2020 | Хоффманн 2022 | |
|---|---|---|
| модель | , в раза больше | , в раза |
| данные | , в раза больше | , в раза |
Где C это бюджет вычислений в FLOPs, а размер модели по Каплану растёт как бюджет в степени 0,73
При претрейне модели, число токенов задается заранее, под него строится расписание learning rate, модель обучается согласно заданному бюджету.