TinyTorch: собери свой PyTorch с нуля за 20 модулей

TinyTorch: собери свой PyTorch с нуля за 20 модулей

27 000 звёзд на GitHub и курсы в 50 с лишним университетах. Столько собрал проект, который пять лет почти никто не замечал. TinyTorch это бесплатный открытый курс, где вы пишете рабочий ML-фреймворк с нуля, от тензоров до трансформеров, на чистом Python и на API самого PyTorch. Двадцать модулей, запуск на ноутбуке с 4 ГБ памяти, без видеокарты.

Интересна здесь не популярность сама по себе, а аргумент, из-за которого проект появился. Команда Harvard ML Systems утверждает простую вещь: PyTorch дорос до того момента, когда ему нужна учебная версия. Как Unix однажды понадобился MINIX, а компиляторам понадобился Tiger.

Что такое TinyTorch

TinyTorch это открытая учебная программа, в которой ML-фреймворк пишется с нуля вручную: тензоры, autograd, слои, оптимизаторы, внимание. Двадцать модулей, четыре уровня сложности, Jupyter-ноутбуки с вырезанными ключевыми местами, которые нужно заполнить. Код под MIT, учебные материалы под CC BY-SA 4.0.

Если коротко, это PyTorch, разобранный на детали, но не для чтения, а для сборки.

Зачем фреймворку учебная версия

У этой истории есть готовый шаблон, и он повторяется в системном программировании уже полвека. Unix разросся до размеров, которые не помещаются в голову, поэтому Эндрю Таненбаум написал MINIX: маленький настолько, что студент может его закончить. Из MINIX, как известно, вырос Linux.

С компиляторами то же самое. LLVM и GCC это десятилетия отличной инженерии, почти нечитаемые как первый текст, поэтому курсы учат компилятору Tiger. MIT переписал xv6 с x86 на RISC-V ровно по этой причине: убрать историческую сложность и обнажить чистые абстракции. До всех них были Nachos, Pintos и SICP.

Ни один из этих проектов не пытался заменить продакшен-систему. Все они учили тому, что продакшен-системы вынуждены прятать.

Почему это важно для самого PyTorch, а не только для студентов

Есть версия этого аргумента, которая волнует только преподавателей. Авторы TinyTorch настаивают, что их версия другая.

Любой фреймворк держится на небольшой прослойке людей, которые умеют рассуждать о нём изнутри. Тех, кто замечает утечку памяти в кеше тензоров, знает, когда gradient checkpointing стоит пересчёта, и может назвать узкое место медленного обучения до того, как откроет профайлер.

Сама по себе эта прослойка не растёт. Сейчас большинство приходит к внутренностям PyTorch случайно: что-то сломалось достаточно сильно, чтобы заставить разобраться. Люди учат кодовую базу под дедлайном, снаружи внутрь, в том порядке, который навязал баг. Результат знаком каждому, кто онбордил системного инженера: компетентность с дырами.

Сборка меняет точку входа, причём необратимо. После того как вы сами реализовали autograd, вы уже не развидите вычислительный граф. После того как вы сами профилировали аллокации памяти, вы не разучитесь видеть их цену.

Студент, который написал backward() своими руками, сам выделил буферы момента и дисперсии и увидел, как память Adam вырастает втрое, приходит к настоящему autograd с уже загруженной мысленной моделью. Он читает продакшен-код как более сложную версию того, что понимает. Это дешевле в онбординге.

Неожиданной оказалась вторая половина: этого хотят компании. Команды используют TinyTorch как двух-трёхнедельный интенсив для новых сотрудников, как внутреннее обучение, растянутое на квартал, и как точечные воркшопы по отладке. Кто-то разбирает модуль 06 об autograd или модуль 12 о внимании именно потому, что это подсистема, которой он постоянно проигрывает.

Что внутри: двадцать модулей и четыре уровня

Курс построен вокруг CLI под названием tito и собран из Jupyter-ноутбуков, где самые сложные куски вырезаны под самостоятельную реализацию. Нужен Python и уверенное владение NumPy. Видеокарта, облачный аккаунт и предыдущий опыт в ML-системах не требуются.

Четыре уровня зависят друг от друга: нельзя перескочить к оптимизации, не собрав цикл обучения, который вы оптимизируете. Уровень Foundation укладывается в модуль на полсеместра, все двадцать модулей в семестровый курс на четыре кредита. При самостоятельном прохождении это от нескольких интенсивных недель до нескольких неспешных месяцев.

Три решения делают почти всю педагогическую работу.

Системы с первого дня. Модуль 01 отдаёт метод memory_footprint() раньше, чем умножение матриц. Студент узнаёт, что батч из 32 картинок ImageNet стоит 19 МБ, не из текста, а из вычисления. Позже он выясняет, что Adam требует примерно втрое больше памяти оптимизатора, чем SGD, потому что сам выделил эти буферы и сам их измерил.

