В этом репозитории хранится копия nanoGPT с нуля. Коммиты git специально сохранялись пошаговыми и чистыми, чтобы можно было легко просмотреть историю коммитов git и увидеть, как она строится медленно. Кроме того, на YouTube есть сопроводительная видеолекция, где вы можете увидеть, как я представляю каждый коммит и по ходу дела объясняю его части.
По сути, мы начинаем с пустого файла и работаем над воспроизведением модели GPT-2 (124M). Если у вас больше терпения или денег, код также может воспроизвести модели GPT-3. Если модель GPT-2 (124M), вероятно, тренировалась довольно давно (2019 год, ~5 лет назад), то сегодня ее воспроизведение — это вопрос ~1 часа и ~10 долларов. Если вам его недостаточно, вам понадобится облачный графический процессор, для этого я рекомендую Lambda.
Обратите внимание, что GPT-2 и GPT-3, а также обе простые языковые модели, обучены на интернет-документах, и все, что они делают, это «мечтают» интернет-документы. Итак, этот репозиторий/видео не охватывает тонкую настройку чата, и вы не можете общаться с ним так же, как с ChatGPT. Процесс тонкой настройки (хотя концептуально он довольно прост — SFT заключается в замене набора данных и продолжении обучения) следует после этой части и будет рассмотрен позже. На данный момент это то, что говорит модель 124M, если вы предложите ей «Привет, я языковая модель» после 10B токенов обучения:
Hello, I'm a language model, and my goal is to make English as easy and fun as possible for everyone, and to find out the different grammar rules
Hello, I'm a language model, so the next time I go, I'll just say, I like this stuff.
Hello, I'm a language model, and the question is, what should I do if I want to be a teacher?
Hello, I'm a language model, and I'm an English person. In languages, "speak" is really speaking. Because for most people, there's
И после 40B жетонов обучения:
Hello, I'm a language model, a model of computer science, and it's a way (in mathematics) to program computer programs to do things like write
Hello, I'm a language model, not a human. This means that I believe in my language model, as I have no experience with it yet.
Hello, I'm a language model, but I'm talking about data. You've got to create an array of data: you've got to create that.
Hello, I'm a language model, and all of this is about modeling and learning Python. I'm very good in syntax, however I struggle with Python due
Ржу не могу. В любом случае, как только видео выйдет, здесь также будет место для часто задаваемых вопросов, а также место для исправлений и ошибок, которых, я уверен, будет немало :)
Для обсуждений и вопросов используйте вкладку «Обсуждения», а для более быстрого общения загляните в мой Discord Zero To Hero, канал #nanoGPT :
Воспроизведем лекцию на YouTube GPT-2 (124M)
Незначительная очистка: мы забыли удалить register_buffer
смещения, как только переключились на флэш-внимание, исправлено в недавнем PR.
В более ранней версии PyTorch могут возникнуть трудности с преобразованием uint16 в long. Внутри load_tokens
мы добавили npt = npt.astype(np.int32)
, чтобы использовать numpy для преобразования uint16 в int32 перед преобразованием в тензор факела, а затем преобразованием в long.
Функция torch.autocast
принимает arg device_type
, которому я упрямо пытался просто передать device
надеясь, что оно работает нормально, но PyTorch на самом деле действительно хочет только тип и создает ошибки в некоторых версиях PyTorch. Итак, мы хотим, например, чтобы устройство cuda:3
было разделено до cuda
. В настоящее время устройство mps
(Apple Silicon) станет процессором device_type
, я не на 100% уверен, что это предполагаемый способ PyTorch.
Как ни странно, но model.require_backward_grad_sync
на самом деле используется как при прямом, так и при обратном проходе. Линия перемещена вверх, чтобы она также применялась к пасу вперед.
Для получения дополнительных запусков производственного уровня, очень похожих на nanoGPT, я рекомендую просмотреть следующие репозитории:
Массачусетский технологический институт