VKВлад КуликовОткрытые лекции
Современные LLM13 / 20

Модуль 13. SFT и работа с данными

Сначала попробуйте решить упражнение. Ответы, подробные решения и проектные ориентиры раскрываются отдельно и сохраняют своё состояние при переключении RU/EN.

Скачать файлы курса (.zip) 2588,1 КБ

Архив содержит файлы на обоих языках и вспомогательные материалы с сохранением структуры каталогов.

У1. Метки после шаблона диалога

Содержимое system/user/assistant занимает 12/8/20 токенов, служебная часть каждого сообщения — 5 токенов, а перед диалогом стоит BOS. Посчитайте число обучаемых токенов при функции потерь только по ответу ассистента, если завершающий токен ответа входит в цель.

Показать ответ и решение

Решение. BOS добавляет 1 токен, три служебные оболочки сообщений — 3⋅5=153\cdot5=15, а содержимое — 12+8+20=4012+8+20=40. Поэтому полная длина равна 1+15+40=561+15+40=56. При assistant-only loss метки system, user и их служебных токенов, а также заголовок ассистента, заменяются на -100. В целевой части остаются 20 токенов ответа и его EOT: 21 токен, или 21/56=37.5%21/56=37.5\%. Важно получить границу целевой части уже после применения реального chat template, а не угадывать её по исходным строкам.

У2. Упаковка FFD

Упакуйте в контейнеры ёмкости 2048 последовательности

[403,527,315,180,267,165,425,1347,259,230,626,556,443,174,392,754,120,267,72,126,76,326,128,514] алгоритмом First-Fit Decreasing. Сравните утилизацию с отдельным дополнением каждого примера до 2048.

Показать ответ и решение

Решение. FFD сначала сортирует длины по убыванию и помещает каждую в первый уже созданный контейнер, где она помещается. Получаются корзины:

text
[1347, 626, 72]                  = 2045
[754, 556, 527, 180]            = 2017
[514, 443, 425, 403, 259]       = 2044
[392, 326, 315, 267, 267, 230,
 174, 76]                        = 2047
[165, 128, 126, 120]             = 539

Сумма полезных длин — 8692. Отдельное дополнение использует 24⋅204824\cdot2048 позиций и даёт 8692/(24⋅2048)=17.684%8692/(24\cdot2048)=17.684\%. FFD использует пять строк: 8692/(5⋅2048)=84.883%8692/(5\cdot2048)=84.883\%. Число строк фиксированной длины уменьшается в 4.8 раза, но реальный выигрыш времени нужно измерять; между упакованными примерами должна стоять маска внимания с учётом границ примеров.

У3. Вычисления и LoRA

Воспроизведите четыре сценария из §§7, 10, 11 и 16. Для модели 8,03B оцените SFT на 200 тыс. примеров средней длиной 1200 токенов в течение трёх эпох: найдите FLOP, время на одном ускорителе с пиком 990 TFLOP/s и MFU 0,4, затем отношение к претрейну той же модели на 15 трлн токенов.

Для независимых попыток с ppass=0.3p_{\mathrm{pass}}=0.3 вычислите покрытие best-of-NN при N=1,4,8,16N=1,4,8,16. Отдельно оцените FLOP и время одного прохода 32B-модели по 1000 трассам длиной 9000 токенов, используя восемь ускорителей с теми же пиком и MFU. Наконец, найдите число параметров LoRA для 32 слоёв, d=4096d=4096, dkv=1024d_{kv}=1024, r=16r=16 и проекций q/k/v/o, их долю от базы 8,03B и объём состояний при 16 байтах на обучаемый параметр. Объём выразите в MiB.

Показать ответ и решение

Решение. За эпоху проходит 200000⋅1200=240200000\cdot1200=240 млн токенов, за три — D=720D=720 млн. По правилу C≈6NDC\approx6ND:

CSFT=6⋅8.03B⋅720M=3.46896⋅1019 FLOP.C_{SFT}=6\cdot8.03\text{B}\cdot720\text{M}=3.46896\cdot10^{19}\ \text{FLOP}.

Деление на 990⋅1012⋅0.4990\cdot10^{12}\cdot0.4 FLOP/s даёт 24.33 часа; заданный претрейн на 15 трлн токенов примерно в 20 833 раза больше. Для независимых попыток best-of-NN покрытие равно 1−(1−0.3)N1-(1-0.3)^N: 0.3000, 0.7599, 0.9424, 0.9967 при N=1,4,8,16N=1,4,8,16.

Сценарий 32B содержит 1000⋅9000=91000\cdot9000=9 млн токенов, поэтому 6⋅32B⋅9M=1.728⋅10186\cdot32\text{B}\cdot9\text{M}=1.728\cdot10^{18} FLOP; на восьми заданных ускорителях это 9.09 минуты.

Для LoRA матрица dout×dind_{out}\times d_{in} добавляет r(din+dout)r(d_{in}+d_{out}) параметров. На слой q/o дают по 16(4096+4096)16(4096+4096), k/v — по 16(4096+1024)16(4096+1024); итого 425 984 на слой и 13 631 488 на 32 слоя (0.1698% базы). При учебных 16 байт параметрических состояний на параметр это 208 MiB.

У4 [проект]

Начните с диалогов первого демо на CPU: добавьте второй ход и наблюдение инструмента, сохраните обучаемыми только выбранные действия ассистента. Сравните отдельное и упакованное исполнение по логитам, сумме потерь и градиентам. Затем намеренно разрешите связь между примерами и найдите расхождение. Необязательное расширение — закрепить официальный токенизатор и chat_template небольшой модели и повторить проверку границ по реальным ID.

Демо и критерии проекта

Демо к этому проектному упражнению: русскоязычный демонстрационный ноутбук модуля 13, раздел «Демо 1». Он показывает компактный воспроизводимый пример на малых данных, а не готовое решение полномасштабного проекта.

У5 [проект]

Во втором демо измените истинный ранг обновления и число обучающих примеров. Сравните полное обновление и LoRA по числу параметров и ошибке на отложенных входах; добавьте несколько начальных состояний генератора. Объясните разницу между ограничением ранга и ошибкой конечной оптимизации. Необязательное расширение переносит сравнение на малые наборы проверяемых решений и многоходовых инструментальных диалогов с одной базовой моделью. В нём измеряются также время и память, а для синтетики сохраняются происхождение и решение верификатора.

Демо и критерии проекта

Демо к этому проектному упражнению: русскоязычный демонстрационный ноутбук модуля 13, раздел «Демо 2». Он показывает компактный воспроизводимый пример на малых данных, а не готовое решение полномасштабного проекта.