Перейти к содержанию
Публикация AiManual

KTransformers или llama.cpp для MoE-модели на нескольких GPU и в оперативной памяти

Практический разбор выбора между KTransformers и llama.cpp для MoE-моделей на 4 GPU по 16 ГБ и RAM. Разбираем FP8 и GGUF, CPU-GPU offload, распределение слоёв,

Коротко

Что будет в материале

  1. 01

    KTransformers или llama.cpp: короткий ответ для 4 GPU и RAM

  2. 02

    Что именно запускается: MoE, активные параметры и формат FP8

  3. 03

    Запуск MoE-модели на нескольких GPU и RAM: где возникают ограничения

  4. 04

    KTransformers vs llama.cpp для MoE: что сравнивать на уровне runtime

KTransformers или llama.cpp: короткий ответ для 4 GPU и RAM

Для системы с 4 GPU по 16 ГБ нельзя заранее назвать KTransformers или llama.cpp безусловным победителем. В предоставленных материалах нет прямых замеров этих runtime по скорости генерации, TTFT, загрузке VRAM, расходу RAM, схеме offload и меж-GPU обмену. Практический выбор зависит от трёх вещей: поддерживает ли конкретная версия runtime вашу архитектуру и файл модели, как размещаются веса и KV cache, какую скорость система сохраняет после включения CPU/RAM offload.

Проверку стоит начать с двух режимов на одном checkpoint: максимально возможное размещение весов в VRAM и смешанное размещение с частью данных в RAM. Первый режим показывает потенциал GPU и меж-GPU схемы. Второй отвечает на более жёсткий вопрос: останется ли генерация пригодной для работы, когда модель не помещается в память видеокарт. Факт успешной загрузки весов ещё ничего не говорит о задержке первого токена и tokens/s.

Для 4 x 16 ГБ главная опасность связана с ожиданием, что 64 ГБ VRAM автоматически работают как единая память. У каждой видеокарты свой локальный пул, а передача активаций, KV cache или выгруженных тензоров проходит через доступные соединения между GPU, CPU и RAM. При коротком контексте узким местом часто становится размещение весов. При длинном контексте к нему присоединяются KV cache и временные буферы.

Что именно запускается: MoE, активные параметры и формат FP8

Перед сравнением runtime нужно зафиксировать архитектуру, число общих параметров, число активных параметров на токен, формат весов и точное имя файла. Эти свойства отвечают на разные вопросы. Число активных параметров связано с объёмом вычислений на генерации, полный объём модели определяет, сколько экспертных весов нужно хранить, а формат файла задаёт требования к loader и backend.

Общие и активные параметры MoE: почему цифры отвечают на разные вопросы

MoE-модель хранит общий набор экспертов, хотя роутер выбирает для обработки каждого токена лишь часть из них. Поэтому формула вида «4B active, значит памяти нужно как для 4B-модели» неверна. Активные параметры помогают оценить вычислительную нагрузку на один токен. В память при этом должны попасть общие слои, экспертные веса, роутер, таблицы и буферы runtime.

Показательный пример даёт K2-Horizon-MoVA-36B-A4B: модель содержит 36 млрд общих параметров, при этом на токен активируется примерно 4 млрд. Такое соотношение может дать более лёгкий вычислительный профиль, чем у плотной модели сходного полного размера. Объём хранения весов всё равно определяется всей моделью, её точностью и устройством checkpoint.

К базовому бюджету прибавляется KV cache. Его размер растёт с длиной контекста, числом параллельно обрабатываемых последовательностей, параметрами внимания и типом кэша. Временные буферы для prefill, workspace backend и резерв драйвера тоже занимают память. Конфигурация, которая уверенно отвечает на контексте 4K, может получить OOM или резкое падение скорости на 32K.

Архитектура MoVA интересна тем, что переносит разреженность и на multi-head attention, а не ограничивает её feed-forward блоками. Для MoVA заявлена совместимость с FlashAttention, grouped-query attention и sparse attention. Такие особенности требуют проверки поддержки конкретной архитектуры в выбранном runtime: результаты на обычной MoE-модели нельзя механически переносить на MoVA.

FP8 против GGUF: сначала определить, с чем реально работает loader

FP8 и GGUF описывают разные уровни представления модели. FP8 задаёт числовой формат весов или вычислений. GGUF задаёт формат хранения, который должен понимать совместимый loader. Название модели без расширения файла и информации о сборке недостаточно для выбора runtime.

