Использование локальных моделей AI в HomeLab

опубликовано: ⏰ 15

Ранее писал статью CI/CD с Gitea для HomeLab, в которой была небольшая информация о локальном сервере под нужды проектов. Использование этого сервера не ограничивается только CI/CD, так же использую для запуска локальных моделей AI.

Предпосылки для локального развёртывания

Тратить время и ресурсы на организацию окружения под локальные модели необходимо не всегда, и не всем нужно. У меня причин было несколько:

  1. Конфиденциальность – давно не секрет, что всё, что пишется в публичных чатах, остаётся у владельцев этих чатов. По-моему, была где-то старая новость о том, что утекало в публичный доступ содержимое бесед пользователей. То есть всё, что вы там делаете, вы больше не контролируете.
  2. Доступность – блокировки, это новая реальность. Постоянно и много ресурсов блокируют под различными предлогами. Надеяться на постоянную доступность публичных ресурсов сейчас могут только совсем безумные и отважные.
  3. Самообразование – всё же интересно понимать, как это работает снизу, а не когда дают в готовом виде окно с чатиком. Да, за это приходится платить личным временем и ресурсами.
  4. Стоимость – спорная метрика и зависит от объемов использования. Если они высокие, то может оказаться выгоднее иметь локальные сервера, чем по подписке.

Дополнительно стоит упомянуть о том, что локальные модели никогда не догонят по качеству и скорости работы облачные аналоги. Просто потому, что для этого потребуется железо далеко не потребительского уровня. Рассчитывать на то, что получится сделать дома так же, как в ChatGPT, не стоит – не получится. Даже банально не будет в открытом виде полной модели, а только урезанные версии. Поэтому не сильно очаровываемся идеей, чтобы потом не разочаровываться :)

Доступное железо на 2025 год

Вариантов тут на самом деле масса и всё зависит от доступных бюджетов. Рассматривать серверное железо (A100, H100, H200, L40s и т.д.) не вижу смысла. Стоимость очень высокая и требует помимо самих видеокарт и соответствующих серверов. В общем, это совсем не для домашнего использования.

Строить сервер с обычными CPU и DDR тоже бесполезно, в результате будет очень низкая скорость инференса. Просто не получится нормально работать.

Выбор зависит от доступного бюджета. Если рассматривать более “доступные” варианты для домашнего использования, то получается примерно так:

ОборудованиеRAM/VRAM, bandwidthКомментарий
NVIDIA RTX PRO™ 6000 Blackwell96 GiB
1792 GB/s
Это так сказать RTX 5090 на максималках, но для AI в профессиональном сегменте. Ценник соответствующий.
GeForce RTX 509032 GiB
1792 GB/s
На текущий момент самая мощная для потребительского/профессионального сегмента.
GeForce RTX 409024 GiB
1008 GB/s
Брать только если она со вторичного рынка. Остатки новых стоят, как новая RTX 5090.
GeForce RTX 309024 GiB
936 GB/s
Можно собрать кластер из старых видеокарт со вторичного рынка и получить суммарный объем памяти, равный 48 GiB.
Apple Mac Studio M3 Ultraдо 512 GiB
819 GB/s
У Apple есть мощные MiniPC с двумя чипами и под полтерабайта памяти. Стоят они довольно дорого, но нужно упомянуть.
NVIDIA DGX Spark128 GiB
273 GB/s
Непонятно, для кого и для чего NVIDIA выпустила это изделие. Стоимость высокая, пропускная способность памяти низкая.
AMD Ryzen™ Al Max+ 395до 128 GiB
256 GB/s
Популярные MiniPC с чипами от AMD. По моему мнению, это некий баланс между универсальным ПК для разработки и сервером для инференса. Мощный CPU, GPU и много быстрой памяти.
Другие комбинации*Есть варианты со сборкой кластера из нескольких видеокарт или распределённых серверов, но уже сильно влияет на итоговую производительность

NVIDIA RTX PRO™ 6000 Blackwell, Apple Mac Studio M3 Ultra, NVIDIA DGX Spark – для меня сразу же отсеялись. Цены плавают в зависимости от курса, порядок цифр – миллионы денег. Но богачи могут присмотреться. Если всё-таки есть интерес к тому как они показывают себя в работе с AI, то есть видео обзоры. Например, от Alex Ziskind.

