Ответ идёт слишком долго
Один пользователь ждёт, пока модель дочитает длинный запрос и напишет ответ, а ассистент ощущается медленным.
Оптимизация инференса — это работа над тем, как быстро и для скольких пользователей одновременно ваша языковая модель отвечает на вашем железе. Сначала измеряем, из чего складывается время ответа и где очередь, потом меняем по одному рычагу: способ хранения весов, пакетирование, кэш, длину запроса, сервер инференса. После каждой правки проверяем, что качество ответов на вашей выборке не упало. Работаем в вашем контуре.
Обследование с замером нагрузки — от 200 000 ₽Цель в цифрах задаёте вы, мы показываем, чем она оплачиваетсяКачество ответов проверяем после каждой правки
Один пользователь ждёт, пока модель дочитает длинный запрос и напишет ответ, а ассистент ощущается медленным.
Пока работает один, всё хорошо. Когда подключается отдел, ответы замедляются, очередь растёт, а часть запросов падает по времени ожидания.
Закупили оборудование, но оно простаивает между запросами, или, наоборот, упирается в память. Просят докупить, не зная, поможет ли это.
Знают о квантовании и других приёмах, но не понимают, что теряется. Без проверки на своих документах решиться на правку нельзя.
Время ответа — это не одно число. Разные его части лечатся разными средствами, поэтому без разбивки любая правка действует вслепую.
Запрос сначала ждёт в очереди, потом модель читает его целиком (чем длиннее запрос с вложенными документами, тем дольше), и только затем начинает выдавать ответ по частям, слово за словом. Пользователь чувствует два интервала: время до первого слова и скорость, с которой текст появляется дальше. Чтение запроса упирается главным образом в вычислительную мощность карты, выдача ответа — в скорость обращения к памяти и в размер весов.
Ассистент по документам присылает длинные запросы с найденными фрагментами и получает короткие ответы: узким местом оказывается чтение. Классификатор обращений получает короткие запросы и отдаёт несколько слов, и всё решает число запросов в секунду. Чат с агентом ведёт длинные диалоги, где контекст растёт, а память под него занята. Один и тот же сервер для этих трёх задач настраивается по-разному.
Кроме самих весов, видеопамять занимает кэш уже прочитанного контекста, и он растёт с длиной запроса и числом одновременных диалогов. Когда память кончается, сервер начинает ограничивать число запросов в обработке, и очередь растёт даже при незагруженных вычислениях. Расчёт этой части описан в статье «Сколько видеопамяти нужно для своей языковой модели».
Замер на ваших запросах, а не на демонстрационном тексте. Без него «стало быстрее» нельзя ни доказать, ни повторить.
Рычаги применяются по очереди, начиная с самых дешёвых по риску. Общий разбор приёмов — в статье «Как ускорить инференс LLM».
Языковую модель обслуживает специальная программа. Выбор влияет на скорость, но слабее, чем профиль нагрузки и размер модели.
На открытых серверах инференса, таких как vLLM, llama.cpp и Text Generation Inference, и на решениях производителей карт у каждого свои сильные стороны: одни хорошо собирают запросы в общую обработку, другие удобно работают на процессоре и на небольших картах, третьи требуют конкретного оборудования. Формат весов и поддержка именно вашей модели часто решают больше, чем заявленная скорость.
Мы не привязываемся к одному серверу. На обследовании прогоняем ваш профиль запросов на двух-трёх кандидатах на вашем оборудовании и показываем результаты таблицей: что быстрее на длинных запросах, что на множестве коротких, как поведение под нагрузкой, насколько сложно обновлять. Выбор записывается вместе с причинами.
Заготовка для разбора: на ваших запросах строки будут другими.
Перед сервером стоит шлюз: проверяет пользователя, ограничивает число запросов от одного, задаёт приоритеты. Тяжёлая массовая обработка не мешает живым диалогам.
Загрузка карт и памяти, длина очереди, время до первого слова, число ошибок и отказов по времени.
Модели и серверы приходят во внутренний реестр, выпуск проходит на тестовом стенде, прошлая версия остаётся наготове для отката.
Если карта вышла из строя или очередь переполнена, сервис отвечает понятным сообщением или переключается на меньшую модель, а не зависает. Поведение записано в регламенте.
Цены — по тарифам. Цена называется по итогам обследования, остановиться можно после любой ступени. Внутри вилки цену двигают число моделей и серверов, строгость целей по скорости, состояние оборудования и объём проверочной выборки.
Собираем реальные запросы, измеряем время ответа и предел сервиса на текущем оборудовании, определяем узкое место. На выходе список мер по порядку, ожидаемый выигрыш и вилка бюджета. Вычитается из первого этапа, если продолжаете с нами.
Несколько моделей, площадок или смесь процессорных и видеокарточных узлов, шлюз и мониторинг.
Выбор сервера инференса, правка настроек, кэш, пакетирование, повторный замер. Квантование включается только после проверки качества.
Малая и большая модели, маршрутизация запросов, шлюз с очередями и приоритетами, мониторинг, нагрузочные испытания на целевом оборудовании.
Опытная эксплуатация, регламент обновлений и отката, запасные сценарии, передача исходников и инструкций.
Мониторинг, повторные замеры при смене модели, обновления серверов инференса с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.
Собираем реальные запросы и длины ответов, фиксируем текущее время и предел сервиса. Вместе с вами записываем цель: допустимое время до первого слова и число пользователей.
Собираем набор вопросов и эталонных ответов на ваших документах.
Меняем один рычаг, повторяем замер и проверку качества, записываем результат. Правку, которая не дала выигрыша или снизила качество, откатываем.
Прогон на целевом оборудовании с нарастанием числа пользователей. Фиксируем предел, поведение при перегрузке и действия запасного сценария.
Передаём настройки, образы, результаты замеров и инструкцию по повторению. Новую модель или новое оборудование можно замерить заново теми же скриптами.
Если языковой модели у вас ещё нет, начинают со страницы «LLM на своём сервере»: там состав системы, расчёт железа и первый запуск. Оптимизация приходит следом, когда система работает, но не укладывается в скорость или нагрузку. Если на модели строится приложение с поиском по документам и действиями, это отдельная услуга, а скорость ответа становится одним из её требований.
Версии моделей, оценка качества при обновлениях и мониторинг дрейфа относятся к MLOps и развёртыванию моделей. Когда вопрос в том, подойдёт ли вообще своя модель или хватит внешнего программного интерфейса, сравнение лежит в статье «Своя LLM или ChatGPT API». Внешний интерфейс снимает заботу о железе, но для данных ограниченного доступа чаще не подходит по требованиям заказчика.
Из чего складывается память: веса, кэш контекста и буферы. Считаем на примере.
Порядок работ и состав системы, в которую встроится оптимизация.
Когда подходит внешний программный интерфейс, а когда нужна модель на своих серверах.
Сорок минут созвона: какая модель и на каком железе, какие запросы, сколько пользователей, чем недовольны. По итогам скажем, с какой ступени начинать и в какую вилку это укладывается.
Обследование с замером стоит 200 000 ₽ за один сервер и одну модель и 350 000 ₽ за несколько моделей и площадок; оно вычитается из первого этапа, если продолжаете с нами. Настройка одного сервера — лёгкий пилот за 150 000–400 000 ₽, маршрутизация и несколько моделей — тяжёлый за 400 000–1 200 000 ₽. Вывод в эксплуатацию — от 1 500 000 ₽ этапами по 300 000–700 000 ₽, сопровождение — от 20 000 ₽ в месяц.
Часто да, но заранее обещать нельзя. Если узкое место в очереди или в слишком длинных запросах, помогают пакетирование, кэш и сокращение запроса. Если не хватает памяти или вычислительной мощности под нужное число пользователей, правками этого не заменить, и замер покажет, сколько не хватает.
Возможно, и насколько, зависит от модели и задачи. Поэтому квантование включаем только после сравнения с исходной моделью на вашей выборке: смотрим длинные ответы, числа и редкие термины. Если потеря выше согласованного порога, оставляем исходные веса.
Число определяется профилем нагрузки, длиной запросов и ответов, размером модели и объёмом памяти, поэтому назвать его без прогона нельзя. На обследовании мы нагружаем сервер вашими запросами с нарастанием числа пользователей и показываем предел и узкое место.
Небольшие модели можно запускать на процессоре, и для редких запросов или пакетной ночной обработки этого достаточно. Для живого диалога с несколькими пользователями и моделью среднего размера обычно нужна видеокарта. Решение принимается по замеру на вашем профиле.
Не обязательно. Часто хватает настроек текущего: кэша, пакетирования, ограничений по длине. Смену рекомендуем, когда замер показывает, что текущий не поддерживает нужный формат, оборудование или не справляется с профилем нагрузки.
Для задач без данных ограниченного доступа внешний интерфейс бывает проще и дешевле: за железо отвечает поставщик. Для документов, персональных данных и закрытых регламентов он чаще не подходит по требованиям заказчика.
Вам. Исходный код, конфигурации и документация передаются по акту, порядок передачи прав записывается в договоре. Персональные данные граждан России обычно должны храниться на серверах в России.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.