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

Сколько AI-агентов реально запустить на 2× RTX 4090: трёхнедельный бенчмарк llama.cpp, потолки и практические выводы

Реальные цифры из трёхнедельного эксперимента: до 5 агентов с контекстом 64k на двух RTX 4090, почему 122B MoE проигрывает 27B, как квантование и KV-кэш влияют

Коротко

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

  1. 01

    Коротко о главном: сколько агентов выдерживают 2× RTX 4090

  2. 02

    Методология эксперимента: как мы тестировали

  3. 03

    Влияние квантования на число агентов и контекст

  4. 04

    Пределы параллелизма: почему 5 агентов - мягкий предел, а 9 - жёсткий

Коротко о главном: сколько агентов выдерживают 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 для оркестрации. Настройка:

  1. Запустите llama.cpp с поддержкой сервера: llama-server --model model.gguf --kv-cache-type q8_0 --ctx-size 65536.
  2. Установите MCP-сервер для llama.cpp (например, llama-mcp).
  3. Настройте 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, и не гонитесь за количеством слотов. Оптимизируйте под реальные задачи.

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