コンテンツにスキップ

NVIDIA H100 GPU 上での GLM-4.x のスループット最適化

結論

H100 GPU 上で GLM-4.x (4.5, 4.6、4.7) のスループットを最適化するための推奨設定:

推論サービスのコマンド
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 精度モデルは、メモリ制約のため NVIDIA H100 GPU を搭載した単一サーバーでは提供できません。このため、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%