Семейство K2 Horizon заявлено в вариантах FP8 и GGUF. Это не означает автоматическую совместимость каждого файла с KTransformers или llama.cpp. Перед запуском проверьте четыре пункта:

  • точное имя архитектуры и ревизию checkpoint;
  • расширение, квантование и формат весов;
  • наличие нужного backend в установленной версии runtime;
  • нужна ли конвертация и меняет ли она точность, память или доступные kernels.

Сравнение FP8-файла в одном runtime с GGUF-квантом в другом не отвечает на вопрос, какой движок быстрее. Оно показывает производительность двух разных представлений весов. Такое сравнение допустимо для выбора рабочего решения, но в таблице результатов нужно явно указать различие форматов.

Qwen3.8 Next Flash: проверить название, источник и точную сборку

В предоставленных исследовательских материалах нет подтверждённых характеристик модели с названием Qwen3.8 Next Flash в FP8. Поэтому её нельзя описывать как установленный факт, нельзя заранее приписывать ей размер, тип MoE, требования к памяти или совместимость с runtime.

До теста сверяйте официальное название, репозиторий, архитектуру, размер весов, формат файла и инструкцию по запуску. Формулировка для рабочего журнала должна быть точной: например, «checkpoint, который пользователь идентифицирует как Qwen3.8 Next Flash FP8». Внутренний разбор сценария Qwen 3.8 Flash Next на сервере с большим объёмом RAM полезен как ориентир для постановки замеров, но версия runtime и файл модели всё равно должны совпадать с вашей системой.

Запуск MoE-модели на нескольких GPU и RAM: где возникают ограничения

Стенд с четырьмя видеокартами и четырёхканальной DDR4 содержит несколько уровней памяти с разной задержкой и пропускной способностью: VRAM каждой GPU, RAM, CPU cache, PCIe-соединения и возможные прямые меж-GPU каналы. Скорость определяется тем, где находятся нужные данные в момент вычисления очередного токена.

Почему 4 x 16 ГБ - это не единый пул из 64 ГБ

Номинально в системе установлено 64 ГБ VRAM. Фактически runtime распределяет веса, кэш и буферы по четырём отдельным устройствам. Каждая GPU хранит только выделенную ей часть модели и собственные служебные аллокации. Свободные 3 ГБ на одной карте не помогут другой карте, которой не хватает 500 МБ под временный буфер.

Распределение может идти по слоям, тензорам или иной схеме, которую поддерживает конкретная сборка. При layer split последовательные блоки модели размещаются на разных GPU. Переход к следующему блоку требует передать активации на устройство-владельца. При tensor split несколько GPU участвуют в вычислении одного крупного тензора, поэтому объём синхронизации может измениться. Какая схема быстрее, решает топология PCIe и поведение конкретного backend, а не общий объём VRAM.

Оставляйте запас на KV cache, временные буферы, граф вычислений и память драйвера. Распределение, которое заполняет все карты почти до нуля, часто нестабильно при росте batch или контекста. Практичная цель состоит в устойчивой генерации на целевой нагрузке, а не в максимальном проценте занятой VRAM.

RAM как расширение вместимости, а не бесплатная замена VRAM

Оперативная память помогает разместить веса, которые не помещаются в VRAM. Цена зависит от того, как часто runtime обращается к этим данным во время prefill и generation. Если критичные тензоры регулярно переходят между CPU/RAM и GPU, latency растёт, а generation speed может стать ограниченной пропускной способностью PCIe и памяти.

Разделяйте два результата: модель загружается и модель отвечает с приемлемой скоростью. Первый результат важен для эксперимента и редких пакетных задач. Второй нужен для чата, IDE-ассистента, агентного кодинга и интерактивного RAG. Для этих сценариев измеряйте TTFT отдельно от скорости генерации.

При оценке RAM-heavy конфигураций полезен материал о запуске крупных MoE-моделей с упором на RAM и expert streaming. Он помогает сформулировать правильные вопросы к стенду: сколько данных проходит по PCIe, как распределены GPU по NUMA-узлам и что происходит с latency после увеличения контекста.

Четырёхканальная DDR4, CPU и PCIe-топология

Сам факт четырёхканальной DDR4 не даёт готовой оценки скорости. Нужны объём доступной RAM, частота и режим модулей, нагрузка памяти, модель CPU, число физических ядер, число логических потоков, расположение GPU по PCIe и привязка устройств к NUMA-узлам. Две системы с одинаковыми четырьмя GPU могут вести себя по-разному из-за материнской платы и процессора.

