О чём урок
Этот урок закрывает дистанцию между компактной учебной моделью из предыдущих уроков и настоящей 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 выбран не…
План урока
- От файла в несколько килобайт к девяти миллиардам токенов
- Бюджет батча: сколько токенов видит модель за один шаг
- Несколько GPU как один: DDP в train.py
- Выжимаем максимум из железа
- Чужие веса в своей модели
- Законы масштабирования и реалистичные ожидания
- Попробуйте сами
- Итоги
Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.