Масштабирование: от игрушечной модели к GPT-2

Урок 13 из 16 курса «Нейросети с нуля: по открытому коду Андрея Карпати»: неофициальный курс AI University по открытому коду (MIT). Урок входит в платный доступ; первые уроки курса бесплатно.

О чём урок

Этот урок закрывает дистанцию между компактной учебной моделью из предыдущих уроков и настоящей GPT-2. Код не меняется концептуально: тот же model.py, тот же цикл обучения, но вокруг него появляется инфраструктура, без которой 124 миллиона параметров и девять миллиардов токенов просто не поместятся в разумное время обучения. После этого урока вы будете понимать, откуда в конфигах nanoGPT берутся конкретные числа, как устроено распределённое обучение на нескольких GPU, за счёт чего ускоряется работа на современном железе, и как загрузить готовые веса GPT-2, чтобы дообучить их на своём тексте, не обучая модель с нуля.

Неофициальный курс AI University по открытому коду (MIT). В уроке приводится код из karpathy/nanoGPT © Andrej Karpathy, лицензия MIT; комментарии переведены на русский, объяснения написаны нашей командой. Курс не связан с автором кода и не одобрен им.

В уроке про shakespeare_char весь датасет умещался в один текстовый файл и кодировался посимвольно. Для обучения полноразмерной GPT-2 nanoGPT использует датасет OpenWebText: это открытая попытка воссоздать выборку текстов, на которой OpenAI обучала оригинальную GPT-2. Подготовка данных для такого объёма требует другого подхода к токенизации и записи на диск.

Здесь вместо посимвольного словаря используется tiktoken с кодировкой gpt2, то есть тот же BPE-токенизатор, которым обучалась оригинальная модель (ему посвящён следующий блок уроков о minbpe). Обработка документов распараллелена через num_proc: токенизация восьми миллионов документов на одном ядре заняла бы неприемлемо долго.

Каждый документ превращается в последовательность целых чисел и получает в конце токен eot (end of text), который отмечает границу между документами. Модель, обученная на такой последовательности, учится воспринимать этот токен как сигнал «начинается новый, не связанный с предыдущим текст».

Результат токенизации не хранится как список списков: все документы конкатенируются в один гигантский массив и записываются на диск в бинарном виде через np.memmap, порциями по 1024 шарда, чтобы не держать весь массив в оперативной памяти разом.

Тип uint16 выбран не…

План урока

  1. От файла в несколько килобайт к девяти миллиардам токенов
  2. Бюджет батча: сколько токенов видит модель за один шаг
  3. Несколько GPU как один: DDP в train.py
  4. Выжимаем максимум из железа
  5. Чужие веса в своей модели
  6. Законы масштабирования и реалистичные ожидания
  7. Попробуйте сами
  8. Итоги

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Полезные гиды