На Windows базовую информацию о CPU можно получить командой:

Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors

Дальше проверьте ширину PCIe для каждой карты, фактический режим линий, свободную RAM перед стартом, загрузку памяти и фоновые задачи. Для CPU/GPU offload полезно записывать загрузку CPU по ядрам. Высокая средняя загрузка не всегда означает проблему: важнее увидеть, не упирается ли один поток, NUMA-узел или канал памяти.

Контекст и KV cache: скрытая часть бюджета памяти

KV cache хранит представления уже обработанных токенов, чтобы модель не пересчитывала весь предыдущий контекст при каждом новом токене. При фиксированных настройках его расход растёт вместе с длиной контекста. На нескольких GPU нужно выяснить, где runtime размещает этот кэш: в VRAM, RAM или смешанной схеме.

Тестируйте несколько фиксированных точек, например 4K, 16K и 32K токенов, если их допускает архитектура и ваш рабочий сценарий. Для каждой точки фиксируйте пиковую VRAM каждой GPU, занятую RAM, TTFT, prompt processing и generation speed. Один общий показатель tokens/s скрывает разницу между быстрой обработкой запроса и медленной выдачей ответа.

KTransformers vs llama.cpp для MoE: что сравнивать на уровне runtime

Сравнение KTransformers и llama.cpp должно опираться на наблюдаемые свойства конкретной версии, а не на общую репутацию проекта. Движок может хорошо работать с одной архитектурой и требовать другого формата, backend или схемы размещения для другой. Первым фильтром всегда служит совместимость с checkpoint.

Поддержка архитектуры важнее номинальной совместимости

Проверьте список поддерживаемых архитектур, формат модели, экспертный роутинг, attention-блоки и ограничения backend. Сообщение о том, что runtime запускает MoE, не подтверждает работу именно с вашей моделью. Это особенно критично для нестандартных вариантов, где разреженность затрагивает attention или используются специфические схемы роутинга.

Для K2-Horizon-MoVA-36B-A4B проверка должна учитывать архитектуру MoVA, а не только ярлык MoE. Для предполагаемой Qwen3.8 Next Flash сначала нужно подтвердить само название и технический паспорт checkpoint. Лог успешной загрузки, вывод о распознанной архитектуре и короткий контрольный prompt полезнее предположения по имени файла.

Offload и размещение данных: какие настройки действительно влияют на результат

Для каждого runtime зафиксируйте карту размещения данных. В журнале должны быть ответы на вопросы: какие веса находятся на GPU, какие блоки или тензоры остались в CPU/RAM, где расположен KV cache, куда попадают временные буферы, как задано распределение по устройствам.

Названия параметров нельзя переносить между runtime и даже между сборками одного runtime. Укажите точную версию программы, backend, драйвер и команду запуска. Если документация вашей версии не описывает параметр, сначала проверьте справку бинарника и лог. Неподходящий флаг может игнорироваться без очевидной ошибки, особенно когда оболочка передаёт часть настроек дальше.

Для llama.cpp полезен связанный материал о VRAM-кэше и запуске большой MoE-модели. Его результаты относятся к описанным там условиям, поэтому переносить численные показатели на 4 x 16 ГБ нельзя. Методика раздельного учёта размещения экспертов, памяти и batch подходит для собственного стенда.

Меж-GPU обмен и синхронизация

Несколько GPU могут увеличить доступную вместимость, но генерация одного токена содержит последовательные зависимости. При размещении связанных вычислений на разных устройствах часть активаций должна пересечь границу GPU. При недостаточной пропускной способности или неудачной топологии устройства начнут ждать друг друга.

Во время теста наблюдайте загрузку каждой GPU, выделенную память, загрузку PCIe, активность CPU, ошибки обмена и разброс времени токена. Признак плохого распределения: одна GPU стабильно загружена, остальные работают рывками, а generation speed почти не растёт после подключения дополнительных карт. Ещё один сигнал: скорость сильно меняется при тех же prompt и настройках.

Сравните равномерную схему с вариантом, который учитывает реальный свободный объём и близость GPU к CPU или друг к другу, если runtime допускает такой контроль. Схему считайте рабочей только после серии одинаковых запусков.

Практическая настройка: KTransformers offload CPU-GPU, слои и размер контекста