GeForce RTX 3090 – поддерживает NVLink, поэтому их часто используют в паре. Но нужно найти не побывавшие в майнинге. Минусом может быть совокупное энергопотребление. Дополнительно к этому, потребуется соответствующий корпус с хорошим охладом и материнская плата на две линии PCIe x8.

GeForce RTX 4090 – сейчас нет смысла в покупке, так как есть GeForce RTX 5090. Наверное можно найти на вторичке, но в отличие от 3090 у неё нет NVLink. Это означает, что значит максимальное ограничение по памяти – 24 GiB.

GeForce RTX 5090 – пока единственный вариант с максимальной производительностью. Цена неадекватная, как и у всех флагманских видеокарт NVIDIA. К сожалению, Хуанг уже давно монополист и делает, что хочет.

AMD Ryzen™ Al Max+ 395 – неожиданно AMD выпустила хороший SoC. Да, он не дотягивает Apple Mac Studio M3 Ultra, но и стоит раза в 3 дешевле. MiniPC на его основе сейчас полно, база общая (типовые материнские платы), меняется только обвес в виде коробки.

Дополнительно есть обширное поле с экспериментами по объединению различных доступных железок в вычислительный кластер. Например, для распределённых вычислений можно использовать vLLM или exo, объединив доступные ПК в один кластер. Но сразу скажу, что на финальную производительность будет очень сильно влиять скорость линка между ПК. Нужно смотреть в сторону Thunderbolt 4/5. Либо можно распределять изолированные агенты по ПК, а не шарить общую модель между ними.

Если рассматривать совсем экзотические варианты, то есть возможность использовать OCuLink. Подключается внешняя видеокарта через NVMe (обычно два слота у MiniPC). Только стоимость этой внешней видеокарты и коробки к ней будет заметно дороже самого MiniPC или ноутбука. Да и будет не в полную силу работать.

Что использовал и какие проблемы были

Сначала использовал то, что было. Старая видеокарта в ПК (GeForce 970 @ 4GiB) и встройка на рабочем ноутбуке (RTX 3050 @ 6GiB). Но проблемы с нехваткой памяти вылезли практически сразу. В какой-то момент терпение кончилось, и купил GeForce RTX 4090, когда был период с самой низкой ценой (2023 год), до резкого подорожания. Прибавка по скорости получилась огромная, дальше практически до конца 2025 года всё делал на ней.

Проблема с одной видеокартой в том, что её не всегда можно использовать одновременно для нескольких моделей. Приходится либо постоянно переключаться, либо использовать модели небольшого размера, которые поместятся в 24 GiB, но теряя в качестве. Самый хороший пример – это LM Studio. В режиме сервера он может использовать только одну модель и переключается между ними. Одно из решений было запускать модели для векторизации и ранжирования на рабочем ноутбуке с RTX 3050, а крупные LLM (32b) уже на ПК. Пропала проблема постоянного переключения между моделями.

Со временем стали расти размеры уже самих моделей и 24 GiB VRAM не всегда стало хватать (особенно для LDM). Поэтому, где-то под конец 2025 года, решил взять MiniPC с Al Max+ 395. К тому же был нужен отдельный сервер под другие задачи, можно было совместить полезное с полезным. Брал самый дешёвый с AliExpress, что было рискованно, но доехал целый. Правда, есть сильное подозрение, что он не новый. С MiniPC появилась возможность грузить модели до 72b без MoE или 120b+ с MoE. Могу сразу сказать, что модели с больше 14b без MoE будут работать медленно из-за низкой пропускной способности памяти. При этом MoE модели работают довольно быстро, например, с gpt-oss-120b-MXFP4. Что такое MoE можно почитать здесь – Mixture of Experts (MoE)

Тестирование производительности

Всё, что связано с LDM, пропущу – это более специфичные нейронки и их лучше тестировать отдельно. Речь будет идти только о более или менее популярных LLM.

Для тестирования производительности обычно использую llama.cpp, а целевой метрикой является количество токенов в секунду. Вообще, финальную производительность можно примерно прикинуть зная пропускную способность памяти и размер модели (при условии, что CPU/GPU могут полностью загрузить память).

