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

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

Вывод

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

Команда обслуживания модели
vllm serve zai-org/GLM-4.6-FP8 -tp 8

Примечание

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

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

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

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

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

Модель

zai-org/GLM-4.6

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

8 × NVIDIA A100 SXM 80GB 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 A100 из-за ограничений памяти. Поэтому рассматривается обслуживание модели, квантизованной в FP8.

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

vLLM

Скрипт обслуживания модели
vllm serve zai-org/GLM-4.6-FP8 -tp 8
Результат бенчмарка
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  148.61
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              6.73
Output token throughput (tok/s):         1345.12
Peak output token throughput (tok/s):    2500.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          2788.21
---------------Time to First Token----------------
Mean TTFT (ms):                          51022.80
Median TTFT (ms):                        48308.20
P99 TTFT (ms):                           106768.28
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          154.20
Median TPOT (ms):                        144.84
P99 TPOT (ms):                           318.65
---------------Inter-token Latency----------------
Mean ITL (ms):                           134.46
Median ITL (ms):                         117.84
P99 ITL (ms):                            326.23
==================================================

SGLang

Скрипт обслуживания модели
python3 -m sglang.launch_server --model-path zai-org/GLM-4.6-FP8 --host 0.0.0.0 --port 8000 --tp-size 8
Результат бенчмарка
ValueError("type fp8e4nv not supported in this architecture. The supported fp8 dtypes are ('fp8e4b15', 'fp8e5')")

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

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

TP+EP

Скрипт обслуживания модели
vllm serve zai-org/GLM-4.6-FP8 -tp 8 --enable-expert-parallel
Результат бенчмарка
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  153.11
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              6.53
Output token throughput (tok/s):         1305.62
Peak output token throughput (tok/s):    2311.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          2706.34
---------------Time to First Token----------------
Mean TTFT (ms):                          51031.51
Median TTFT (ms):                        48265.76
P99 TTFT (ms):                           108400.10
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          158.11
Median TPOT (ms):                        149.37
P99 TPOT (ms):                           315.61
---------------Inter-token Latency----------------
Mean ITL (ms):                           139.37
Median ITL (ms):                         127.75
P99 ITL (ms):                            321.92
==================================================

3. Максимальное число токенов в батче в vLLM

Скрипт обслуживания модели
vllm serve zai-org/GLM-4.6-FP8 -tp 8 --max-num-batched-tokens 8192
Результат бенчмарка
# --max-num-batched-tokens 4096
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  146.98
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              6.80
Output token throughput (tok/s):         1360.05
Peak output token throughput (tok/s):    2502.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          2819.17
---------------Time to First Token----------------
Mean TTFT (ms):                          49578.97
Median TTFT (ms):                        47246.86
P99 TTFT (ms):                           104952.43
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          159.13
Median TPOT (ms):                        144.06
P99 TPOT (ms):                           547.87
---------------Inter-token Latency----------------
Mean ITL (ms):                           134.40
Median ITL (ms):                         117.57
P99 ITL (ms):                            458.51
==================================================

# --max-num-batched-tokens 8192
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  146.69
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              6.82
Output token throughput (tok/s):         1362.78
Peak output token throughput (tok/s):    2385.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          2824.82
---------------Time to First Token----------------
Mean TTFT (ms):                          49591.68
Median TTFT (ms):                        47020.36
P99 TTFT (ms):                           104829.14
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          160.28
Median TPOT (ms):                        143.24
P99 TPOT (ms):                           559.15
---------------Inter-token Latency----------------
Mean ITL (ms):                           134.08
Median ITL (ms):                         118.83
P99 ITL (ms):                            320.13
==================================================

# --max-num-batched-tokens 16384
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  147.02
Total input tokens:                      214465
Total generated tokens:                  199904
Request throughput (req/s):              6.80
Output token throughput (tok/s):         1359.74
Peak output token throughput (tok/s):    2435.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          2818.53
---------------Time to First Token----------------
Mean TTFT (ms):                          49736.96
Median TTFT (ms):                        47034.75
P99 TTFT (ms):                           105084.77
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          160.50
Median TPOT (ms):                        143.84
P99 TPOT (ms):                           582.59
---------------Inter-token Latency----------------
Mean ITL (ms):                           134.22
Median ITL (ms):                         118.12
P99 ITL (ms):                            325.43
==================================================

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

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