Настройка должна идти небольшими шагами. Сначала получите воспроизводимый базовый запуск. Потом меняйте один параметр или одну схему размещения. Если одновременно поменять формат, контекст, batch, offload и распределение слоёв, причина ускорения или деградации останется неизвестной.

Базовый запуск без оптимистичного распределения

Возьмите один checkpoint, одну версию runtime, одинаковый prompt и фиксированный режим генерации. Начните с короткого контекста, который нужен для проверки работы. Отключите лишние параллельные запросы и освободите VRAM от посторонних приложений.

В контрольную запись внесите время загрузки, свободную и занятую VRAM каждой GPU, занятую RAM, распознанную архитектуру, длину контекста, время prefill, TTFT и generation speed. Запустите тест несколько раз. Первый проход может включать загрузку файлов, компиляцию kernels или прогрев кэшей, поэтому его нельзя смешивать с повторными измерениями.

KTransformers offload CPU-GPU: что зафиксировать в эксперименте

Если используемая сборка KTransformers предлагает CPU-GPU offload, опишите размещение максимально предметно. Запишите, какие блоки остались в RAM, какие попали на GPU, меняется ли стратегия для экспертов, что происходит с KV cache и какие устройства участвуют в вычислении каждого этапа.

После каждого изменения фиксируйте четыре группы метрик: пиковую VRAM по каждой карте, пиковую RAM, TTFT и generation speed. Добавьте загрузку CPU и признаки постоянного обмена по PCIe. Падение VRAM при резком росте TTFT часто означает, что часть критичного пути ушла из локальной памяти GPU.

Точные флаги берите из документации и справки той сборки KTransformers, которая установлена на стенде. В статье нельзя выдавать неподтверждённые имена параметров за универсальную команду.

llama.cpp на нескольких GPU и в оперативной памяти

Для llama.cpp сначала проверьте, принимает ли сборка нужный checkpoint и понимает ли выбранный формат. Затем определите доступные способы размещения на GPU, управления CPU/RAM offload, распределения нагрузки и положения KV cache. FP8-артефакт и GGUF-квант должны идти отдельными строками журнала.

Сравнение с KTransformers будет корректным при одинаковой цели. Например, оба runtime получают одинаковый контекст, одинаковый prompt, одинаковое число генерируемых токенов и близкие настройки декодирования. Если один вариант требует конвертации файла, добавьте это в условия опыта: изменение формата может влиять на память, скорость и качество ответа.

Распределение слоёв между четырьмя GPU

Начните с простой равномерной схемы, если она поддерживается. Затем проверьте схему с учётом доступной памяти на каждой карте. При разном остатке VRAM нельзя планировать одинаковую долю модели: устройство с меньшим свободным запасом может переполниться при росте KV cache или workspace.

Если сборка предлагает layer split и tensor split, тестируйте их как разные режимы. Не сравнивайте результаты по одному короткому prompt. Используйте одинаковые входы, повторите запуск несколько раз и посмотрите на загрузку всех GPU. Выбирайте схему, которая сохраняет стабильную скорость на целевой длине контекста и не создаёт переполнения памяти.

Размер контекста: начинать с целевого, а не с максимального

Максимально доступный контекст редко совпадает с рабочим. Чат с короткими сообщениями, анализ кода, RAG и агентные задачи создают разные профили нагрузки. Для каждого профиля подготовьте типовой prompt и целевую длину ответа.

Проведите серию на нескольких длинах контекста. На каждой точке записывайте размер KV cache, TTFT, prompt processing, generation speed, свободную VRAM и RAM. Вариант, который выигрывает на 4K, может проиграть на 32K из-за кэша и роста меж-GPU обмена.

Как сравнить скорость и задержку: бенчмарк для конкретной системы

Впечатление от одного запуска не заменяет бенчмарк. Нужен небольшой повторяемый протокол, который разделяет время загрузки, prefill и generation. Тогда KTransformers и llama.cpp можно оценить по нужному сценарию, а не по случайной красивой цифре в консоли.

Что зафиксировать до начала теста

  • точное имя модели, ревизию checkpoint и формат файла;
  • версию KTransformers или llama.cpp, backend, ОС и версию драйвера;
  • модель GPU, объём VRAM, PCIe-топологию и объём доступной RAM;
  • схему размещения весов, KV cache и временных буферов;
  • число CPU-потоков, контекст, batch-параметры и режим декодирования;
  • длину тестового prompt, число новых токенов и факт холодного или повторного запуска.