tps=memory_bandwidthmodel_size tps = \frac{memory\_bandwidth}{model\_size}

Например, размер Qwen2.5-Coder-14B-Instruct-GGUF = 11.29 GiB, пропускная способность памяти для AI Max+ 395 = 256 GB/s. Абсолютная пиковая скорость будет 22,67 токенов в секунду.

modelsizeparamstestt/s (Vulkan)
qwen2 14B Q6_K11.29 GiB14.77 Bpp512360.41 ± 1.78
tg12818.30 ± 0.02

Для MoE моделей такой расчёт неприменим, так как количество активных экспертов может быть разным. Далее результаты тестирования по некоторым моделям, которые использовал. При тестировании использовались одинаковые параметры llama.cpp – ngl: 99, backend: Vulkan | CUDA, version: 6881 (8b11deea4). Версия llama.cpp не последняя (30 октября), но думаю, не критично. Флаг flash attention не использовался, так как не со всеми моделями корректно работает.

AMD Ryzen™ AI Max+ 395

Основное использование – это MoE модели или небольшие модели для специализированных задач. То есть вместо одной огромной используем много маленьких без необходимости выгрузки из памяти.

Ниже видно, что MoE модели выдают неплохую скорость. А вот без MoE заметно медленнее, ~10 токенов в секунду, что не так уж и много. Либо нужно снижать количество параметров и уровень квантования – теряем в качестве.

modelsizeparamstestt/s (Vulkan)
gpt-oss-20b-MXFP4
gpt-oss 20B MXFP4 MoE11.27 GiB20.91 Bpp5121100.52 ± 8.49
tg12869.69 ± 5.59
gpt-oss-120b-MXFP4
gpt-oss 120B MXFP4 MoE59.02 GiB116.83 Bpp512400.90 ± 32.58
tg12847.61 ± 2.69
GLM-4.5-Air-Q4_K_M-
glm4moe 106B.A12B Q4_K - Medium67.85 GiB110.47 Bpp512225.26 ± 6.30
tg12823.12 ± 0.05
GLM-4.5-Air-Q6_K
glm4moe 106B.A12B Q6_K92.20 GiB110.47 Bpp512211.57 ± 6.04
tg12818.24 ± 0.01
GLM-4-32B-0414-Q8_0
glm4 32B Q8_032.23 GiB32.57 Bpp512196.50 ± 1.60
tg1286.51 ± 0.00
THUDM_GLM-4-32B-0414-Q4_K_M
GLM-Z1-32B-0414-Q4_K_M
glm4 32B Q4_K - Medium18.32 GiB32.57 Bpp512169.14 ± 2.79
tg12811.10 ± 0.01
Qwen3-Coder-30B-A3B-Instruct-Q4_K_M
qwen3moe 30B.A3B Q4_K - Medium17.35 GiB30.53 Bpp512661.49 ± 133.28
tg12880.57 ± 7.48
qwen3moe 30B.A3B Q8_030.25 GiB30.53 Bpp512817.30 ± 33.48
tg12857.13 ± 0.12
Qwen3-32B-Q4_K_M
qwen3 32B Q4_K - Medium18.40 GiB32.76 Bpp512156.96 ± 3.09
tg12810.63 ± 0.37
Qwen3-30B-A3B-Instruct-2507-Q8_0
qwen3moe 30B.A3B Q8_030.25 GiB30.53 B832.17 ± 42.78
57.41 ± 0.13
DeepSeek-R1-Distill-Qwen-32B-Q4_K_M
qwen2 32B Q4_K - Medium18.48 GiB32.76 Bpp512165.44 ± 2.30
tg12811.12 ± 0.00
Seed-OSS-36B-Instruct-Q4_K_M
seed_oss 36B Q4_K - Medium20.26 GiB36.15 Bpp512143.77 ± 2.18
tg12810.07 ± 0.00
gemma-3-27b-it-Q4_K_M
gemma3 27B Q4_K - Medium15.40 GiB27.01 Bpp512202.81 ± 3.38
tg12812.62 ± 0.01
uigen-t2-7b-3600-q8_0
qwen2 7B Q8_07.54 GiB7.62 Bpp5121004.14 ± 3.47
tg12828.57 ± 0.08

