cuda-nn: кастомный inference движок на Rust/Go/CUDA для MoE моделей | AiManual
AiManual Logo Ai / Manual.
19 Янв 2026 Инструмент

cuda-nn: как запустить MoE-модель на 6.9B параметров без PyTorch на Rust, Go и CUDA

Обзор cuda-nn — inference движка на Rust, Go и CUDA для запуска MoE моделей на 6.9B параметров без PyTorch. Сравнение с альтернативами, оптимизация ядер.

PyTorch надоел? Пора писать свой инференс-движок

Вы когда-нибудь запускали MoE-модель и думали: "Боже, сколько же лишнего кода здесь работает?" PyTorch, Transformers, Hugging Face — целый зоопарк зависимостей, который съедает половину VRAM еще до загрузки весов. А если нужна максимальная производительность? Жди месяц, пока оптимизации дойдут до основного репозитория.

cuda-nn — это ответ на вопрос "А что если отказаться от всего этого?" Движок написан с нуля на Rust, Go и нативных CUDA ядрах. Никакого PyTorch. Никакого Python. Только металл и математика.

Не ищите здесь удобства. cuda-nn — инструмент для тех, кто готов пожертвовать комфортом ради каждого дополнительного токена в секунду. Если вы привыкли к одной команде pip install, вам здесь будет больно.

Что умеет эта штука?

На бумаге — все то же самое, что и обычные фреймворки. На практике — совершенно другой уровень контроля.

  • Поддержка MoE архитектур — настоящих, а не эмуляции через PyTorch. Эксперты загружаются только когда нужны
  • MQA (Multi-Query Attention) — оптимизированные ядра для современных архитектур
  • Смешанная точность — FP16, BF16, даже экспериментальный MXFP4 (если вы прочитали нашу статью про MoE на RTX 4090, то знаете, о чем речь)
  • Потоковая обработка — генерация без остановок, пока хватает памяти
  • Мультиязычность API — Rust для ядра, Go для сервера, C-совместимый интерфейс для всего остального
💡
Ключевая особенность — отсутствие динамического выделения памяти во время инференса. Все буферы аллоцируются один раз при загрузке модели. Это дает предсказуемую производительность даже на длинных контекстах.

Сравнение: что вы теряете и что получаете

Давайте честно — зачем отказываться от проверенных инструментов?

Критерий PyTorch + Transformers cuda-nn
VRAM на 6.9B MoE ~14 ГБ (с оптимизациями) ~11 ГБ
Токенов/сек (RTX 4090) 45-60 70-85
Время до первого токена 2-3 секунды ~0.8 секунды
Поддержка моделей Почти все Только совместимые архитектуры
Порог вхождения Низкий Высокий (нужно знать CUDA)

Разница в 20-30 токенов в секунду — это не "немного лучше". Это разница между "можно пользоваться" и "приятно пользоваться". Особенно если вы запускаете модели на слабом железе, как в нашем гайде по Granite 4 Small.

Как это работает изнутри

Архитектура похожа на слоеный пирог, где каждый слой написан на подходящем языке.

1 Ядро на Rust

Rust отвечает за управление памятью и оркестрацию вычислений. Все веса модели живут здесь. Rust выбрали не для моды — его система владения гарантирует отсутствие гонок данных при асинхронной загрузке экспертов MoE.

2 CUDA ядра

Кастомные, ручной оптимизации. Особенно интересно реализовано MQA — вместо стандартного подхода с тремя матрицами Q, K, V используется одна общая для ключей и значений. Это экономит не только память, но и время на синхронизацию.

Если вы думаете о написании своих CUDA ядер, посмотрите нашу статью "Кастомные CUDA ядра для обучения LLM". Там есть важные предостережения.

3 HTTP-сервер на Go

Легковесный, с минимальной задержкой. Go выбрали за его goroutines — идеально подходят для обработки множества одновременных запросов к модели. Сервер общается с Rust-ядром через C FFI.

Сценарии использования: кому это нужно?

cuda-nn не для всех. Это специализированный инструмент.

  • Встраивание в production-системы — когда нужен максимальный контроль над ресурсами
  • Исследовательские проекты — где нужно тестировать новые архитектуры без оглядки на совместимость
  • Облачные провайдеры — которые хотят обслуживать больше пользователей на одном GPU (помните наш GPU Rental Price Tracker? Вот для таких случаев)
  • Владельцы нестандартного железа — например, тех, кто собирает фермы из трех GTX 1070

Подводные камни, о которых молчат

Все звучит прекрасно, пока не попробуешь сам.

Конвертация моделей — отдельный ад. Форматы весов, которые прекрасно работают в PyTorch, нужно перепаковывать в бинарный формат cuda-nn. Инструменты для этого есть, но они сырые.

Отладка CUDA ядер — это отдельная история. Когда ваша модель внезапно начинает генерировать абракадабру, причину искать придется долго. Никаких удобных отладчиков PyTorch, только printf и надежда.

И самое главное — сообщество. Вернее, его почти полное отсутствие. Если у вас проблема с Transformers, за час найдете ответ. С cuda-nn — готовьтесь разбираться в исходниках сами.

Альтернативы: что делать, если cuda-nn слишком сложно

Не готовы к такому уровню погружения? Есть варианты попроще.

  • llama.cpp — золотой стандарт для запуска на CPU/GPU, но с MoE пока проблемы
  • vLLM — отличная производительность, но требует Python окружения
  • TGI (Text Generation Inference) — решение от Hugging Face, баланс между удобством и скоростью
  • ExLlamaV2 — если нужна максимальная скорость на конкретных архитектурах

Каждый из этих инструментов решает свою задачу. cuda-nn — для тех, кому не подходит ни один из готовых вариантов.

Будущее: куда движется проект

Сейчас cuda-nn — инструмент для энтузиастов. Но тренд очевиден: все больше проектов уходят от монолитных фреймворков к специализированным движкам.

Что будет дальше? Вероятно, появление более удобных инструментов конвертации. Возможно — поддержка большего количества архитектур. Но главное — оптимизации под конкретное железо. Не просто "работает на CUDA", а "работает максимально быстро на Ada Lovelace" или "оптимизировано под H100".

Пока же cuda-nn остается доказательством концепции: можно обойтись без гигабайтового стека зависимостей. Можно писать инференс-движки с нуля. И можно получать производительность, которая заставляет задуматься: "А не слишком ли мы привыкли к удобству?"

Попробуйте, если не боитесь. Или просто следите за проектом — он показывает, куда движется вся индустрия inference. В сторону минимализма, контроля и скорости. Даже если сегодня это выглядит как решение для сумасшедших.