Для максимально сопоставимых ответов используйте фиксированный prompt и детерминированное декодирование, если его поддерживает выбранная конфигурация. При недетерминированном режиме фиксируйте seed и параметры семплирования.

Метрики: throughput, TTFT, prompt processing и generation speed

МетрикаЧто показываетПочему нужна
Время загрузкиСколько занимает старт модели и подготовка памятиВлияет на удобство повторных запусков и сервисных сценариев
TTFTЗадержку до первого токенаКритична для интерактивного чата и агента
Prompt processingСкорость обработки входного текстаПоказывает поведение на длинных документах и RAG-контексте
Generation speedСкорость выдачи новых токеновОпределяет ощущаемую скорость диалога
ThroughputИтоговую производительность при выбранном режиме нагрузкиНужна для пакетной обработки и нескольких запросов
Пиковая VRAM и RAMРеальный бюджет памятиПоказывает запас для роста контекста и параллельности

Записывайте среднее значение, лучший и худший результат нескольких повторений. Большой разброс часто указывает на фоновую нагрузку, перегрев, paging RAM, нестабильную топологию или неудачную схему обмена.

Три обязательных режима сравнения

  1. Максимум весов в VRAM. Режим показывает скорость при минимальном участии RAM в критичном пути.
  2. Небольшой RAM offload. Режим помогает найти точку, где освобождённая VRAM ещё не вызывает сильную просадку latency.
  3. RAM offload, необходимый для запуска. Режим оценивает практичность модели, которая не помещается в VRAM.

Во всех трёх режимах используйте одинаковый checkpoint, длину контекста и тестовый набор. Факт, что третий режим загрузился, фиксируйте отдельно от оценки его производительности.

Как читать результаты без ложных выводов

Высокая скорость prompt processing не гарантирует быструю выдачу токенов. Быстрая generation speed на коротком контексте не гарантирует низкий TTFT на длинном запросе. Низкое потребление VRAM может означать перенос части нагрузки в RAM и рост ожидания данных.

Для интерактивной работы приоритет часто выглядит так: стабильный TTFT, стабильная generation speed, отсутствие OOM на рабочем контексте. Для пакетного prefill важнее throughput. Для RAG и агентных задач нужны оба профиля, потому что запросы могут быть длинными, а ответ должен появляться без заметной паузы.

Когда рассматривать KTransformers, а когда llama.cpp

Выбор делайте по связке «модель, формат, версия runtime, схема размещения, железо». Если один runtime подтверждённо не загружает архитектуру или нужный файл, он выбывает до скоростного сравнения. Если оба варианта работают, решение принимает бенчмарк на целевой нагрузке.

Сценарий: модель помещается в VRAM с запасом

При полном размещении весов в VRAM сравните generation speed, TTFT, prompt processing, расход памяти и устойчивость на нужном контексте. RAM в этом случае не должна находиться в критичном пути, поэтому особенно заметны качество распределения по GPU и меж-GPU синхронизация.

Кандидатом становится runtime, который стабильно держит целевой контекст и выдаёт лучший профиль задержки для вашего сценария. Время первоначальной загрузки здесь вторично, если модель работает долго после старта.

Сценарий: без RAM offload модель не запускается

При обязательном offload измеряйте постоянный обмен между RAM и GPU, TTFT, скорость генерации после прогрева и деградацию на длинном контексте. Предпочтителен вариант с меньшей зависимостью критичного пути от CPU-GPU передачи, но это свойство нужно подтвердить логами и замерами.

Проверьте, не меняется ли скорость ступенчато после определённой длины prompt. Такое поведение может означать, что KV cache, временные буферы или часть весов перешли на другой уровень памяти.

Сценарий: нужен FP8-артефакт, а не GGUF

Сначала подтвердите нативную поддержку FP8, нужных операций и вашей архитектуры. Если один runtime требует перевода модели в GGUF или другой формат, внесите конвертацию в условия сравнения. Результат покажет практический путь запуска, но не станет чистым сравнением движков на одном представлении весов.

Для модели в GGUF отдельное внимание уделите возможностям loader, выбранному кванту и расходу KV cache. Связанный материал о Qwen3.8-27B в true Q4_K_M на 16 ГБ VRAM показывает, почему формат весов и глубина контекста нужно записывать рядом с каждым результатом.

Сценарий: важнее простота запуска и повторяемость

