xInfer: библиотека для LLM-инференса на Rust без зависимостей

xInfer: библиотека для LLM-инференса на Rust без зависимостей

xInfer — это библиотека для быстрой реализации LLM-инференса на чистом Rust без зависимостей от Python и PyTorch.

Она решает проблему низкой производительности и большого объема зависимостей, характерных для традиционных решений. xInfer поддерживает высокий уровень производительности с использованием родного Flash Attention и других оптимизаций, позволяя обрабатывать до 197 токенов в секунду на потребительских GPU. Проект будет полезен разработчикам, которым нужна легковесная, кроссплатформенная альтернатива существующим фреймворкам для работы с языковыми моделями.

Запустить xInfer можно несколькими способами: через DEB или npm, также доступны Python биндинги, если потребуется интеграция с Python-окружением. Пользуйся командой, чтобы начать: xinfer --m <модель> --kvcache-dtype turbo4 --ui-server. Учти, проект ещё находится на ранней стадии и может иметь ограничения по функционалу и совместимости.

xInfer
Быстрая инвариантная инференция LLM на чистом Rust. Без PyTorch и Python. Просто быстрая, портативная, готовая к производству инференция.
English | 简体中文

--- ## ✨ Зачем нужен xInfer? | | Характеристика | Детали | |---|---|---| | **0️⃣** | Нет зависимостей от Python | Чистый Rust бэкенд – без PyTorch, без CUDA Python библиотек | | **⚡** | Быстрота | Нативное Flash Attention, FlashInfer, CUDA Graph, непрерывная пакетная обработка, кэширование префиксов, раздельная дисагрегация PD. До **197 токенов/с** для моделей `30B+` на потребительских GPU | | **🪶** | Компактность | Основная логика планирования + внимания в **< 5 000 строках** Rust | | **🌍** | Кроссплатформенность | CUDA (Linux/Windows), Metal (macOS). Один и тот же бинарник, один и тот же API | | **🏭** | Готов к производству | APIs, совместимые с OpenAI/Anthropic, встроенный веб-интерфейс в стиле ChatGPT, вызов инструментов MCP, структурированные выводы, конечные точки для встраивания и токенизации, многотокенная предсказания (MTP) | | **🗜️** | Агрессивное сжатие KV | TurboQuant (`2–4 бит` KV-кэша) увеличивает контекст до **4.3×** с минимальной потерей качества. Запускайте модели MoE `30B+` с **миллионами токенов контекста** на одном 24/32 ГБ GPU | | **🔥** | V100 + NVFP4 | Первый NVFP4 + низкобитный KV-кэш на V100 – без необходимости в оборудовании FP4, согласованный вывод на старых GPU | | **🐍** | Легкие Python биндинги | Дополнительный PyO3 wheel, когда нужен Python-ориентированный интерфейс | --- ## 📽️ Демо --- ## 🚀 Быстрый старт ### 📦 Установка **Вариант 1 — Установить DEB или Python пакет** ```bash curl -sSL https://guoqingbao.github.io/xinfer/install.sh | bash ``` **Вариант 2 — npm** ```bash npm install -g xinfer-ai ``` --- ### ▶️ Запуск **С использованием ID модели HuggingFace:** ```bash xinfer --m Qwen/Qwen3.6-27B-FP8 --kvcache-dtype turbo4 --ui-server ``` **С использованием локального пути модели:** ```bash xinfer --m /home/Qwen3.6-35B-A3B --d 0,1 --ui-server ``` **Использование Python:** ```bash # python3 -m xinfer.chat python3 -m xinfer.server --m Qwen/Qwen3.6-27B-FP8 --kvcache-dtype turbo4 --ui-server ``` **Предполагающее декодирование (MTP & DFlash2)** Встроенный MTP (модель должна включать MTP головы): ```bash xinfer --m Qwen/Qwen3.5-35B-A3B --d 0,1 --ui-server --num-speculative-tokens 3 ``` Внешняя модель DFlash2: ```bash xinfer --m Qwen/Qwen3.8-... --d 0,1 --ui-server \ --draft-model --num-speculative-tokens 7 ``` См. [docs/speculative_decoding.md](docs/speculative_decoding.md) для деталей. > **Совет:** Открой `http://IP:8001` для встроенного чата UI или используй `http://IP:8000/v1/` как основной API адрес. --- ### 🗜️ Сжатие KV-кэша Добавь `--kvcache-dtype` для сжатия KV-кэша и увеличения длины контекста: | Флаг (`--kvcache-dtype`) | Сжатие | Качество | Требования к GPU | |---|---|---|---| | _(по умолчанию)_ | 1× (BF16) | Базовый уровень | Все | | `fp8` | **2×** | Почти без потерь | SM70+ / Apple M1 | | `turbo8` | **2.6×** | 79–100% пропускной способности | SM70+ / Apple M1 | | `turbo4` | **3.7×** | Лучшая сбалансированность | SM70+ / Apple M1 | | `turbo3` | **4.7×** | Максимальное сжатие | SM70+ | --- ## 📈 Производительность > Тестирование проводилось на **V100-32G**, **A100-40G**, **Hopper-80G** и **RTX 5090** | Модель | Формат | Размер | Скорость декодирования (без MTP) | |---|---|---|---| | Ministral-3-3B (**Мультимодальная**) | ISQ (BF16→Q4K) | 3B | **193.67** токенов/с | | Qwen3-VL-8B-Instruct (**Мультимодальная**) | Q8_0 | 8B | **112.51** токенов/с | | Llama-3.1-8B | ISQ (BF16→Q4K) | 8B | **133.10** токенов/с | | DeepSeek-R1-0528-Qwen3-8B | Q4_K_M | 8B | **139.25** токенов/с | | GLM-4-9B-0414 | Q4_K_M | 9B | **77.48** токенов/с | | QwQ-32B | Q4_K_M | 32B | **46.02** токенов/с | | **Qwen3-30B-A3B** | NVFP4 | **30B (MoE)** | **197.29** токенов/с (**RTX 5090**) | | **Qwen3-30B-A3B** | NVFP4 | **30B (MoE)** | **72.86** токенов/с (**V100, программное обеспечение FP4**) | | **Qwen3-Next-80B** | AWQ | **80B (MoE)** | **90** токенов/с (**Hopper**) | | **Qwen3.5/3.6/3.8 27B** (**Мультимодальная**) | Q4_K_M/IQ4 | **27B (Плотная)** | **58** токенов/с | | **Qwen3.5/3.6/3.8 27B** | FP8 | **27B (Плотная)** | **45** токенов/с (**Hopper**) | | **Qwen3.6-35B-A3B** (**Мультимодальная**) | FP8 | **35B (MoE)** | **120** токенов/с (**Hopper**) | | **GLM4.7 Flash** | NVFP4 | **30B (MoE)** | **79** токенов/с (**Hopper, программное обеспечение FP4**) | | **Gemma4-31B** | ISQ (BF16→Q4K) | **31B (Плотная)** | **47** токенов/с (**Hopper**) | | **Gemma4-26B-A4B** | NVFP4 | **26B (MoE)** | **137.23** токенов/с (**RTX 5090**) | | **MiniMax-M2.5** | NVFP4 | **229B (MoE)** | **64.50** токенов/с (**Hopper, программное обеспечение FP4, TP=2**) |
Apple Silicon (M4) | Модель | Размер пакета | Выходные токены | Время (с) | Пропускная способность (токены/с) | |---|---|---|---|---| | Qwen3-0.6B (BF16) | 128 | 63488 | 83.13s | 763.73 | | Qwen3-0.6B (BF16) | 32 | 15872 | 23.53s | 674.43 | | Qwen3-0.6B (BF16) | 1 | 456 | 9.23s | 49.42 | | Qwen3-4B (Q4_K_M) | 1 | 1683 | 52.62s | 31.98 | | Qwen3-8B (Q2_K) | 1 | 1300 | 80.88s | 16.07 | | Qwen3.5-4B (Q3_K_M) | 1 | 1592 | 69.04s | 23.06 | | Qwen3.5-2B (NVFP4) | 1 | 1883 | 60.76s | 30.99 | | Qwen3.5-2B (NVFP4) | 2 | 3942 | 81.96s | 48.10 |
[Полные бенчмарки →](docs/performance.md) --- ## 🧠 Поддерживаемые модели * ✅ LLaMa (LLaMa2, LLaMa3, **LLaMa4**, IQuest-Coder) * ✅ Qwen (Qwen2, Qwen3) * ✅ Qwen2/Qwen3 MoE * ✅ Qwen3 Next * ✅ Qwen3.5/3.6/3.8 Плотные/MoE (27B, 35B, 122B, 397B, мультимодальная модель) * ✅ Qwen3.8-Next/Qwen4 * ✅ Mistral v1, v2 * ✅ Mistral-3-VL Reasoning (3B, 8B, 14B, мультимодальная модель) * ✅ GLM4 (0414) * ✅ GLM4 MoE (4.6/4.7) * ✅ GLM4.7 Flash * ✅ GLM 5.2 (архитектура DeepSeek V3.2 DSA) * ✅ DeepSeek V3/R1/V3.2 * ✅ **DeepSeek V4** (поддержка 2-битного ISQ через `--isq w2`) * ✅ Phi3 / Phi4 (Phi-3, Phi-4, Phi-4-mini и др.) * ✅ Gemma3/**Gemma4** (мультимодальная модель) * ✅ Qwen3-VL (Плотная, мультимодальная модель) * ✅ MiroThinker-v1.5 (30B, 235B) **Форматы:** Safetensors (BF16, `FP8-blockwise`, GPTQ, AWQ, MXFP4, `NVFP4`) | GGUF (все типы квантования) | `ISQ` (онлайн квантование, включая **2-бит W2** для DeepSeek V4 MoE) > **DeepSeek V4 Flash + 2-бит ISQ:** `--isq w2` переупаковывает MXFP4 маршрутизируемых экспертов в 2-бит при загрузке. При 2× GPU тензорном параллелизме (`--d 0,1`), веса модели используют около **46 ГБ на GPU** (**46 × 2 ГБ** в сумме). --- ### TurboQuant KV-кэш — Запуск моделей 30B+ на потребительских GPU TurboQuant сжимает KV-кэш до 2–4 бит с помощью поворота преобразования Уолша-Хадамара + квантования absmax для каждой головы. Максимальные токены контекста с `turbo4`: | Модель | Бюджет KV | BF16 | turbo4 | Прирост | |---|---|---|---|---| | **Qwen3.6-35B-A3B** (NVFP4) | 7 ГБ (24 ГБ GPU) | 700к | **2.7M** | **3.9×** | | | 15 ГБ (32 ГБ GPU) | 1.5M | **5.8M** | **3.9×** | | **Qwen3.6-27B** (FP8) | 7 ГБ | 112к | **434к** | **3.9×** | | | 15 ГБ | 240к | **930к** | **3.9×** | | **

Открыть на GitHub: guoqingbao/xinfer →

Что нового на GitHub — короткие обзоры на русском Новые обзоры приходят в Telegram. Без спама, по делу.
Подписаться

Похожие статьи

Популярные темы на сайте