← Назад к курсу
Подробное пособие: форматы моделей LLM и движки для их запуска
1. Введение
Развёртывание больших языковых моделей (LLM) в реальном проекте требует решения двух задач:
- Хранения модели – какие форматы файлов используются для сериализации весов, архитектурных метаданных и вспомогательных данных.
- Выполнения (inference) – какой движок инференса будет преобразовывать сохранённый формат в оптимизированный runtime‑поток, управлять памятью, распараллеливать вычисления и поддерживать требуемый уровень производительности.
В этом пособии рассматриваются основные форматы модели и главные inference‑движки, их преимущества/ограничения, а также практические рекомендации по выбору для разных сценариев.
2. Форматы модели
| Формат | Описание | Преимущества | Ограничения | Наиболее распространённые использован ные окружения |
|---|---|---|---|---|
| Framework‑native (.pt, .pth, .npz) | Встроенный сериализатор PyTorch, JAX, TensorFlow. Сохраняет веса и граф вычислений. | • Полный набор метаданных. • Прямой доступ внутри экосистемы (PyTorch → torch.load). |
• Файлы могут быть тяжёлыми. • Сериализация через pickle создаёт потенциальные уязвимости. |
Research‑проекты, внутренние прототипы, обучение внутри одной фреймворк‑среды. |
| Safetensors | Текстовый JSON‑метаданные + бинарные тензоры. Не использует pickle. | • Безопасность (невозможно выполнить произвольный код при загрузке). • Быстрый загрузчик. • Поддержка lazy‑loading и кросс‑языковой совместимости. |
• Не поддерживает все расширения (например, некоторые пользовательские атрибуты). | Стандартный формат репозитория Hugging Face Hub; популярен для обмена моделями. |
| GGUF / GGML | Специальный бинарный формат, созданный для llama.cpp и совместимых движков. Поддерживает множественные схемы квантования (Q4_K_M, IQ4_XS, …). | • Компактность (до 90 % экономии размера). • Гибкая квантование → более низкие требования к RAM/CPU. • Lazy‑loading через memory‑mapping. |
• Требует предварительного конвертирования из другого формата. • Некоторые продвинутые операции могут требовать fallback‑моделей. |
Локальный инференс, edge‑устройства, приложения, где важна экономия памяти. |
| ONNX | Открытый стандарт от Microsoft+Facebook. Содержит граф вычислений + веса в виде граф‑операций. | • Универсальный «мост» между фреймворками. • Поддержка оптимизаций через ONNX Runtime (кросс‑платформенно). |
• Некоторые трансформеры‑специфичные операции требуют обходных путей. • При работе с высокими форматами может потребоваться дополнительная конвертация. |
Переходные сценарии, когда модель обучалась в одной фреймворковой экосистеме, но будет выполняться в другой (PyTorch ↔️ TensorFlow ↔️ Caffe2). |
| TensorRT Engine (.plan, .engine) | Предварительно скомпилированный набор ускоренных kernels для NVIDIA GPU (FP8, INT8, FP16, INT4). | • Максимальная производительность на GPU NVIDIA. • Низкая латентность (мл Gedanken). • Поддержка динамических batch‑ов, самым гибким управлением памятью. |
• Зависит от конкретной архитектуры GPU и драйвера. • Требует отдельный этап компиляции. • Не переносима между разными GPU‑архитектурами без пересборки. |
Продакшен‑развёртывание на серверах с GPU (A100, H100, RTX 4090). |
Кратко: для исследований удобно использовать native‑форматы; для безопасного распределения – safetensors; для локального использования – GGUF; для универсального переноса – ONNX; для максимального ускорения на NVIDIA – TensorRT Engine.
3. Движки инференса (inference engines)
| Движок | Ключевые возможности | Поддерживаемые форматы | Типичный сценарий | Примечания |
|---|---|---|---|---|
| vLLM | High‑throughput (до 2800 токен/сек); PageAttention; Dynamic Batching; Speculative Decoding; Tensor‑Parallelism; Поддержка INT4/INT8/FP8. | GGUF, safetensors, PyTorch (через конвертацию), ONNX (экспериментально) | Масштабные сервисы, обслуживающие тысячи одновременных запросов; облачные inference‑endpoints. | Публикация от 2024 года; активно поддерживается сообществом. |
| TensorRT‑LLM | Оптимизированный C++ runtime для NVIDIA GPU; слой‑специфичные ядра; поддержка AWQ, GPT‑Q, INT8/FP8; Интеграция с Triton Inference Server. | TensorRT Engine, ONNX (через конвертер), safetensors (через Triton) | Производственные сервисы на H100/A100 с требованием микрOLAT‑latency; чат‑боты в реальном времени. | Требует NVIDIA‑драйверы ≥ 525, CUDA 12+. |
| Hugging Face Text Generation Inference (TGI) | Production‑ready OpenAPI‑compatible; Continuous Batching; OpenTelemetry; Prometheus‑метрики; Поддержка множества бекендов (TensorRT‑LLM, vLLM, llama.cpp). | Safetensors (основной), ONNX, TensorRT Engine (через бекенд) | Универсальная платформа для быстрого развертывания в экосистеме Hugging Face; подходит как для CPU, так и для GPU. | Включает веб‑UI и REST‑API «как у OpenAI». |
| SGLang | RadixAttention; Paged KV‑Cache; Continuous Batching; Поддержка JSON‑грамматок и внешних функций; Высокая пропускная способность на A100. | Safetensors, ONNX, TensorRT Engine (через Rust‑backend) | Высоконагруженные сервисы, где важна простота интеграции и гибкость запросов. | Активен в проектах, требующих детального контроля генерируемого текста. |
| llama.cpp / GGUF | Чистый C/C++ без зависимостей; поддержка CPU, CUDA, ROCm, Metal, Vulkan; множество схем квантов. | GGUF (основной) | Локальный инференс на обычных ноутбуках, edge‑устройствах, исследования без GPU. | Один бинарный файл → мгновенный старт, минимум зависимостей. |
| DeepSpeed‑FastGen | Интеграция с DeepSpeed; Sharding, ZeRO‑optimizations; Dynamic Split‑Fuse; 3‑D/4‑D параллелизм. | PyTorch (.pt/.pth), ONNX (через конвертацию) | Тренировка‑инференс гибридных склей‑моделей; огромные модели (65 B +). | Чаще используется в сочетании с DeepSpeed‑training. |
| ONNX Runtime | Универсальный движок для всех ONNX‑моделей; поддержка CPU, GPU, DirectML, TensorRT‑ExecutionProvider; динамический batch‑optimization. | ONNX | Приложения, требующие независимости от конкретного фреймворка; deployment на разных платформах (Windows, Linux, ARM). | Позволяет легко переключаться между CPU и GPU без перекомпиляции модели. |
| LMDeploy | TurboMind‑backend (высокая пропускная способность); поддержка INT4/AWQ; KV‑cache‑optimizations; простое развертывание через одну команду. | Safetensors, ONNX, TensorRT Engine (через конвертер) | Скоростные сервисы на NVIDIA GPU, где важен throughput > latency. | Часто используется в китайской экосистеме (Alibaba). |
4. Сравнительный анализ
4.1. Таблица характеристик
| Критерий | vLLM | TensorRT‑LLM | TGI | SGLang | llama.cpp | DeepSpeed‑FastGen | ONNX Runtime | LMDeploy |
|---|---|---|---|---|---|---|---|---|
| Пропускная способность | ★★★★★ | ★★★★☆ | ★★★★☆ | ★★★★☆ | ★★☆☆☆ | ★★★★☆ | ★★☆☆☆ | ★★★★☆ |
| Латентность (TTFT) | ★★★☆☆ | ★★★★★ | ★★★★☆ | ★★★★☆ | ★★★★★ | ★★★☆☆ | ★★★★☆ | ★★★★☆ |
| Квантование | AWQ, GPTQ, INT4/INT8, FP8 | FP8, INT8, INT4, AWQ | bitsandbytes, GPT‑Q | FP4/FP8, INT4 | Q4_K_M, IQ4_XS, … | GPTQ, AWQ, INT8 | FP16, INT8 (fallback) | INT4/AWQ |
| Аппаратная зависимость | NVIDIA, AMD, CPU | Только NVIDIA | CPU/GPU/TPU | NVIDIA, AMD, CPU | CPU/GPU (много backends) | NVIDIA, AMD | CPU/GPU | NVIDIA |
| Поддержка Tensor Parallel | Да | Да | Да | Да | Ограниченно | Да | Нет | Да |
| Простота интеграции | Средняя (Python API) | Сложная (компиляция) | Высокая (Docker, API) | Средняя (Rust) | Очень простая (один бинарник) | Средняя | Высокая (Python) | Средняя |
| Enterprise‑фичи | Мониторинг, multi‑model | Triton‑integration | OpenTelemetry, Prometheus | Поддержка функций | Нет | DeepSpeed‑MII | Метрики, динамический batch | Авто‑квантование, планировщик |
4.2. Критерии выбора
| Сценарий | Наиболее подходящий движок | Формат модели | Пояснение |
|---|---|---|---|
| Локальная работа на CPU | llama.cpp (через GGUF) | GGUF | Минимум зависимостей, возможность квантования под 1 GB RAM, работает полностью офлайн. |
| Высокий throughput в облаке (тысячи запросов/сек) | vLLM | GGUF / safetensors | PageAttention + dynamic batching обеспечивает >2 000 токен/сек. |
| Низкая латентность (мл) на GPU NVIDIA | TensorRT‑LLM | TensorRT Engine | Специализированные ядра дают суб‑50 мс ответов даже для 70‑B моделей. |
| Универсальное решение с OpenAI‑совместимым API | TGI (можно подключить vLLM или TensorRT‑LLM как бекенд) | Safetensors | REST‑API, мониторинг, OpenTelemetry – готово к продакшену. |
| Сложные бизнес‑процессы, требуются грамматочные функции | SGLang | Safetensors / ONNX | RadixAttention, поддержка JSON‑грамматок и пользовательских функций. |
| Обслуживание гигантских моделей (65 B +) в распределённом кластере | DeepSpeed‑FastGen | PyTorch / ONNX | ZeRO‑sharding + tensor‑parallel оптимизации. |
| Кросс‑платформенный inference без привязки к фреймворку | ONNX Runtime | ONNX | Поддержка Windows, Linux, ARM, Metal, DirectML – идеально для edge‑устройств. |
| Быстрый прототип на обычном ноутбуке | llama.cpp | GGUF | Доступен в виде готового бинарника, не требует Python‑окружения. |
5. Практические сценарии использования
5.1. Локальный запуск модели LLaMA‑3 8B на CPU
- Скачивание: wget https://huggingface.co/meta-llama/Llama-3-8B/resolve/main/model.pth.
- Конвертация в GGUF:
python convert_hf_to_gguf.py --input model.pth --output llama3-8b.Q4_K_M.gguf --quantize Q4_K_M
- Запуск:
./main -m llama3-8b.Q4_K_M.gguf -p "Какая погода сегодня?"
Преимущества: Нет необходимости в GPU, потребление RAM ≈ 4 GB, быстрый старт.
5.2. Высокопроизводительный сервис чат‑бота на базе Llama‑2 70B
- Модель: Скачивание safetensors‑версии Llama-2-70B.safetensors.
- Создание TensorRT‑engine:
trtllm-build \ --model_dir /path/to/llama2-70b \ --engine_dir /output/engine \ --max_batch_size 8 \ --max_input_len 1024 \ --max_output_len 256 \ --dtype fp8 \ --quantization awq
- Развёртывание через Triton Inference Server с бекендом tensorrt_llm.
- API‑запрос → ответ < 60 мс.
Преимущества: Минимальная латентность, масштабируемость до тысяч одновременных запросов, поддержка FP8/AWQ.
5.3. Исследовательский эксперимент с новыми квантованиями
- Сохранить модель в native‑формате torch.save(model.state_dict(), "model.pt").
- Конвертировать в ONNX:
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=17, verbose=False) - Запуск через vLLM с флагом --dtype fp16 и измерение throughput:
python benchmark.py --model model.onnx --dtype fp16 --num_prompts 1000
Цель: Сравнить влияние разных схем квантования (FP16, INT8, INT4) на пропускную способность и потребление памяти.
6. Выводы
- Формат модели определяет, как её параметры хранятся и какие метаданные доступны. Наиболее практичные сегодня: Safetensors (безопасность + скорость), GGUF (универсальность + возможность лёгкой квантования), ONNX (универсальный мост) и TensorRT Engine (максимальная производительность на NVIDIA GPU).
- Выбор inference‑движка полностью зависит от:
- объёма запросов (throughput),
- требуемой латентности,
- аппаратных ресурсов (CPU vs GPU),
- уровня операционной сложности и требований к продакшен‑модульности.
- Для массового развертывания в облаке или на серверах с GPU optimal решения – vLLM, TensorRT‑LLM и TGI.
- Для локального прототипирования или ограниченных ресурсов лучше подходят llama.cpp (GGUF) и ONNX Runtime.
- При выборе квантования следует оценивать компромисс между экономией памяти и падением качества генерируемого текста; типичные схемы – Q4_K_M / IQ4_XS (CPU), AWQ / GPT‑Q (GPU), INT8/FP8 (TensorRT).
7. Полезные ссылки (актуальны на 30.01.2026)
Как использовать это пособие
- Определите цель (local CPU, cloud throughput, low‑latency GPU).
- Выберите формат модели, соответствующий выбранному сценарию.
- Подберите движок из таблицы 4.1, проверяя поддерживаемый формат.
- Следуйте инструкциям из раздела 5 для конвертации, построения engine и запуска.
- Мониторьте метрики (throughput, latency, память) и, при необходимости, переходите к оптимизации (квантование, batch‑size, tensor‑parallel).