Пять бывших майнинговых карт NVIDIA CMP 90HX, четыре из которых подключены по PCIe x8 и одна по PCIe x4, дают llama.cpp 49 383 MiB видеопамяти. Этого хватает, чтобы держать все слои модели Qwen3.8-27B-Heretic на GPU и не уходить в системную память. Автор проекта на Habr довёл сборку до третьего этапа: сначала собрал сервер на двух Xeon, затем через драйверный механизм V67 снял вычислительные ограничения CMP 90HX, а теперь занялся охлаждением и распределением модели между картами.

CMP 90HX — это карта на архитектуре GA102, которую NVIDIA выпускала для майнинга и программно ограничивала по вычислительным возможностям. После применения V67 карта вернула значительную часть производительности, которая физически в ней уже была. Побочный эффект — рост тепловыделения: в простое температура поднялась примерно до 60 °C, под нагрузкой до 90 °C. Автор подключил к серверу напольный кондиционер, который подаёт охлаждённый воздух, а горячий отводит в окно. В простое карты остыли до примерно 9 °C, под полной нагрузкой держатся около 60 °C.

РежимPrefill, tok/sDecode, tok/s
Layer split1992,6723,76
Tensor split268,4631,93

Следующий эксперимент касался того, как именно раскладывать модель по картам. В llama.cpp есть два режима. Layer split размещает разные слои модели на разных GPU: одна карта считает свой участок, затем передаёт промежуточный результат следующей. Tensor split делит одну большую операцию между несколькими GPU одновременно — вычисления распределяются эффективнее, но резко растёт число обменов между картами. У CMP 90HX нет NVLink, поэтому весь этот трафик идёт через PCIe, и именно шина становится узким местом.

После вычислительной разблокировки через V67 карты стали греться сильнее: в простое около 60 °C, под нагрузкой до 90 °C.

На Qwen3.8-27B-Heretic разница оказалась разнонаправленной. Layer split показал prefill 1992,67 tok/s и decode 23,76 tok/s. Tensor split — prefill 268,46 tok/s и decode 31,93 tok/s. То есть генерация выросла примерно на треть, а обработка входа упала более чем в семь раз. Для локального агента, который читает исходники драйвера, логи ядра и документацию, prefill — заметная часть времени ответа: разница между 250 и 2000 tok/s ощущается на каждом запросе. Для короткого диалога, наоборот, важнее decode.

Автор отдельно оговаривает, что эксперименты растянулись во времени и программное окружение по ходу менялось: в отдельных тестах использовались близкие по размеру и архитектуре, но не идентичные модели. Токен в токен результаты совпадать не обязаны, важнее масштаб эффекта — десятки процентов. Это типичная проблема домашних бенчмарков LLM: обновление llama.cpp, смена квантования или версии драйвера легко дают разброс, сопоставимый с измеряемым эффектом.

Практический вывод для тех, кто собирает локальный сервер из CMP 90HX: tensor split имеет смысл, когда узкое место — генерация, а не обработка длинного контекста. Если сценарий — агент с большими объёмами входных данных, layer split остаётся предпочтительным. И в обоих случаях отсутствие NVLink означает, что пропускная способность PCIe Gen2 x16 задаёт потолок для любого межкарточного обмена.