Пример использования памяти для gpt-oss 120B MXFP4 MoE с контекстным окном в 131072 токенов (по умолчанию).

Shell
Device 0 [Radeon 8060S Graphics] Integrated GPU RX: N/A TX: N/A
GPU 607MHz  MEM 995MHz  TEMP  38°C   CPU-FAN   POW  13 W
GPU[                                0%] MEM[|||||||||||||||||66.485Gi/96.000Gi]

GeForce RTX 4090

Тут, как говорится, результат на лицо. В случае с выделенной видеокартой становится видна значительная разница по скорости. Пропускная способность памяти в 4 раза выше (1008 GBs / 256 GBs = 3,9).

Повторять манипуляции производителей в рекламе своих MiniPC не хочу. Они грузили большие модели в видеокарту (4090/5090) размером больше доступной видеопамяти и показывали, какая же она медленная по сравнению с их коробками. Естественно, что она будет медленнее при разделении модели между видеокартой и обычным CPU/DDR. Поэтому ниже только подходящие модели.

modelsizeparamstestt/s (Vulkan)t/s (CUDA)
gpt-oss-20b-MXFP4
gpt-oss 20B MXFP4 MoE11.27 GiB20.91 Bpp5127447.68 ± 142.477924.12 + 316.06
tg128229.38 ± 1.32243.25 + 1.27
THUDM_GLM-4-32B-0414-Q4_K_M
GLM-Z1-32B-0414-Q4_K_M
glm4 32B Q4_K - Medium18.32 GiB32.57 Bpp5122071.50 ± 7.692327.95 + 84.19
tg12843.07 ± 0.0842.25 + 0.01
Qwen3-Coder-30B-A3B-Instruct-Q4_K_M
qwen3moe 30B.A3B Q4_K - Medium17.35 GiB30.53 Bpp5126700.04 ± 198.315879.15 + 803.38
tg128225.99 ± 0.34221.93 + 1.52
Qwen3-32B-Q4_K_M
qwen3 32B Q4_K - Medium18.40 GiB32.76 Bpp5122281.27 ± 18.262482.88 + 22.19
tg12843.37 ± 0.1442.32 + 0.32
DeepSeek-R1-Distill-Qwen-32B-Q4_K_M
qwen2 32B Q4_K - Medium18.48 GiB32.76 Bpp5122394.99 ± 76.602272.80 + 80.91
tg12843.35 ± 0.1142.81 + 0.02
Seed-OSS-36B-Instruct-Q4_K_M
seed_oss 36B Q4_K - Medium20.26 GiB36.15 Bpp5122015.26 ± 8.861959.58 + 57.37
tg12839.24 ± 0.1338.93 + 0.02
gemma-3-27b-it-Q4_K_M
gemma3 27B Q4_K - Medium15.40 GiB27.01 Bpp5122750.26 ± 14.903071.58 + 8.98
tg12847.66 ± 0.2147.84 + 0.03
uigen-t2-7b-3600-q8_0
qwen2 7B Q8_07.54 GiB7.62 Bpp5129620.73 ± 105.589553.25 + 701.28
tg128113.00 ± 0.11106.85 + 3.04

Разница между Vulkan и CUDA на уровне погрешности. Возможно, что-то специфично можно включить для CUDA и станет быстрее, но я не разбирался.

А вот пример того, что бывает когда часть слоёв не помещается в видеопамять и выгружается в оперативную. Итоговая скорость на RTX 4090 + DDR4(64 GiB) в три раза медленнее, чем на AI Max+ 395 (LPDDR5x). Использовать нельзя.

modelsizeparamstestt/s
glm4 32B Q8_032.23 GiB32.57 Bpp51263.61 + 0.05
tg1282.27 + 0.00
gpt-oss 120B MXFP4 MoE59.02 GiB116.83 Bpp512108.61 + 9.20
59.02 GiB116.83 Btg12818.94 + 0.21

gpt-oss 120B запускался с --n-cpu-moe 20. Значение больше или меньше приводило только к замедлению.

Итоговая конфигурация

В итоге использую всё, что доступно. Сейчас ПК с отдельно видеокартой используется в меньшей степени. Основная часть моделей переехала на MiniPC. В таблице ниже примерное распределение по основным группам задач.