Прогрессивное раскрытие. Класс Tensor остаётся чистым до модуля 05: никакой машинерии градиентов поверх раскладки данных и арифметики. Затем в модуле 06 появляется enable_autograd(), который прикручивает к уже понятному классу requires_grad, .grad и .backward(). Старый код продолжает работать.

Авторы честно признаются, что долго выбирали между этим подходом и наследованием. Победило runtime-патчинг: он сохраняет один класс Tensor на все двадцать модулей вместо двух, а момент, когда тензоры на глазах обретают новые способности, оказывается тем, что студенты запоминают. Плюс это повторяет PyTorch 0.4, где Variable влили в Tensor примерно по той же причине.

Сборка как проверка. Шесть исторических вех доказывают, что реализация работает: перцептрон Розенблатта 1958 года, кризис XOR 1969 года, возрождение обратного распространения в 1986-м, прорыв CNN в 1998-м, где сеть обязана взять 75% на CIFAR-10, трансформер 2017 года и в финале бенчмаркинг в стиле MLPerf. История тут для мотивации. Производительность на задаче нужна потому, что её подделать намного труднее, чем юнит-тест: ваш autograd корректен, раз сеть учится.

Веха открывается только тогда, когда модули под ней дают рабочую реализацию, так что таймлайн заодно служит трекером прогресса и доказательством корректности. Студенты воспроизводят 67 лет истории ML, запуская только собственный код.

Чего в TinyTorch нет

Сходство с PyTorch заканчивается на поверхности API. Внутри нет диспетчера, нет C++ и CUDA, нет JIT, нет ничего распределённого. И это медленно: чистый Python работает примерно от 100 до 10 000 раз медленнее PyTorch.

Эту медлительность авторы поначалу извиняли, а потом поняли, что она стала лучшей случайностью проекта. Когда Conv2d студента считает батч 97 секунд там, где PyTorch тратит 10 миллисекунд, аргумент в пользу векторизации перестаёт быть прочитанным и становится пережитым.

Откуда проект взялся и как вырос

TinyTorch начинался не как фреймворк, а как курс с проблемой. CS 249r запустился в Гарварде в 2020 году как аспирантский семинар по TinyML, и учебника к нему не существовало. Конспекты стали книгой. Книгу выложили открытым репозиторием, студенты и преподаватели начали присылать правки и главы, а к 2024 году она переросла исходные рамки TinyML: слишком много запросов пришло про обучение в масштабе. Книга распалась на два тома.

Дальше стало очевидно, что книги мало. Читать про autograd и реализовывать autograd дают разное знание, и только одно из них выживает при встрече с продакшен-багом. Так проект оброс конечностями: TinyTorch это ветка «сборка». Вокруг него теперь стоят лаборатории на Marimo для экспериментов с компромиссами, MLSys·im для моделирования производительности, аппаратные наборы под Arduino и Raspberry Pi, StaffML для подготовки к интервью и хаб для преподавателей со слайдами и силлабусами.

Карта сообщества показывает 682 участника в 92 институтах с момента запуска в декабре 2025 года. Самое интересное в ней, где именно кластеризуется рост: сильнее всего там, где труднее всего с доступом к GPU. Ровно для этого и строился порог доступности.

Дальше идёт часть, которую авторам слегка неловко описывать. Пять лет проект рос медленно: стабильно, сарафанным радио, по несколько сотен звёзд в год. В августе 2025-го в репозитории было около 2000 звёзд. В октябре кто-то, кого авторы никогда не встречали, выложил ссылку в X. Через две недели стало 5000. К декабрю перевалило за 10 000, сегодня больше 27 000 звёзд, больше 95 контрибьюторов и курсы в 50 с лишним университетах. Авторы не скрывают: они этого не проектировали. Один человек с охватом решил, что работа достойна репоста, и пять лет тихого накопления сдетонировали за одиннадцать месяцев.

Проект построен в Гарварде в рамках Machine Learning Systems, а сейчас Андреа поддерживает его из ETH Zurich, где оба автора работают. Передача учебной программы во второй институт, как они замечают, это первая честная проверка того, писали ли вы её для кого-то кроме собственной аудитории.

Четыре вывода, которые переносятся на другие проекты

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

Совпадайте с продакшен-API точно. Самое выгодное решение было отказаться изобретать собственный синтаксис. Каждый час, который студент тратит на перевод между вашим учебным API и настоящим, не покупает ему ничего. Совместимость API это жёсткое требование, а не приятная мелочь.

