Как не провалить лайвкодинг по машинному обучению с TorchCode
Представьте ситуацию: вы проходите собеседование в топовую AI-лабораторию или бигтех. Интервьюер открывает пустую доску или пустой ноутбук и просит: «Реализуйте Softmax. А теперь LayerNorm. И давайте сверху накидаем Multi-Head Attention, только без использования готовых модулей из torch.nn».
В этот момент многие плывут. Одно дело — вызывать nn.Transformer из библиотеки, и совсем другое — помнить формулы, учитывать численную стабильность и понимать, куда именно вставлять маску в каузальном аттеншене. Чтение статей на arXiv тут помогает мало, нужна мышечная память. Именно для этого создали TorchCode.
Что это за проект
TorchCode — это интерактивный тренажер для ML-инженеров. Автор проекта duoan собрал 40 задач, которые чаще всего встречаются на технических интервью в компаниях уровня Meta, Google DeepMind или OpenAI. Если коротко, это LeetCode, но вместо разворота бинарных деревьев вы реализуете операторы и архитектуры нейросетей на чистом PyTorch.
Проект подкупает своей простотой. Вам не нужен кластер с GPU или сложная настройка окружения. Всё работает на CPU, запускается одной командой в Docker или открывается прямо в браузере через Google Colab или Hugging Face Spaces.
Как устроена практика
В репозитории лежит набор Jupyter-ноутбуков, разделенных на шаблоны и решения. Процесс выглядит максимально приземленно:
- Открываете пустой шаблон (например,
05_attention.ipynb). - Читаете описание задачи.
- Пишете код, используя базовые тензорные операции.
- Запускаете встроенный «судья» (judge), который проверяет результат.
Интересная деталь: автопроверка здесь не просто сравнивает числа. Библиотека torch-judge проверяет корректность вычислений через torch.allclose, верифицирует прохождение градиентов через autograd и смотрит, как ваш код ведет себя на краевых случаях.
Какие задачи придется решать
Список проблем покрывает почти всё, что сейчас актуально в индустрии. Весь набор разбит на логические блоки.
Базовые операции
Сюда входят вещи, которые кажутся элементарными, пока не начнешь их писать с нуля. Реализация ReLU, Softmax с учетом защиты от переполнения (log-sum-exp trick), Dropout и различные виды нормализации (Batch, Layer, RMSNorm). Эти задачи помогают набить руку в манипуляциях с размерностями тензоров.
Механизмы внимания
Это сердце современных LLM, и на собеседованиях их гоняют нещадно. В TorchCode есть задачи на:
- Scaled Dot-Product Attention.
- Multi-Head Attention.
- Causal Attention (тот самый вариант для GPT с маскированием).
- Grouped Query Attention (как в LLaMA 2).
- Flash Attention (упрощенная реализация идеи с тайлингом).
Архитектуры и оптимизация
Когда разберетесь с кирпичиками, можно переходить к сборке целых блоков. В списке есть полноценный GPT-2 Block, реализация LoRA (Low-Rank Adaptation), Mixture of Experts и даже квантование INT8. Для тех, кто метит в сторону обучения моделей, добавлены задачи по написанию оптимизатора Adam и планировщика Cosine LR.
Техническая сторона вопроса
Архитектура проекта минималистична. Это Docker-контейнер с JupyterLab, внутри которого предустановлен PyTorch и кастомное расширение для интерфейса.
Кстати, если вы не хотите тащить к себе весь репозиторий, можно просто поставить пакет torch-judge через pip:
!pip install torch-judge
from torch_judge import check, status
check("relu")
Это удобно для быстрой проверки своих гипотез в любом окружении. Автор также добавил кнопку «Reset» в интерфейс Jupyter — она откатывает ноутбук к исходному пустому состоянию, чтобы одну и ту же задачу можно было прорешивать несколько раз до автоматизма.
Кому это пригодится
В первую очередь — тем, кто активно ищет работу в сфере Deep Learning. Пройтись по списку задач за неделю до интервью — отличный способ освежить в памяти формулы и не тупить над torch.transpose или torch.reshape перед камерой.
Во вторую — студентам и разработчикам, которые хотят перейти из обычного бэкенда в ML. Понимание того, как LayerNorm считает среднее по разным осям, дает гораздо больше, чем простое использование черного ящика из библиотеки.
Проект живой, активно набирает звезды и дополняется новыми задачами (недавно добавили GRPO и PPO Loss, что актуально на волне интереса к RLHF). Если вы чувствуете, что «плаваете» в реализации трансформеров или путаете параметры в Adam, TorchCode — это, пожалуй, самый быстрый способ закрыть пробелы.
Единственный минус, который я заметил: некоторые задачи на «Hard» могут показаться слишком сложными без предварительного чтения оригинальных статей. Но для этого в репозитории всегда лежат эталонные решения, которые можно изучить после неудачной попытки.
Попробовать тренажер можно на Hugging Face Spaces или просто склонировав репозиторий. Удачного кодинга!
