Привет, SE7EN! Меня зовут Дмитрий, я отвечаю за развитие продукта LLMaaS. Сегодня я хочу поделиться опытом проектирования инфраструктуры под ML-инференс. Мы столкнулись с классической дилеммой: как рассчитать потребности в железе для запуска больших языковых моделей (LLM) в реалиях текущего российского рынка. Ошибка в расчетах чревата серьезными финансовыми потерями — стоимость ускорителей сейчас такова, что любая неоптимальная закупка может критически ударить по бюджету команды. Вместо изобретения велосипеда мы решили адаптировать открытый симулятор InferSim от Alibaba, и сейчас я расскажу, что из этого вышло.
Что такое InferSim и в чем его преимущество
InferSim — это Python-симулятор, предназначенный для оценки критических метрик LLM-инференса: TTFT (Time To First Token), TPOT (Time Per Output Token) и общей пропускной способности (токенов в секунду). Поскольку инструмент разработан командой, стоящей за созданием vLLM, он обладает глубокой экспертизой в данной предметной области.
Ключевая особенность симулятора — двухэтапная методология:
-
Этап 1 (офлайн): запуск микро-бенчмарков на целевом оборудовании (с использованием инструментов вроде FlashInfer или sglang). Это позволяет сформировать профиль производительности — своего рода таблицу MFU (Model FLOPs Utilization), отражающую реальную отдачу GPU при конкретных операциях и размерностях.
-
Этап 2 (онлайн): расчет задержек на базе полученных MFU и аналитических моделей. После завершения первого этапа доступ к физическому GPU больше не требуется — оценить производительность системы, например, на базе H200, можно даже с обычного ноутбука.
Такой подход обеспечивает гораздо более высокую точность, чем попытки теоретического расчета пропускной способности памяти. Например, на этапе генерации (Decode) система часто упирается не столько в вычислительные мощности, сколько в работу с KV-кешем, и InferSim учитывает это максимально корректно. Эвристики были отточены на обширной базе тестов H800, H20 и GB200.
Однако «из коробки» поддержка ограничена рядом топовых ускорителей. Нам же требовалось интегрировать Metax C500 64GB и модель Qwen3-32B с её особенностями GQA, поэтому нам пришлось доработать исходный код.
Сначала мы добавили поддержку Metax C500. В файле hardware/gpu.py параметры ускорителей представлены в виде датаклассов. Мы внесли соответствующие спецификации:
c500 = GPU(
fp16_tflops=280, # оценочные данные согласно спецификации
fp8_tflops=560, # двукратное преимущество относительно FP16
mfu=0.35, # эмпирическая гипотеза для уточнения
mem=64, # емкость HBM2e на карту
mem_bw=1800, # пропускная способность памяти (ГБ/с)
nvlink_bw=450 / 2, # оценка пропускной способности MetaXLink
rdma_bw=40 * 0.8, # оптимистичная оценка RDMA
)
После внесения c500 в словарь gpu_map стала возможна симуляция с параметрами --device-type C500 --world-size 2. Несмотря на то, что параметры FLOPS пришлось оценивать (ввиду отсутствия официальных данных от MetaX), коэффициент mfu=0.35 показал результаты, максимально близкие к нашим замерам в реальных условиях.
Конфигурация модели: Qwen3-32B
Следующим шагом стала подготовка конфигурационного файла модели. InferSim ориентируется на стандартный config.json из экосистемы Hugging Face. Наш qwen3_32b_config.json выглядит так:
{
"model_type": "qwen3",
"hidden_size": 5120,
"num_hidden_layers": 64,
"num_attention_heads": 64,
"num_key_value_heads": 8,
"head_dim": 80,
"intermediate_size": 25600,
"vocab_size": 151936,
"max_position_embeddings": 40960
}
Важно точно указать head_dim: 80, а не использовать стандартные 128. Расчет прост: 5120 / 64 = 80. Ошибка в этом параметре приведет к неверному расчету нагрузки на KV-кеш и, как следствие, к неверной оценке параллелизма.
Интерактивная визуализация через Streamlit
Для удобства работы с результатами мы интегрировали симулятор со Streamlit. Это позволило отказаться от ручного анализа логов в пользу наглядного веб-интерфейса.
Алгоритм работы прост:
-
Python-скрипт инициирует запуск
main.pyс нужными аргументами через subprocess. -
Результаты парсятся, извлекая метрики
TTFT,TPOTи пропускную способность. -
Данные визуализируются с помощью
matplotlibнепосредственно в браузере.
Теперь любой участник команды может оперативно подобрать параметры GPU, количество карт и размер батча. Мы сразу видим влияние изменений, например, при активации квантования (--use-fp8-kv). Это экономит часы рутинной работы.

Практическая польза в условиях дефицита
Рынок GPU сегодня — это сложная логистическая задача. Покупка оборудования «вслепую» — кратчайший путь к ошибке. Благодаря доработанному InferSim мы смогли:
-
Корректно сопоставить производительность одного H200 и связки из двух Metax C500. Выяснилось, что при высоких требованиях к параллельности 128 ГБ VRAM у двух C500 перевешивают преимущество в чистой скорости одного H200.
-
Найти оптимальный размер
decode batchsize, избежав ошибок OOM и сохранив при этом высокую пропускную способность.
Безусловно, симулятор не дает 100% гарантий из-за зависимости от качества входных бенчмарков, но он отлично справляется с задачей исключения грубых просчетов.
Заключение
InferSim стал для нас незаменимым инструментом при планировании инвестиций в железо. В условиях высокой стоимости и дефицита оборудования возможность «прогнать» десятки конфигураций за вечер стоит дорогого. Это позволяет принимать взвешенные архитектурные решения на основе цифр, а не интуитивных догадок.
Приглашаю коллег тестировать наш инструмент и делиться опытом в комментариях!
Ссылки
Оригинальный репозиторий: https://github.com/alibaba/InferSim.
Наш форк с доработками: https://github.com/DmitriyKhodykin/InferSim
Подробнее об экономических аспектах закупки: https://habr.com/ru/articles/1026438/