Определите аппаратный порог до списка фич. TinyTorch идёт на двухъядерном процессоре 2 ГГц с 4 ГБ памяти и без сети во время обучения, потому что в комплекте два маленьких офлайн-датасета: около 1000 серых цифр и 350 пар «вопрос-ответ» общим весом меньше 50 МБ. Это стоило поддержки GPU. Зато дало классы на Chromebook, пятилетние ноутбуки и университеты, чьи сетевые политики заблокировали бы всё остальное. Решите, кого вы готовы исключить, до старта: позже этот выбор становится слишком дорогим.

Инфраструктура для преподавателя это настоящее узкое место. Хороший контент не внедряют. Внедряют тот контент, который можно оценивать автоматически. Поэтому в проекте есть автогрейдинг на NBGrader с заблокированными тестами и разбалловкой, файл INSTRUCTOR.md с настройкой, рубриками и типичными студенческими ошибками, скрипты валидации вех и три модели интеграции: двадцать модулей как курс на четыре кредита, восемь как блок на полсеместра или уровень оптимизации отдельно как семинар по edge-вычислениям. На путь преподавателя нужно закладывать столько же, сколько на путь студента: именно преподаватель защищает выбор перед учебным комитетом, и без этого качество обучения не значит ничего.

Планируйте преемственность заранее. Академический открытый код умирает, когда PI переключается на другое. Авторы решают это открыто: обязательство по поддержке до 2027 года, цель по ревью пул-реквестов в две недели и переход управления в 2026-2027 годах с созданием совета преподавателей и письменным закреплением, кто и что берёт на себя. Устойчивость это не про то, чтобы работать больше, а про то, чтобы сделать себя заменимым, и у этого должен быть срок.

Что авторы сами пока не знают

TinyTorch в статусе preview, цель на готовность к аудитории к осени 2026 года. Ограничения тут полезнее чистого успеха.

Результаты обучения не измерялись. Дизайн опирается на конструктивизм, когнитивное ученичество, продуктивные провалы и пороговые концепции, плюс пятьдесят лет свидетельств, что сборка руками работает в системном образовании. Это сильная априорная посылка, но не результат. Контролируемых данных о том, что выпускники TinyTorch отлаживают продакшен-системы лучше остальных, у авторов нет, и получить их можно только если преподаватели реально запустят курс и расскажут, что вышло.

Область применения уже, чем амбиции. Один узел, только CPU, так что память и вычисления здесь разбираются хорошо, а про GPU-ядра, распределённое обучение и синхронизацию градиентов не рассказывается ничего. Параллельная загрузка данных и управление памятью GPU это единственная компетенция, которую авторы разметили и сознательно оставили пустой: сделать её правильно значит сломать порог в 4 ГБ. Это реальные дыры, и закрыть их могут люди, а не дорожная карта.

Часто задаваемые вопросы

Нужна ли видеокарта, чтобы пройти TinyTorch? Нет. Всё рассчитано на двухъядерный CPU с 4 ГБ оперативной памяти и работает офлайн во время обучения. Два встроенных датасета весят меньше 50 МБ, поэтому курс проходят даже на Chromebook и старых ноутбуках. Гибридного облака или платной подписки не требуется.

TinyTorch может заменить PyTorch в реальной работе? Нет, и цели такой нет. Внутри нет диспетчера, C++ и CUDA, нет JIT и распределённого обучения, а чистый Python работает в сотни и тысячи раз медленнее. Задача обратная: сделать внутренности продакшен-фреймворка понятными, а не заменить его.

Сколько времени занимает курс? Всё зависит от режима. Уровень Foundation укладывается в модуль на полсеместра, все двадцать модулей в семестр на четыре кредита. При самостоятельном прохождении люди тратят от нескольких интенсивных недель до нескольких месяцев. Компании используют его как интенсив на две-три недели для новых сотрудников.

С чего начать прямо сейчас? Установка в одну строку, всё работает локально:

curl -sSL mlsysbook.ai/tinytorch/install.sh | bash

Итог

TinyTorch это редкий случай, когда учебный проект не упрощает тему, а снимает с неё обёртки. Здесь нет GPU-ядер и распределённого обучения, зато есть memory_footprint() раньше умножения матриц, enable_autograd() в модуле 06 и проверка корректности через производительность сети, а не через юнит-тесты. Именно поэтому двадцать модулей оказались полезны не только студентам: команды берут их для онбординга и воркшопов по отладке.

Если вы давно хотите понять, что именно PyTorch делает под капотом, начните с одного уровня и дойдите до вехи. Код под MIT, материалы под CC BY-SA 4.0, форки и адаптации под свою программу приветствуются. А если вам важнее, чтобы такие проекты получали поддержку, поставьте звезду репозиторию Machine Learning Systems: для кафедры и фонда это не счётчик, а сигнал, что на открытой учебной программе безопасно строить курс.

← Все записи