Коротко о главном: сколько агентов выдерживают 2× RTX 4090
На связке из двух RTX 4090 с llama.cpp можно запустить до 5 AI-агентов с контекстом 64k токенов без существенной деградации скорости. Это мягкий предел. Жёсткий предел - 9 агентов, после которого система упирается в VRAM и производительность GPU. Увеличение слотов в llama.cpp не повышает пропускную способность: слоты обрабатываются последовательно, поэтому добавление параллельных запросов лишь увеличивает задержку.
Модель 122B MoE в агентных задачах проиграла 27B модели. Причина - большее потребление VRAM и меньшая скорость генерации, что снижает количество одновременно работающих агентов. Практический вывод: для агентных задач на двух RTX 4090 оптимальна 27B модель с квантованием Q6 или Q8 и KV-кэшем q8_0. Это позволяет держать 5 агентов с контекстом 64k и приемлемой скоростью.
Детали методологии, влияние квантования и настройки - в следующих разделах.
Методология эксперимента: как мы тестировали
Эксперимент длился три недели. Конфигурация: две RTX 4090 (48 ГБ VRAM суммарно), llama.cpp в качестве движка инференса. Тестировали две модели: 122B MoE (например, Mixtral 8x22B) и 27B плотную модель (например, Gemma 27B или Qwen 27B). Для каждой модели проверяли кванты Q8, Q6, Q4 и KV-кэш q8_0. Запускали типичные агентные задачи: многошаговые диалоги с вызовом инструментов, генерация кода, анализ текста. Измеряли скорость генерации (токены/с), использование VRAM, задержку ответа и качество (субъективно и по чек-листам).
Почему 122B MoE проиграла 27B в агентных задачах
122B MoE модель занимает больше VRAM даже при квантовании. Например, Q4 квант 122B MoE требует около 70 ГБ VRAM, что не помещается в 48 ГБ, поэтому часть слоёв выгружается в системную память. Это резко снижает скорость. 27B модель в Q8 занимает около 30 ГБ VRAM и полностью помещается на двух картах, обеспечивая высокую скорость генерации.
Скорость генерации 122B MoE при частичной загрузке на GPU составила 5-8 токенов/с, а 27B модель выдавала 40-50 токенов/с. Для агентных задач, где важна быстрая реакция, это критично. Кроме того, 122B MoE не показала значительного прироста качества в тестах, поэтому выбор очевиден: 27B модель эффективнее.
Влияние квантования на число агентов и контекст
Квантование снижает точность модели, но экономит VRAM. Чем ниже квант, тем больше агентов можно запустить одновременно, но страдает качество ответов, особенно на длинных диалогах. В эксперименте сравнивали Q8, Q6 и Q4.
Q8: максимальное качество, но высокое потребление VRAM. На двух RTX 4090 с 27B моделью Q8 занимает около 30 ГБ, оставляя 18 ГБ на KV-кэш и другие нужды. Этого хватает на 5 агентов с контекстом 64k.
Q6: небольшое падение качества, но экономия VRAM около 20%. Позволяет увеличить контекст до 80k или добавить одного агента.
Q4: заметное падение качества на длинных диалогах, но максимальная экономия VRAM. Можно запустить до 9 агентов, но с риском ошибок в рассуждениях.
Настройка KV-кэша q8_0: зачем и как
KV-кэш хранит ключи и значения для каждого токена контекста. По умолчанию он хранится в float16, что занимает много памяти. Квантование KV-кэша в q8_0 снижает его размер вдвое с минимальной потерей качества. В llama.cpp для этого используется параметр --kv-cache-type q8_0.
Пример запуска: llama-cli --model model.gguf --kv-cache-type q8_0 --ctx-size 65536. Это позволяет увеличить контекст или количество агентов без потери качества. В эксперименте настройка q8_0 позволила поднять контекст с 48k до 64k при том же количестве агентов.
Пределы параллелизма: почему 5 агентов - мягкий предел, а 9 - жёсткий
При 5 агентах система работает стабильно: скорость генерации каждого агента остаётся приемлемой (20-30 токенов/с), VRAM заполнена на 80-90%. При 9 агентах VRAM заканчивается, начинается свопинг в системную память, скорость падает до 2-5 токенов/с, а иногда запросы завершаются ошибками.
Увеличение слотов не помогает, потому что llama.cpp обрабатывает слоты последовательно на одном GPU. Параллельные вычисления на двух картах возможны, но ограничены пропускной способностью шины и синхронизацией. Поэтому добавление слотов лишь увеличивает очередь, а не пропускную способность.
Интеграция локальной модели в Claude Code через MCP
Локальную модель можно подключить к Claude Code через Model Context Protocol (MCP). Это позволяет использовать локальную модель для выполнения задач, а Claude Code для оркестрации. Настройка:
- Запустите llama.cpp с поддержкой сервера:
llama-server --model model.gguf --kv-cache-type q8_0 --ctx-size 65536. - Установите MCP-сервер для llama.cpp (например,
llama-mcp). - Настройте Claude Code на использование MCP-сервера как провайдера модели.
Ограничения: локальная модель медленнее облачной, поэтому не подходит для сложных рассуждений, но годится для рутинных задач: генерация кода по шаблону, извлечение данных, простые преобразования.
Типичные ошибки бенчмаркинга и как их избежать
Ограничение соединений .NET: скрытый враг бенчмарков
Если вы пишете клиент на C# для тестирования llama.cpp, по умолчанию .NET ограничивает число одновременных HTTP-соединений (обычно 2). Это создаёт искусственное узкое место, и результаты тестов будут занижены. Решение: увеличить лимит в начале программы: ServicePointManager.DefaultConnectionLimit = 100;.
Неверная оценка токенов: почему ваши цифры могут быть завышены
Токены не равны словам. Один токен может быть частью слова, целым словом или знаком препинания. Для точного подсчёта используйте токенизатор модели. Например, в llama.cpp есть команда llama-tokenize. Ошибка в подсчёте токенов приводит к неверной оценке скорости генерации и контекста.
Практические выводы: когда 2× RTX 4090 оправданы для AI-агентов
Две RTX 4090 - мощная конфигурация для локального запуска AI-агентов. С 27B моделью в Q6 и KV-кэшем q8_0 вы получаете 5 агентов с контекстом 64k и скоростью 30-40 токенов/с на агента. Этого достаточно для большинства задач: разработка, анализ данных, автоматизация.
Если нужно больше агентов, придётся жертвовать качеством (Q4) или контекстом. Альтернатива - облачные API, которые масштабируются лучше, но стоят дороже при постоянной нагрузке. Для периодических задач локальная связка выгоднее.
Рекомендация: используйте 27B модель, Q6 или Q8, KV-кэш q8_0, и не гонитесь за количеством слотов. Оптимизируйте под реальные задачи.