Суть проекта: Zero-dependency на C++17
TinyTorch — это реализация фреймворка для обучения нейросетей с нуля, написанная исключительно на C++17. Ключевая особенность проекта: полное отсутствие зависимостей от внешних библиотек глубокого обучения (таких как CUDA Toolkit для базовых вычислений, хотя опционально он их поддерживает). Это делает его идеальным учебным полигоном для понимания внутренней механики автоматического дифференцирования и вычислительных графов.
Архитектура строится на динамическом вычислительном графе: каждая операция с Tensor создает узел Function, записывающий прямой проход и правило обратного распространения градиентов. Метод backward() обходит этот DAG в обратном топологическом порядке, применяя цепное правило.
Ключевые возможности и совместимость
Несмотря на «учебный» статус, проект предлагает продвинутый функционал, привычный пользователям PyTorch:
- API-совместимость: Использование знакомых классов
nn.Module,Optimizer,DataLoader. - Аппаратная поддержка: Работа на CPU (с ускорением через BLAS) и GPU (через CUDA).
- Смешанная точность: Поддержка форматов FP16, FP32 и BF16.
- Распределенное обучение: Поддержка multi-machine, multi-GPU через NCCL.
- Инференс LLM: Реализована поддержка моделей LLaMA, Qwen и Mistral.
Технические требования и сборка
Проект использует CMake для сборки. Для полноценной работы с GPU требуются CUDA Toolkit 11.0+ и NCCL. Ниже приведена таблица конфигурационных опций сборки:
| Опция CMake | Значение по умолчанию | Описание |
|---|---|---|
| TINYTORCH_BUILD_EXAMPLES | ON | Сборка примеров (autograd, mnist, ddp и др.) |
| TINYTORCH_BUILD_TEST | OFF | Сборка модульных тестов |
| TINYTORCH_USE_CUDA | ON | Включить поддержку CUDA |
| TINYTORCH_USE_NCCL | ON | Включить поддержку распределенных вычислений NCCL |
Структура и примеры использования
Репозиторий содержит готовые примеры для каждого аспекта работы: от базового автодифференцирования до распределенного обучения (DDP). Для запуска примеров необходимо собрать проект в режиме Release:
mkdir build
cmake -B ./build -DCMAKE_BUILD_TYPE=Release
cmake --build ./build --config Release
После сборки исполняемые файлы доступны в папках examples/*/bin. Например, для обучения на MNIST используется команда ./tinytorch_example_mnist, а для распределенного обучения — ./tinytorch_example_ddp с передачей параметров local_rank, rank и world_size.
Почему это важно
TinyTorch закрывает нишу образовательных инструментов, которые не просто эмулируют синтаксис, а предоставляют прозрачный код для изучения принципов работы современных DL-фреймворков. Лицензия MIT позволяет свободно использовать код в коммерческих и учебных целях.
Источник: Github ↗
