Перейти к содержанию

Оптимизация пропускной способности GLM-4.x на NVIDIA H100 GPU

Вывод

Рекомендуемая конфигурация для оптимизации пропускной способности GLM-4.x (4.5, 4.6 и 4.7) на H100 GPU:

Команда обслуживания модели
python3 -m sglang.launch_server --model zai-org/GLM-4.6-FP8 --tp-size 8 --ep-size 8 --tool-call-parser glm --reasoning-parser glm45

Примечание

  1. Наши бенчмарки не охватывают все возможные сочетания оптимизаций. Например, отправной точкой дальнейшей настройки становится движок инференса с лучшей производительностью при настройках по умолчанию. Такое отсечение вариантов даёт локальный оптимум, который может не совпадать с глобальным.
  2. Есть и другие методы оптимизации, зависящие от сценария использования: максимальный размер батча, настройки планировщика, расширенный KV-кэш, CUDA graph и т. д. Выводы этого документа могут служить отправной точкой для более целенаправленной оптимизации.
  3. Тесты проводились на определённых аппаратных и программных конфигурациях. Развитие движков инференса может привести к новым выводам.
  4. Квантизация может влиять на точность, однако для большинства моделей FP8 обеспечивает снижение точности менее чем на 1%. Подробности см. в результатах оценки. Поэтому для обслуживания с высокой пропускной способностью настоятельно рекомендуется квантизация FP8.

Если что-то упущено или требуется обновление с учётом новых изменений, сообщите нам.

Цель оптимизации

Высокая пропускная способность при высокой конкурентности запросов.

Условия эксперимента

Модель

zai-org/GLM-4.6

Оборудование

8 × NVIDIA H100 SXM GPU на одном узле.

Версия движка

  • vLLM: v0.11.0
  • SGLang: v0.5.3
  • TensorRT-LLM: v1.0.0

Набор данных бенчмарка

  1. ShareGPT
  2. Случайный набор данных с различной длиной последовательностей:
    • Очень длинный запрос: 32000 входных токенов, 100 выходных токенов
    • Длинный запрос: 4000 входных токенов, 200 выходных токенов
    • Запрос средней длины: 2000 входных токенов, 100 выходных токенов
    • Короткий запрос: 128 входных токенов, 4 выходных токенов

Скрипт бенчмарка

Для оценки производительности модели используется vLLM bench CLI. Бенчмарк запускается следующей командой:

1
2
3
4
5
6
7
8
# Prepare the ShareGPT dataset
wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json

# Benchmark on ShareGPT dataset
vllm bench serve --model zai-org/GLM-4.6 --backend openai-chat --endpoint /v1/chat/completions --dataset-name sharegpt --dataset-path ShareGPT_V3_unfiltered_cleaned_split.json --num-prompts 1000

# Benchmark on random dataset (fixed seed for reproducibility)
vllm bench serve --model zai-org/GLM-4.6 --backend openai-chat --endpoint /v1/chat/completions --dataset-name random --random-input-len 4000 --random-output-len 200 --num-prompts 500 --seed 42

Результаты эксперимента

Исходную модель BF16 нельзя обслуживать на одном сервере с GPU NVIDIA H100 из-за ограничений памяти. Поэтому рассматривается обслуживание модели, квантизованной в FP8.

1. Выбор движка инференса

vLLM

Скрипт обслуживания модели
vllm serve zai-org/GLM-4.6-FP8 -tp 8 --gpu-memory-utilization 0.85
Результат бенчмарка
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  130.81
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              7.64
Output token throughput (tok/s):         1528.16
Peak output token throughput (tok/s):    3935.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          3167.63
---------------Time to First Token----------------
Mean TTFT (ms):                          26751.30
Median TTFT (ms):                        26848.82
P99 TTFT (ms):                           45890.42
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          508.88
Median TPOT (ms):                        273.93
P99 TPOT (ms):                           1362.12
---------------Inter-token Latency----------------
Mean ITL (ms):                           222.86
Median ITL (ms):                         149.69
P99 ITL (ms):                            1365.56
==================================================

SGLang

Скрипт обслуживания модели
python3 -m sglang.launch_server --model-path zai-org/GLM-4.6-FP8 --host 0.0.0.0 --port 8000 --tp-size 8
Результат бенчмарка
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  109.16
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              9.16
Output token throughput (tok/s):         1831.30
Peak output token throughput (tok/s):    5614.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          3796.00
---------------Time to First Token----------------
Mean TTFT (ms):                          17555.93
Median TTFT (ms):                        17493.70
P99 TTFT (ms):                           32706.51
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          684.10
Median TPOT (ms):                        252.95
P99 TPOT (ms):                           4790.60
---------------Inter-token Latency----------------
Mean ITL (ms):                           208.76
Median ITL (ms):                         129.94
P99 ITL (ms):                            514.51
==================================================

Результат: SGLang(3796.00 tok/s) > vLLM (3167.63 tok/s) > TensorRT-LLM (Не поддерживается)

2. Параллелизм в SGLang

TP8EP8

Скрипт обслуживания модели
python3 -m sglang.launch_server --model-path zai-org/GLM-4.6-FP8 --host 0.0.0.0 --port 8000 --tp-size 8 --ep-size 8
Результат бенчмарка
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  107.44
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              9.31
Output token throughput (tok/s):         1860.58
Peak output token throughput (tok/s):    6492.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          3856.69
---------------Time to First Token----------------
Mean TTFT (ms):                          18994.85
Median TTFT (ms):                        18941.03
P99 TTFT (ms):                           34437.71
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          677.30
Median TPOT (ms):                        237.99
P99 TPOT (ms):                           4817.75
---------------Inter-token Latency----------------
Mean ITL (ms):                           200.86
Median ITL (ms):                         123.73
P99 ITL (ms):                            502.84
==================================================

Сводка методов оптимизации

Метод оптимизации Прирост пропускной способности
Выбор движка +19.8%
Параллелизм +1.6%