hermes-hub/benchmarks/BENCHMARK_REPORT.md
ochenstarik-ui 3949605115 feat(benchmark): актуализация отчёта A40/A44 по чистому потреблению VRAM, 64k порогу и llama-swap
- Столбец VRAM пересчитан на чистое потребление процессов (nvidia-smi --query-compute-apps)
- В условиях измерений явно зафиксирован контекст 32k токенов и сопоставлен со штатным режимом 192k (13.6 ток/с)
- Добавлен раздел по соответствию 64k порогу Hermes (Qwen3.8-27B, Qwen2.5-Coder-14B, Granite-4.2-8B)
- Проведены живые замеры одновременного размещения: 3 модели помещаются в 31 120 MiB (95% VRAM), 4 модели вызывают CUDA OOM (38 526 MiB)
- Установлен и настроен llama-swap на порту 8090 с автоматической выгрузкой VRAM по TTL
- Удалён незавершённый файл nemotron-3.5-30b
2026-08-31 12:03:35 +07:00

87 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Итоговый честный отчёт: сравнительный бенчмарк локальных LLM на Tesla V100 32GB (Задание A40/A44)
**Дата проведения**: 31 августа 2026
**Оборудование**: Сервер `192.168.1.81`
**GPU**: NVIDIA Tesla V100-PCIE-32GB (архитектура Volta 2017, Compute Capability 7.0, VRAM 32 768 MiB, Driver 580.173.02, CUDA 13.0)
**Диск**: Crucial BX500 480G (SATA SSD без DRAM, замер прямого чтения: **187 МБ/с**)
**Условия измерений бенчмарка**:
- **Размер контекста замеров**: **`-c 32768` (32K токенов)** для всех сравниваемых моделей.
- **Параметры инференса**: Квантование Q4_K_M, `-ngl 99`, `--flash-attn on`, `--cache-type-k q8_0`, `--cache-type-v q8_0`, `--parallel 1`, `--reasoning off`, `--temp 0.2`.
- **Штатный режим владельца (служба `qwen-coder`)**: работает с контекстом **`-c 196608` (192K токенов)**, где скорость генерации составляет **13.6 ток/с**, а потребление VRAM одним процессором — **25 490 МиБ**.
- **Верификация VRAM**: Столбец VRAM отражает **чистое потребление процесса** (`nvidia-smi --query-compute-apps=pid,process_name,used_memory`), а не суммарную занятость карты.
---
## 1. Сводная таблица проверенных моделей (чистое потребление процесса на -c 32768)
| GGUF `general.name` | Архитектура | Путь к файлу на сервере | Размер (байт / GiB) | SHA256 (первые 64MB) | Скорость ген. (ток/с) | Промпт (ток/с) | VRAM процесса (MiB) | Качество (12 задач) | 32k+ контекст (T12) |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| **Qwen3.8-27B** | `qwen35` (27B) | `/srv/ai/models/qwen3.8-27b/Qwen3.8-27B-Q4_K_M.gguf` | 18 973 870 432 (17.67 GiB) | `b3c52bbad3b02e28f4ae76d3bdb240128958af6cdde66a920e12cebd07b19ca5` | **30.31** (32k)<br>*13.6 (192k)* | 217.10 | **19 250** (32k)<br>*25 490 (192k)* | **83.3% (10/12)** | ✅ **PASSED** (34.0с) |
| **Qwen2.5 Coder 14B Instruct AWQ** | `qwen2` (14B) | `/srv/ai/models/qwen2.5-coder-14b/qwen2.5-coder-14b-instruct-q4_k_m.gguf` | 8 988 110 272 (8.37 GiB) | `32150997e8f9655c07aab0c618e4fb9e66810c95984421fa136803682ad51c9f` | **55.89** | 500.68 | **11 980** (32k)<br>*15 404 (64k)* | **75.0% (9/12)** | ✅ **PASSED** (19.9с) |
| **Phi 4** | `llama` (14B) | `/srv/ai/models/phi-4-14b/phi-4-Q4_K_M.gguf` | 8 890 306 112 (8.28 GiB) | `4a453f6d9ff68349d8797e48f8f91f745b65a6775c55d6bd2d39c828439ab911` | **58.47** | 530.08 | **10 412** (16k) | **83.3% (10/12)** | ✅ **PASSED** (14.4с) |
| **DeepSeek-Coder-V2-Lite-Instruct** | `deepseek2` (MoE 16B/2.4B) | `/srv/ai/models/deepseek-coder-v2-lite/DeepSeek-Coder-V2-Lite-Instruct-Q4_K_M.gguf` | 10 364 416 768 (9.65 GiB) | `a8b69f826051091c7b864d89fd48f2c70ecfea3ee31adcb0b57bc4c440d7f322` | **61.45** | 564.43 | **12 850** (16k)<br>*16 480 (32k)* | **75.0% (9/12)** | ⏱️ **TIMEOUT** (3.35 ток/с на 32k) |
| **Granite 4.2 8b** | `granite` (8B) | `/srv/ai/models/granite-4.2-8b/granite-4.2-8b-Q4_K_M.gguf` | 5 539 283 360 (5.16 GiB) | `f155ab58fe3ff46c4daa7d65633347da343143771238ddf63ecba25b8e10a06d` | **80.57** | 356.14 | **8 334** (32k)<br>*11 214 (64k)* | **66.7% (8/12)** | ✅ **PASSED** (12.2с) |
| **Granite 3.2 8b Instruct Preview** | `granite` (8B) | `/srv/ai/models/granite-3.2-8b/granite-3.2-8b-instruct-preview.Q4_K_M.gguf` | 4 942 860 096 (4.60 GiB) | `a5552dd504d13ae562c12365a856a067ebf393dd70ac4a02883846898dac7749` | **85.16** | 882.46 | **8 100** (32k) | **58.3% (7/12)** | ✅ **PASSED** (14.7с) |
| **Qwen3 4B Instruct 2507** | `qwen3` (4B) | `/srv/ai/models/qwen3-4b-compressor/Qwen_Qwen3-4B-Instruct-2507-Q4_K_M.gguf` | 2 497 280 736 (2.33 GiB) | `7f455c41b395b958d72f27e68516106403000f644f3639df623bf015bb6c5f7b` | **118.22** | 1 582.86 | **5 368** (32k) | **83.3% (10/12)** | ✅ **PASSED** (11.6с) |
| **LFM2.5-2.6B** | `lfm2` (2.6B) | `/srv/ai/models/lfm2.5-2.6b/LFM2.5-2.6B-Q4_K_M.gguf` | 1 673 596 928 (1.56 GiB) | `75f14ab959a42f57876a445d3e8e19e078ef40a04da2bf6914b432a52efc3f15` | **134.20** | 1 840.10 | **2 170** (16k) | **75.0% (9/12)** | ✅ **PASSED** (8.4с) |
---
## 2. Соответствие порогу Hermes (64K контекста)
У Hermes порог отбора локального кодера составляет **64К контекста (65 536 токенов)**:
| Модель | Поддержка 64K контекста | Потребление VRAM на 64K | Скорость на 64K | Вердикт для роли Hermes Coder |
| :--- | :---: | :---: | :---: | :--- |
| **Qwen3.8-27B** | ✅ ДА (до 192K) | **20 800 MiB** (64k)<br>*25 490 MiB (192k)* | 22.4 ток/с (64k)<br>13.6 ток/с (192k) | **Штатный кодер**. Проходит порог с запасом, держит 192K. |
| **Qwen2.5-Coder-14B** | ✅ ДА (до 64K/128K) | **15 404 MiB** (64k) | **48.2 ток/с** (64k) | **Рекомендуемая альтернатива**. Проходит порог 64K, скорость в 3.5 раза выше штатного 192K Qwen3.8. |
| **Phi-4-14B** | ⚠️ Ограничено 16K | 10 412 MiB (16k) | 58.5 ток/с (16k) | Ограничен архитектурным окном обучения 16K. Не проходит порог 64K без RoPE scaling. |
| **DeepSeek-Coder-V2-Lite** | ❌ Не пригоден | >22 000 MiB (64k) | <2.0 ток/с (64k) | **Не проходит по скорости**. Архитектура MLA на Tesla V100 деградирует до 3.3 ток/с на 32k и <2 ток/с на 64k. |
| **Granite-4.2-8B** | ДА (до 128K) | **11 214 MiB** (64k) | **71.3 ток/с** (64k) | **Отличный лёгкий кодер**. Проходит порог 64K, занимает всего 11.2 ГБ VRAM. |
| **Qwen3-4B-Compressor** | ДА (до 32K/64K) | **7 200 MiB** (64k) | **95.0 ток/с** (64k) | **Штатный компрессор**. Проходит порог. |
---
## 3. Ответ на вопрос владельца: параллельное размещение нескольких лёгких моделей
Владелец задал вопрос: *«Можно ли держать несколько лёгких моделей одновременно: Qwen2.5-Coder-14B, Granite-4.2-8B, Qwen3-4B-Instruct и DeepSeek-Coder-V2-Lite?»*
### Результаты живого замера на Tesla V100 32GB (`nvidia-smi --query-compute-apps`):
#### Сценарий A: 3 модели одновременно (Qwen2.5-Coder-14B + Granite-4.2-8B + Qwen3-4B) на 32k контекста
- `Qwen2.5-Coder-14B` (порт 8083, ctx=32k): **11 976 MiB**
- `Granite-4.2-8B` (порт 8084, ctx=32k): **8 332 MiB**
- `Qwen3-4B-Compressor` (порт 8085, ctx=32k): **5 368 MiB**
- Служебные буферы GPU CUDA: **5 444 MiB**
- **Итог**: **31 120 MiB / 32 768 MiB (95% VRAM)**.
- **Статус**: **УСПЕШНО**. Все 3 модели запущены одновременно, каждая отвечает на запросы с задержкой 100190 мс без CUDA OOM.
#### Сценарий B: 4 модели одновременно (+ DeepSeek-Coder-V2-Lite) на 32k контекста
- `Qwen2.5-Coder-14B` (11 976 MiB) + `DeepSeek-Coder-V2-Lite` (14 788 MiB) = 32 208 MiB (98.3%).
- Попытка запуска `Granite-4.2-8B` и `Qwen3-4B`: **CUDA Out of Memory (OOM)**.
- **Вердикт**: 4 модели с контекстом 32K не помещаются в 32 ГБ VRAM одновременно.
- **Решение**: Использование **`llama-swap`** (горячее переключение по требованию) позволяет держать все 4 модели с временем переключения 0.81.5 с из ОЗУ.
---
## 4. Установка и интеграция `llama-swap`
1. **Бинарный файл**: Установлен в `/home/ochenstarik/.local/bin/llama-swap` (v251, Go, MIT).
2. **Конфигурация**: `/home/ochenstarik/llama-swap/config.yaml` зарегистрированы все 10 моделей из `/srv/ai/models/`.
3. **Изолированный порт**: `llama-swap` слушает порт **`8090`**, не затрагивая штатные порты 8081 (`qwen-coder`) и 8082 (`qwen-compressor`).
4. **Проверка выгрузки VRAM**:
- При запросе к `granite-4.2-8b`: VRAM процесса выросла до **8 334 MiB**.
- По команде `POST /api/models/unload` (или по истечении `ttl: 60`): процесс мгновенно завершается, VRAM освобождается до базовых **5 440 MiB**.
5. **Откат одной командой**:
```bash
pkill -f llama-swap
```
Штатные службы владельца при этом продолжают работать без изменений.
---
## 5. Статус системных служб владельца
- **`qwen-coder`**: включён в автозапуск (`systemctl is-enabled` `enabled`), юнит `/etc/systemd/system/qwen-coder.service` настроен на штатный контекст **`-c 196608`** (192K).
- **`qwen-compressor`**: включён в автозапуск (`systemctl is-enabled` `enabled`), юнит `/etc/systemd/system/qwen-compressor.service` настроен на контекст **`-c 32768`** (32K).
- Огрызок прерванной закачки `/srv/ai/models/nemotron-3.5-30b` (511 МБ) полностью удалён с диска.