Собираем домашний сервер для локальных LLM на доступных GPU (NVIDIA CMP 50HX)


Привет! Меня зовут Александр Щербаков, я DevOps-инженер в X5 Tech. В одной из прошлых статей я рассказывал о домашних серверах на потребительском железе. Сегодня поговорим о том, как моя лаборатория доросла до серверной платформы и двух CMP 50HX с 20 ГБ видеопамяти каждая.
С локальными LLM я пока разбираюсь и хочу поделиться тем, что получилось: от покупки карт и неудачного первого запуска до настройки сервера и замеров. Кому интересна такая затея — добро пожаловать под кат.
Часть 1. С чего всё началось
Итак, что за CMP 50HX? Это майнинговая карта NVIDIA на кристалле TU102 — родственница RTX 2080 Ti, но с своими ограничениями. В штатном варианте у неё 10 ГБ видеопамяти, а у карт, о которых пойдёт речь, исходно был ограничен и интерфейс PCIe. Вот её подробная спецификация.
После спада майнингового бума такие карты стали попадаться на вторичке. Когда я искал варианты для себя, обычную версию на 10 ГБ можно было найти примерно за 5 тысяч рублей. Но однажды на маркетплейсе мне попался мод: недостающие компоненты на линиях PCIe допаяли, и карта получила PCIe 1.1 ×16. Главное же, вместо 10 ГБ на ней было уже 20 ГБ видеопамяти. Цена — 16 тысяч рублей за штуку.
В июне я купил такие в надежде получить суммарные 40 ГБ. Правда, две видеокарты не превращаются автоматически в одну с общей памятью: модель ещё нужно распределить между ними средствами движка.

Примерно через неделю приехала посылка с заветными картами. Продавец не обманул: по 20 ГБ видеопамяти и 16 линий PCIe у каждой.

Но тут я упёрся в новые ограничения со стороны своего железа. У меня был собран сервер на домашней ASRock B460M Pro4. У неё два разъёма формата ×16, но электрически они работают как ×16 и ×4. Первый подключён к процессору, а второй через чипсет. То есть два длинных слота ещё не означают две одинаковые по пропускной способности линии к GPU.
В двухкарточном режиме я столкнулся с заметным падением скорости. Подозревал и топологию платы, и ограничения самих карт, описанные в этих материалах: статья 1 и статья 2. Если кратко, речь шла об ограничениях вычислительной производительности CMP относительно обычных карт на TU102.
В первых запусках модели помещались в память одной карты, но по мере заполнения контекста заметно тормозили. На коротком запросе всё ещё выглядело неплохо, а вот длинного диалога уже приходилось ждать.
Я попробовал распределить модели между двумя GPU и перебрал четырёх-, пяти- и шестибитные кванты, но ожидаемого ускорения не получил. Что именно мешало сильнее — плата, PCIe 1.1 или ограничения CMP, тогда по отдельности не проверял.
В общем, первый заход оказался не тем, о чём хотелось писать статью, и я на время отложил черновик. Но сама идея никуда не делась. Я давно хотел серверную плату: побольше полноценных слотов PCIe и удаленное управление через BMC, чтобы не бегать к серверу с монитором. Неудачный первый заход стал хорошим поводом наконец её купить.
В итоге собрал следующую конфигурацию:
Новая материнская плата TYAN S8030GM2NE под процессоры EPYC 2 и 3 поколения
Сам процессор EPYC 7K62 — 48 физических ядер и 96 потоков с частотами от 2,6 до 3,3 ГГц (б/у)
Оперативная память DDR4-2133 ECC: восемь модулей по 16 ГБ, суммарно 128 ГБ. На модулях маркировка Huawei, чипы Micron. Взял б/у: хотелось что-то понятное по происхождению и без лишней переплаты.
Серверный NVMe SSD Samsung формата 22110 на 4 ТБ, тоже б/у. Наработка — около 3000 часов. При покупке такого диска я бы смотрел ещё на SMART, объём записанных данных и ошибки: одних часов мало.
Модульный блок питания DeepCool на 1200 Вт — его купил новым.
Процессорный кулер ARCTIC Freezer 4U-M Rev. 2 под сокет SP3 и корпусные вентиляторы ARCTIC: два на 140 мм и один на 120 мм.
Корпус Jonsbo N5. Всё железо в него поместилось, а заодно появились 12 мест под HDD — лаборатория сама себя не расширит.