При равной скорости сравните понятность логов, сохранение конфигурации, полноту диагностики памяти, предсказуемость распределения GPU и удобство повторного запуска после обновления драйвера или runtime. Эти критерии влияют на эксплуатацию локальной AI-системы, особенно когда стендом пользуется несколько человек.

Простота остаётся субъективной характеристикой, поэтому превратите её в список проверяемых пунктов: сколько ручных действий требуется, можно ли сохранить команду запуска, понятна ли причина OOM, видно ли размещение памяти и воспроизводится ли результат после перезапуска.

Что подтверждено источниками, а что нельзя утверждать без отдельной проверки

Техническая статья о runtime должна отделять сведения о моделях от выводов о запуске. Иначе описание архитектуры легко превращается в выдуманный бенчмарк.

Подтверждённые факты о K2 Horizon и MoVA

Семейство K2 Horizon включает шесть моделей: 0,9B, 3,7B, 7B, 32B, 36B-A4B и 375B-A23B. Для этого семейства заявлены сборки FP8 и GGUF. K2-Horizon-MoVA-36B-A4B содержит 36 млрд общих параметров и примерно 4 млрд активных параметров на токен.

MoVA распространяет маршрутизацию экспертов на multi-head attention. В описании архитектуры заявлена совместимость с FlashAttention, grouped-query attention и sparse attention. У K2 Horizon указаны интеграции через vLLM и Ollama на NVIDIA, AMD и Cerebras. Эти сведения не подтверждают поддержку KTransformers или llama.cpp.

Для K2-Horizon-MoVA-36B-A4B приведены оценки 58,6 в Terminal-Bench 2.1 и 26,8 в tau3-Banking. Это результаты задачевых бенчмарков, а не tokens/s, TTFT или измерения расхода памяти.

Чего нет в предоставленных материалах

Нет прямого сравнения KTransformers и llama.cpp на четырёх GPU по 16 ГБ. Нет подтверждённых данных по offload, распределению слоёв, меж-GPU обмену, PCIe-топологии, latency, throughput, VRAM и RAM для такой конфигурации.

Нет подтверждённых характеристик Qwen3.8 Next Flash FP8. Нет оснований заранее утверждать, что конкретный runtime поддерживает эту модель, её формат или набор вычислительных операций. Эти пробелы закрывает документация используемой версии, лог запуска и воспроизводимый тест на конкретном стенде.

Как оформлять условные выводы

Корректные формулировки выглядят так: «если runtime поддерживает архитектуру и формат», «эффект зависит от топологии и режима offload», «проверка нужна на конкретной сборке», «результат относится к указанным условиям запуска». Такие ограничения не ослабляют материал. Они защищают читателя от ложной уверенности и делают эксперимент повторяемым.

Фразы «быстрее», «лучше» и «поддерживает» требуют документации, лога запуска или серии сопоставимых измерений. Для системы с несколькими GPU один скриншот с занятой VRAM не заменяет проверку generation speed и TTFT.

Итоговый чек-лист перед выбором runtime

Финальное решение должно опираться на собственные измерения. Заполните таблицу до того, как закреплять KTransformers или llama.cpp в рабочем окружении.

Минимальный набор данных для решения

ПунктЧто записать
МодельТочное имя, ревизия, архитектура и checkpoint
ФорматFP8, GGUF или другой формат, квантование и факт конвертации
RuntimeВерсия, backend, ОС и драйвер
РазмещениеВесы на GPU и CPU/RAM, KV cache, временные буферы
GPUЗанятая и свободная VRAM каждой карты, схема распределения
RAM и CPUПиковая RAM, число потоков, загрузка CPU и фоновые процессы
КонтекстДлина prompt, целевой контекст, batch и число новых токенов
СкоростьВремя загрузки, TTFT, prompt processing, generation speed, throughput
СтабильностьРазброс повторов, OOM, ошибки, падение скорости после прогрева

Финальная формула выбора

Выбирайте связку «конкретная MoE-модель + конкретный формат + схема offload + конкретная система», которая сохраняет приемлемые TTFT, generation speed и запас памяти на вашем рабочем контексте.

Алгоритм короткий: подтвердите модель и формат, проверьте архитектурную совместимость, оцените свободную VRAM и RAM, задайте целевой контекст, проведите три режима offload, измерьте память и скорость, повторите тест на реальном prompt. После этого KTransformers или llama.cpp перестанут быть абстрактным выбором и станут измеренной конфигурацией для вашего стенда.

Подписаться на канал