ЧтоЗачем
Laptop
RTX 3050
6 GiB
Запущены пара моделей для векторизации, ранжирования. TEI – у HuggingFace есть производительные решения и они не работают с AMD.
MiniPC
AI Max+ 395
128 GiB
Модели с MoE для чатов, автодополнение, анализа текста (llama.cpp). Выделение оперативной памяти: 32 GiB под приложения и ОС, 96 GiB под модели.
Desktop
GeForce RTX 4090
24 GiB
Модели без MoE (LM Studio), генерации 2D/3D (ComfyUI, Automatic1111, кастомные проекты), распознавание речи (vibe, Scriberr c диаризацией).

В планах еще установить и настроить Open WebUI, чтобы под собой объединить всё это вместе, но пока руки не доходят.

Важно учитывать, что с AMD есть проблемы на Linux с поддержкой ROCm. Она есть только в Ubuntu 22/24 и судя по отзывам работает с проблемами. Надеюсь AMD всё-таки доведёт до стабильного состояния альтернативу монополии Nvidia с их CUDA. А пока, реализация бекенда на Vulkan самая стабильная на текущий момент.

В качестве экспериментов ещё были и есть дополнительные сервисы, но почти не использую сейчас:

  • n8n – первопроходцы можно сказать, удобный инструмент для выстраивания процессов.
  • RAGFlow – RAG, работа с документами и базой знаний.
  • OpenHands – WebIDE на базе VSCode с агентом.
  • Ollama – вообще не понял почему так популярна, но пробовал использовать.

Пара примеров для llama.cpp

Ну и пример запуска llama.cpp в качестве OpenAI совместимого сервера, если кому-то интересно.

GPT-OSS-120b
Shell
#!/usr/bin/env bash  
  
MODEL=gpt-oss-120b-MXFP4-00001-of-00002.gguf  
  
llama-server --host 0.0.0.0 --port 1234 \
 -c 0 \
 --batch-size 2048 --ubatch-size 2048 \
 --temp 1 --top-p 1 --top-k 0 \
 --flash-attn on --no-warmup --jinja \
 --alias "gpt-oss" -m ${MODEL}
Qwen3-Coder-30B-A3B-Instruct
Shell
#!/usr/bin/env bash

MODEL=Qwen3-Coder-30B-A3B-Instruct-Q8_0.gguf

llama-server --host 0.0.0.0 --port 1234 \
 -c 65536 \
 --batch-size 1024 --ubatch-size 256 \
 --n-predict 2048 \
 --temp 0.7 --top-p 0.8 --top-k 20 \
 --repeat-penalty 1.05 \
 -ctk q8_0 -ctv q8_0 \
 --flash-attn on --no-warmup --jinja \
 --alias "qwen-coder" -m ${MODEL}

А стоит ли оно того?

Оговорюсь сразу, что с генеративными моделями еще в где-то 2022 году начал экспериментировать. Тогда и появилась необходимость в железе, которое это всё могло локально запускать. Облачные сервисы не были так распространены, как сейчас. Совокупный бюджет на всё это – видеокарта GeForce RTX 4090 (2023 год) и MiniPC AMD Ryzen™ AI Max+ 395 (2025 год).

Окупилось ли это? Учитывая сколько времени было потрачено на эксперименты, работу с LLM/LDM, то скорее да, чем нет. Подозреваю, всякие подписки, покупки токенов и платные аккаунты сожрали бы поболее за три года. К тому же, это железо используется и будет использоваться для других целей, а не только для AI.

А если в целом смотреть, уверен, что цены для публичных сервисов будут повышаться в будущем. Сейчас многие сервисы с AI, по сути, убыточны и эта гонка с демпингом рано или поздно закончится. Нужно будет возвращать инвестиции, а “стричь” будут обычных пользователей и корпоративных клиентов, которые уже не смогут нормально работать без привычных инструментов.

Заключение

Использовать или нет локальные модели AI всё-таки зависит от насущных потребностей и интересов. В моём случае это было оправдано – сначала просто было интересно и нужно для своих проектов, потом по основной работе.

Если же всё ограничивается только рабочими задачами, вдобавок ещё бесплатно и оплачивается работодателем, то очевидно, что оно того не стоит.

Ai-Workflow Llm Hardware Homelab Ai Genai