Пару слов о материнке. Здесь пять слотов PCIe 4.0 ×16, восемь каналов памяти и BMC с удалённой консолью. По дискам тоже есть куда расти: двенадцать SATA-портов выведены через три Mini-SAS HD, ещё два — отдельными разъёмами. Для моего домашнего сервера это уже совсем другой простор по сравнению с прежней платой.

Комплектные вентиляторы оказались слишком шумными, поэтому заменил их на ARCTIC. У штатных было трёхпиновое подключение, без PWM. Возможность регулировать их напряжением зависит от платы.
Часть 2. Разблокировка карт и первые нормальные результаты
Пока я собирал все комплектующие по онлайн-площадкам и продавал железо, которое у меня было, наступил сентябрь 2026 года. Просматривая интернет, я наткнулся на репозиторий с патчами драйвера NVIDIA для Linux. Проект снимает часть ограничений вычислений и позволяет включить PCIe Gen2 на поддерживаемых CMP 50HX.
Установил Proxmox, создал виртуальную машину, пробросил обе GPU и применил патчи. Наконец карты заработали так, что захотелось вернуться к черновику статьи. Отдельный idle-governor управляет P-state в простое. В моей конфигурации потребление снизилось примерно с 65 до 15–20 Вт на карту. Дальше покажу, что получилось в тестах.
Сразу разделю две вещи: 20 ГБ памяти и 16 линий PCIe у моих карт появились после аппаратной переделки. Патч драйвера снимает другие ограничения. Повторять его установку лучше по инструкции проекта, с проверкой своей ревизии карты и версии драйвера.
Сравнение модифицированной CMP 50HX (20 ГБ) с RTX 2080 Ti (22 ГБ)
Для ориентира сравню характеристики с модифицированной RTX 2080 Ti на 22 ГБ. Кристаллы у них одного семейства — Turing TU102, но у CMP меньше вычислительных блоков и уже шина памяти. Саму RTX в этих тестах я не запускал.
Хар-ка | RTX 2080 Ti | CMP 50HX | Отношение CMP к 2080 Ti |
|---|---|---|---|
Кристалл GPU | TU102 | TU102 | TU102 |
CUDA-ядра | 4352 | 3584 | 82.4% |
Tensor-ядра | 544 | 448 | 82.4% |
Шина памяти | 352-bit (11 чипов по 2 ГБ) | 320-bit (10 чипов по 2 ГБ) | 90.9% |
Пропускная способность памяти | 616 ГБ/с (GDDR6 14 Gbps) | 560 ГБ/с (GDDR6 14 Gbps) | 90.9% |
PCIe | Gen3 ×16 (~15.8 ГБ/с) | Gen2 ×16 (до 8 ГБ/с в одну сторону, теоретически) | Около 51% по пропускной способности PCIe |
Лимит мощности / справочная мощность | 250–260 Вт | 225 Вт — лимит моих карт по nvidia-smi |
Тестовая виртуальная машина
Параметр | Текущая ВМ: контрольные тесты |
|---|---|
CPU | AMD EPYC 7K62 (8 vCPU) |
RAM | 16 GiB |
GPU 0 | CMP 50HX, 20480 MiB, PCIe Gen2 ×16 |
GPU 1 | CMP 50HX, 20480 MiB, PCIe Gen2 ×16 |
Драйвер | NVIDIA 610.43.03 с патчами, установленный через DKMS |
Управление питанием | cmp-idle-governor.service |
В виртуальную машину поставил Docker и поднял BeeLlama.cpp — форк llama.cpp с доработками для ускорения инференса. В таблице выше указаны текущие 8 vCPU и 16 GiB RAM. В журнале первых замеров ВМ имела 16 vCPU и 32 GiB, поэтому старые результаты и контрольный прогон ниже подписаны отдельно.
Как читать результаты
Чтобы дальше не путаться: prefill — обработка входного текста, decode — генерация новых токенов. В тестах с растущим контекстом часть входа уже лежит в кэше, а grow prefill показывает обработку добавленной части. Поэтому по нему нельзя узнать, сколько займёт загрузка всего документа с нуля.
Размеры контекста пишу в токенах: 32K — это 32768, а 256K — 262144. Точка 260000 до полного окна немного не доходит. Расход видеопамяти беру из nvidia-smi в MiB; 1024 MiB = 1 GiB. Это память, занятая сервером, а не размер файла модели на диске.
Часть 3. Проверяем модели
Настройки, команды запуска и данные для пересчёта результатов собрал в репозитории GitLab. Начать можно с инструкции в current/README.md: там есть Compose и готовые .env для каждой модели. Для своих замеров — benchmarks/README.md, а сводные результаты лежат в BENCHMARKS.md.
Сначала запустил модель без MTP, затем включил Multi-Token Prediction. Смысл простой: небольшой драфт-модуль предлагает продолжение, а основная модель проверяет его. Если предложения часто подходят, за один шаг удаётся продвинуться дальше. Но сама проверка тоже занимает время, поэтому глубину MTP ещё предстояло подобрать.
Qwen3.8-27B IQ4_NL: первые замеры на одной карте
Без MTP
Контекстное окно сервера: 131208 (128K+)
KV Cache: q4_0 / q4_0
Занятая VRAM: 18223 MiB / 20480 MiB (Свободный запас: 2257 MiB)
Все пять точек прошли без ошибок. Здесь и в следующих лесенках IQ4_NL контекст заполнен повторяющимся токеном. Такой тест показывает, как меняется скорость с заполнением кэша (скорость работы с настоящим документом может отличаться).
Фактический контекст | Grow prefill (ток/с) | Decode (ток/с) |
|---|---|---|
4096 | 116.62 (весь вход) | 26.47 |
32768 | 541.01 ток/с | 20.81 |
65536 | 396.59 ток/с | 16.90 |
98304 | 308.73 ток/с | 14.06 |
131072 (128K) | 252.46 ток/с | 12.14 |
С MTP: draft-n-max 1
Фактический контекст | Без MTP (ток/с) | С MTP (ток/с) | Ускорение от MTP |
|---|---|---|---|
4096 | 26.47 | 41.61 | +57.2% |
32768 | 20.81 | 33.45 | +60.7% |
65536 | 16.90 | 27.48 | +62.6% |
98304 | 14.06 | 23.28 | +65.6% |
131072 (128K) | 12.14 | 20.21 | +66.5% |
На 131072 токенах с MTP получилось 20.21 токена/с против 12.14 без него — прирост примерно 66.5%. Для одной карты результат меня уже устраивал.
Qwen3.6-35B-A3B: IQ4_NL на одной и двух картах
Модель: Qwen3.6-35B-A3B-UD-IQ4_NL.gguf
Это MoE-модель: всего около 35 млрд параметров, но для каждого токена используется лишь часть. В ней 40 основных слоёв, 256 маршрутизируемых экспертов, из которых выбираются восемь, и один общий эксперт. Вот что это даёт по скорости и памяти.
Короткий тест: одна и две GPU, с MTP и без него
Режим / Конфигурация | VRAM GPU 0 | VRAM GPU 1 | Decode (ток/с) | Принято драфтов | Cold prefill (ток/с) |
|---|---|---|---|---|---|
1 GPU Base (без MTP) | 17513 MiB | 0 MiB | 93.36 ± 0.12 ток/с | — | 1375.37 ток/с |
1 GPU MTP (depth 1) | 17681 MiB | 0 MiB | 120.32 ± 0.02 ток/с | 96.9% (186/192) | 1228.41 ток/с |
2 GPU Base (split-mode layer) | 8789 MiB | 9049 MiB | 93.38 ± 0.02 ток/с | — | 1372.99 ток/с |
2 GPU MTP (split-mode layer) | 8825 MiB | 9239 MiB | 118.01 ± 0.17 ток/с | 96.9% (186/192) | 1231.01 ток/с |
Что получилось с IQ4_NL
В коротком тесте на одной карте модель выдала 93.36 токена/с без MTP и 120.32 с ним. Принято 186 из 192 предложенных драфт-токенов — 96.9%.
С MTP модель заняла 17681 MiB из 20480 MiB, осталось 2799 MiB. То есть для короткого запроса одной карты хватило с запасом.
На двух картах в том же коротком тесте занято 8825 и 9239 MiB. Скорость — 118.01 токена/с, почти как на одной GPU. Дальше покажу, как этот запас памяти помогает при росте контекста.
IQ4_NL: увеличиваем контекст
Две GPU: до 260000 токенов, split-mode layer
Контекст (токены) | Без MTP (ток/с) | С MTP (ток/с) | Прирост MTP | Принято драфтов | Grow prefill (ток/с) | VRAM GPU 0 / GPU 1 |
|---|---|---|---|---|---|---|
32768 (32K) | 68.19 ток/с | 94.60 ток/с | +38.7% | 100% (31/31) | 482.8 (весь вход) | 10988 / 11222 MiB |
65536 (64K) | 52.67 ток/с | 79.78 ток/с | +51.5% | 100% (31/31) | 1770.5 ток/с | 11035 / 11412 MiB |
131072 (128K) | 36.39 ток/с | 60.94 ток/с | +67.5% | 100% (31/31) | 1184.5 ток/с | 11210 / 11805 MiB |
196608 (192K) | 27.52 ток/с | 49.33 ток/с | +79.3% | 100% (31/31) | 816.4 ток/с | 11390 / 12180 MiB |
260000 (~253.9K) | 22.32 ток/с | 41.64 ток/с | +86.6% | 100% (31/31) | 623.4 ток/с | 11650 / 12893 MiB |
В этой серии MTP помогает сильнее по мере заполнения контекста: прирост с 38.7% на 32768 токенах до 86.6% на 260000. В последней строке это 22.32 и 41.64 токена/с.
Одна GPU: до 192000 токенов
Контекст (токены) | Без MTP (ток/с) | С MTP (ток/с) | Прирост MTP | Принято драфтов | Grow prefill (ток/с) | VRAM GPU 0 (из 20480 MiB) |
|---|---|---|---|---|---|---|
4096 (4K) | 90.37 ток/с | 116.48 ток/с | +28.9% | 100% (31/31) | ~1300 ток/с | 17680 MiB |
32768 (32K) | 66.51 ток/с | 95.84 ток/с | +44.1% | 100% (31/31) | 1843.1 ток/с | 18120 MiB |
65536 (64K) | 50.72 ток/с | 78.83 ток/с | +55.4% | 100% (31/31) | 1267.4 ток/с | 18590 MiB |
131072 (128K) | 34.54 ток/с | 59.62 ток/с | +72.6% | 100% (31/31) | 844.4 ток/с | 19180 MiB |
192000 (187.5K) | 26.62 ток/с | 48.38 ток/с | +81.7% | 100% (31/31) | 589.4 ток/с | 19765 MiB (запас 715 MiB) |
Одна карта или две?
На 32768 токенах с MTP получилось 95.84 токена/с на одной карте и 94.60 на двух — практически рядом. Вторая карта даёт прежде всего запас памяти, а не удвоение скорости одного ответа.
На одной карте я дошёл до 192000 токенов: свободно осталось 715 MiB. На двух при 260000 токенов занято 11650 и 12893 MiB — запас заметно больше. Смотреть нужно на обе карты: свободная память одной не спасёт от переполнения другой.
Qwen3.6-35B-A3B: более тяжёлый квант Q6_K
Модель: Qwen3.6-35B-A3B-UD-Q6_K.gguf
Конфигурации:
2 GPU: Полный оффлоад в VRAM (-ngl 99, split-mode layer). С MTP занято 14411 и 14595 MiB из 20480 MiB на каждой карте.
1 GPU: часть модели на GPU (-ngl 25), остальная — в системной RAM.
Q6_K: полный GPU-оффлоад и гибридный режим
Режим / Конфигурация | VRAM GPU 0 | VRAM GPU 1 | RAM | Decode (ток/с) | Принято драфтов | Cold prefill (ток/с) |
|---|---|---|---|---|---|---|
2 GPU MTP (split-mode layer, ngl 99) | 14411 MiB | 14595 MiB | ~2.5 GiB | 116.16 | 96.9% (186/192) | 1173.88 ток/с |
2 GPU Base (split-mode layer, ngl 99) | 14375 MiB | 14405 MiB | ~2.5 GiB | 90.56 | — | 1305.99 ток/с |
1 GPU MTP (hybrid ngl 25, depth 1) | 17413 MiB | 0 MiB | ~13.0 GiB | 42.93 | 96.9% (186/192) | 210.28 ток/с |
1 GPU Base (hybrid ngl 25, без MTP) | 17273 MiB | 0 MiB | ~12.5 GiB | 29.03 | — | 221.72 ток/с |
IQ4_NL и Q6_K: сравнение конфигураций
Метрика / Конфигурация | IQ4_NL (4-bit) | Q6_K (6-bit) | Разница / Вывод |
|---|---|---|---|
2 GPU + MTP (Decode) | 118.01 ток/с | 116.16 ток/с | Q6_K медленнее примерно на 1.6% в этом тесте |
2 GPU Base (Decode) | 93.38 ток/с | 90.56 ток/с | Q6_K медленнее примерно на 3.0% в этом тесте |
VRAM GPU 0 / GPU 1 с MTP | 8825 / 9239 MiB | 14411 / 14595 MiB | Оба кванта целиком на двух GPU |
1 GPU + MTP (Decode) | 120.32 ток/с | 42.93 ток/с | Вариант с Q6_K и RAM медленнее в 2.8 раза |
1 GPU Base (Decode) | 93.36 ток/с | 29.03 ток/с | Вариант с Q6_K и RAM медленнее в 3.2 раза |
Что это означает для моей сборки
На одной карте IQ4_NL поместился без CPU-оффлоада и в коротком тесте с MTP выдал 120.32 токена/с. Гибридная конфигурация Q6_K с -ngl 25 дала 29.03 токена/с без MTP и 42.93 с ним.
На двух картах Q6_K уже поместился в VRAM целиком. С MTP получил 116.16 токена/с против 118.01 у IQ4_NL — разница около 1.6%. Вот поэтому мне пригодилась вторая карта: можно взять более тяжёлый квант и обойтись без вычислений на CPU.
Qwen3.6-35B-A3B Q6_K_XL: что получилось на длинном входе
Для следующей серии взял UD-Q6_K_XL из репозитория Unsloth и выставил окно 262 144 токена. Суффикс XL (Extra Large) обозначает более объёмный вариант квантования: при базовой 6-битной схеме часть весов сохраняется с повышенной точностью, чтобы уменьшить потери качества. Точное имя файла и SHA256 указаны в MODELS.md.
Распределение VRAM при окне 256K в исходной серии:
GPU 0: 17945 MiB / 20480 MiB (Свободный запас: 2535 MiB)
GPU 1: 19487 MiB / 20480 MiB (Свободный запас: 993 MiB)
Суммарно: 37432 MiB из 40960 MiB.
Q6_K_XL: исходная лесенка контекста с MTP
Оставил draft-n-max 2, temperature 0.6, top_p 0.95, top_k 20, min_p 0 и включённые рассуждения. На каждой точке — один ответ на 400 токенов, все они ушли в рассуждения. Есть особенность скрипта: названия шагов 4K–250K не совпали с реальной длиной. Поэтому во втором столбце привожу вход по счётчикам сервера. Последний запрос даже короче предыдущего — так сохранилось в исходном результате.
Название шага | Фактический вход, токены | Prefill суффикса (ток/с) | Время префилла (с) | Decode (ток/с) | Драфты: предложено / принято | Принято драфтов | VRAM GPU 0 / GPU 1 (MiB) |
|---|---|---|---|---|---|---|---|
4K Baseline | 5221 | 1991.1 ток/с | 2.26 с | 98.0 ток/с | 353 / 222 | 62.9% | 17943 / 19487 |
32K Context | 41409 | 1702.5 ток/с | 21.56 с | 86.3 ток/с | 330 / 234 | 70.9% | 17943 / 19487 |
64K Context | 82909 | 1225.0 ток/с | 34.30 с | 70.7 ток/с | 336 / 231 | 68.8% | 17945 / 19487 |
128K Context | 165909 | 853.2 ток/с | 97.89 с | 54.0 ток/с | 331 / 233 | 70.4% | 17945 / 19487 |
192K Context | 248909 | 603.4 ток/с | 138.40 с | 42.9 ток/с | 333 / 232 | 69.7% | 17945 / 19487 |
250K Maximum | 244925 | 576.5 ток/с | 137.95 с | 42.4 ток/с | 341 / 228 | 66.9% | 17945 / 19487 |
Ornith-1.5-35B-A3B: Q6_K на двух картах
Модель: Ornith-1.5-35B-Q6_K.gguf
По устройству Ornith похожа на предыдущую MoE: около 35 млрд параметров, из них около 3 млрд активны на токен. В GGUF — 40 основных слоёв: 30 DeltaNet и 10 обычного внимания, плюс один MTP-блок. Проверяю её отдельно, со своим файлом весов и настройками.
Контекстное окно сервера: 262144 токена (полные 256K).
Параметры инференса: --split-mode layer --flash-attn on --cache-type-k q4_0 --cache-type-v q4_0 --spec-type draft-mtp --spec-draft-n-max 2
Сколько памяти занял сервер с окном 262144
GPU 0: 17577 MiB / 20480 MiB (Свободный запас: 2903 MiB / 2.84 GiB)
GPU 1: 17837 MiB / 20480 MiB (Свободный запас: 2643 MiB / 2.58 GiB)
Свободно 5546 MiB на двух картах, примерно 5.42 GiB. В этой серии ошибок нехватки памяти не было.
Ornith: заполняем контекст, draft-n-max 2
Контекст (токены) | Grow prefill (ток/с) | Время Prefill (сек) | Decode (ток/с) | Drafts Предл. / Принято | Принято драфтов |
|---|---|---|---|---|---|
32768 (32K) | 824.14 ток/с | 39.76 (весь вход) | 118.12 ± 0.11 ток/с | 84 / 84 | 100.0% (84/84) |
65536 (64K) | 1706.15 ток/с | 19.13 с | 100.37 ± 0.04 ток/с | 84 / 84 | 100.0% (84/84) |
131072 (128K) | 1151.68 ток/с | 56.79 с | 77.49 ± 0.02 ток/с | 84 / 84 | 100.0% (84/84) |
196608 (192K) | 796.03 ток/с | 82.17 с | 63.19 ± 0.01 ток/с | 84 / 84 | 100.0% (84/84) |
256K | 610.01 ток/с | 103.71 с | 53.42 ± 0.03 ток/с | 84 / 84 | 100.0% (84/84) |
Что видно по результатам Ornith
Здесь скрипт повторяет один token-id, а затем трижды запускает генерацию 128 токенов на уже заполненном кэше. Знак ± — разброс скорости этих трёх повторов (стандартное отклонение). Последнюю точку в таблицах Ornith обозначаю 256K по размеру окна сервера, но фактически вход в ней — 260000 токенов. Все 84 предложенных драфт-токена были приняты, но такой синтетический вход не проверяет качество кода или ответов модели.
В последней точке получилось 53.42 токена/с. Полный ответ на 128 токенов занял в среднем 3.11 с, когда контекст уже был в кэше. Это не время загрузки всего входа с нуля и не задержка до первого токена.
Ornith: увеличиваем draft-n-max с 2 до 3
Следом попробовал глубину 3. Длины входа и клиент те же: по три повтора, по 128 выходных токенов. В двух последних столбцах — время от отправки запроса до получения всего ответа. Эти старые серии запускались в разные дни, поэтому ниже добавлю и результат контрольного прогона.
Контекст, токены | Decode, depth 2 (ток/с) | Decode, depth 3 (ток/с) | Прирост скорости | Принято, depth 2 | Принято, depth 3 | Ответ 128 токенов, depth 2 | Ответ 128 токенов, depth 3 |
32768 (32K) | 118.12 ± 0.11 t/s | 126.75 ± 0.24 t/s | +7.30% | 100.0% (84/84) | 92.1% (93/101) | 1.24 с | 1.16 с |
65536 (64K) | 100.37 ± 0.04 t/s | 116.28 ± 0.03 t/s | +15.85% | 100.0% (84/84) | 100.0% (95/95) | 1.51 с | 1.33 с |
131072 (128K) | 77.49 ± 0.02 t/s | 91.47 ± 0.15 t/s | +18.04% | 100.0% (84/84) | 100.0% (95/95) | 2.05 с | 1.79 с |
196608 (192K) | 63.19 ± 0.01 t/s | 75.53 ± 0.08 t/s | +19.53% | 100.0% (84/84) | 100.0% (95/95) | 2.58 с | 2.26 с |
256K | 53.42 ± 0.03 t/s | 64.46 ± 0.15 t/s | +20.67% | 100.0% (84/84) | 100.0% (95/95) | 3.11 с | 2.71 с |
На длинном входе глубина 3 оказалась быстрее: 64.46 против 53.42 токена/с на 260000 токенах. Повторная проверка на нынешней ВМ дала близкие числа — 64.32 и 53.38. Но на входе 4096 токенов глубина 3 уже проиграла: 117.54 против 138.27. Так что просто поставить значение побольше и забыть не получится.
Что получилось в итоге
Я давно хотел погрузиться в тему локального инференса и получить побольше видеопамяти за разумные деньги. Брать Tesla V100 не хотелось: для Volta последней поддерживаемой линейкой остаётся CUDA 12.x, а с вариантами SXM2 пришлось бы отдельно решать вопрос переходников и охлаждения. Но повезло найти репозиторий с разблокировкой CMP. Для моей лаборатории доработанные CMP 50HX оказались удачным стартом. Причём начать можно и с одной карты. Qwen3.6-35B-A3B в IQ4_NL у меня целиком поместилась в её видеопамять.
Из практических задач я успел попробовать установку production-like Kubernetes на Proxmox через Terraform. Одинаковое задание дал Ornith и Qwen3.8-27B. В этой задаче Qwen подошёл мне лучше. С ним получилось справиться примерно за 1,5 часа, а с Ornith — за 2,5.
Дальше хочу попробовать написать своих агентов и развернуть их в Kubernetes. Заодно планирую посмотреть на Agent Substrate — открытый проект для запуска изолированных агентных окружений поверх Kubernetes. Он пока на ранней стадии разработки, но для экспериментов в домашней лаборатории мне как раз интересен.
Для подготовки этой статьи были использованы следующие ресурсы:
Репозиторий от Xrip по разблокировке CMP50/90HX https://github.com/xrip/cmp50hx-unlock
ChatGPT и Antigravity, которые по итогу помогли с тестами, ресерчем и составлением конфигов для моего личного репозитория к этой статье
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.