Candle: машинное обучение на Rust без Python
Через пару недель будет большой пост про Еву, а сегодня разберу движок, на котором она считает модели. Это Candle — фреймворк машинного обучения на Rust от Hugging Face. Опираюсь на README проекта и свой опыт.
Зачем ещё один фреймворк
У PyTorch нет проблем с обучением. Проблемы начинаются при развёртывании:
- Python тяжёлый. Интерпретатор, зависимости, пакеты на гигабайты. В serverless-функции такое стартует медленно.
- GIL и накладные расходы. Для инференса маленьких моделей они заметны.
- Сложная сборка. PyTorch тянет за собой огромные бинарные библиотеки.
Цель Candle — убрать Python из инференса: маленькие бинарники, быстрый старт, развёртывание где угодно.
Что умеет
- API, похожий на PyTorch, но на Rust: тензоры, операции, модули
candle-nn. - Бэкенды: оптимизированный CPU, CUDA, Metal и даже WebAssembly, то есть модели можно запускать прямо в браузере.
- Форматы весов: safetensors, npz, PyTorch и квантованные GGUF/GGML.
- Готовые реализации популярных моделей: LLaMA, Mistral, Qwen, Gemma, Whisper, Stable Diffusion и десятки других в
candle-examples.
Чем отличается от соседей
- tch-rs — это обёртка над libtorch, то есть тот же PyTorch под капотом, и тянет его зависимости.
- Burn — полноценный фреймворк на Rust с упором на обучение и абстракцию бэкендов.
- Candle — минимализм и инференс. Меньше возможностей, но и меньше всего, что может сломаться.
Мой комментарий
Для Евы Candle оказался идеальным по трём причинам:
- Один язык во всём проекте. Ядро, IPC и инференс на Rust. Никакой сериализации между Python и Rust, общая память работает напрямую.
- Песочница. Rust-бинарник без интерпретатора проще изолировать в
bwrap: ему не нужен доступ к site-packages, кешам pip и прочему. - GGUF из коробки. Я загружаю квантованные
Q4_K_Mвеса и по метаданнымgeneral.architectureвыбираю, какую реализацию модели создать.
Минус тоже есть: новые архитектуры появляются в Candle позже, чем в PyTorch. Иногда реализацию приходится дописывать самому, но это отличный способ понять модель изнутри.