Первоначально опубликовано на сайте cchinchilla.dev. Часть 6 книги «От кода к весам», серии из 12 частей, посвященной основам машинного обучения для инженеров. Часть 5 закончилась блоком и стопкой из двенадцати. GPT-2 — это этот стек плюс пять решений вокруг него. Это один КПП...
Первоначально опубликовано на сайте cchinchilla.dev. Часть 6 книги «От кода к весам», серии из 12 частей, посвященной основам машинного обучения для инженеров.
Часть 5 закончилась блоком и стопкой из двенадцати. GPT-2 — это этот стек плюс пять решений вокруг него. Его одна контрольная точка запускает две разные программы. Обучение оценивает всю последовательность за один вызов. Генерация, то, что обслуживание называет выводом, записывает по одному токену за раз, в цикле, и большая часть того, что ломается в производстве, ломается там.
Я снова загрузил небольшие веса OpenAI GPT-2 в model.py nanoGPT и запустил обе программы с одинаковыми весами. Затем я добавил в цикл кеш, присвоил веса bf16 и сравнил то, что получилось.
Пять решений вокруг стека
GPTConfig, model.py:108-116, умещается на одном экране: 1024 позиции, 12 блоков, 12 головок, ширина 768. В словарном поле указано 50 304, что в комментарии к этой строке называется заполнением, кратным 64, для скорости. Контрольная точка OpenAI имеет 50 257 строк, и ее загрузка устанавливает соответствующую конфигурацию. Вокруг этих цифр GPT-2 приняла пять решений, три из которых уже включены в эту серию.
Токенизатор представляет собой BPE на уровне байтов, часть 1: кодируется каждая строка, поэтому неизвестных токенов нет. Нормализация проводится до LN, часть 5.