コンテンツにスキップ

NVIDIA H100 GPU 上での Qwen3-32B のスループット最適化

結論

qwen3-32b-h100

H100 GPU 上で Qwen3-32B のスループットを最適化するための推奨設定:

推論サービスのコマンド
trtllm-serve Qwen/Qwen3-32B-FP8 --max_seq_len=40960 --enable_chunked_prefill

最適化前後のベンチマーク結果の比較:

ベンチマークケース 基準設定(最適化なしの vLLM) 最適化後
ShareGPT 合計 TPS: 2352.82
平均 TPOT(ms): 88.09
合計 TPS: 4284.68 (+82.1%)
平均 TPOT(ms): 158.64
短いプロンプト 合計 TPS: 4005.62
平均 TPOT(ms): 1169.72
合計 TPS: 6826.33 (+70.4%)
平均 TPOT(ms): 890.11
中程度のプロンプト 合計 TPS: 3195.30
平均 TPOT(ms): 86.62
合計 TPS: 5901.95 (+84.7%)
平均 TPOT(ms): 223.40
長いプロンプト 合計 TPS: 2148.69
平均 TPOT(ms): 66.61
合計 TPS: 4929.16 (+129.4%)
平均 TPOT(ms): 138.75
非常に長いプロンプト 合計 TPS: 2771.81
平均 TPOT(ms): 43.42
合計 TPS: 4068.16 (+10.7%)
平均 TPOT(ms): 286.97

注記

  1. 本ベンチマークは、考えられるすべての最適化の組み合わせを網羅していません。たとえば、デフォルト設定で最も性能が高い推論エンジンを選び、それを追加調整の出発点としています。このような候補の絞り込みで得られるのは局所最適解であり、大域最適解とは限りません。
  2. 最大バッチサイズ、スケジューリング設定、拡張 KV キャッシュ、CUDA graph、Torch Compile など、利用シナリオに応じた最適化もあります。本書の結論は、用途に合わせてさらに最適化するための出発点として利用できます。
  3. 本テストは特定のハードウェアとソフトウェアの構成で実施しています。推論エンジンの進化により、結論が変わる可能性があります。
  4. 量子化は精度に影響する場合がありますが、多くのモデルでは FP8 量子化による精度低下は 1% 未満です。詳細は評価結果を参照してください。そのため、高スループットでのモデル提供には FP8 量子化を強く推奨します。

記載漏れや最新の変更を反映すべき点があれば、お知らせください。

最適化の目標

高並列度のリクエストで高スループットを実現します。

実験環境

モデル

Qwen3-32B

ハードウェア

単一の NVIDIA H100 SXM GPU。

エンジンのバージョン

  • vLLM: v0.11.0
  • SGLang: v0.5.5.post1
  • TensorRT-LLM: v1.2.0rc1

ベンチマークデータセット

  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 Qwen/Qwen3-32B --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 Qwen/Qwen3-32B --backend openai-chat --endpoint /v1/chat/completions --dataset-name random --random-input-len 4000 --random-output-len 200 --num-prompts 500 --seed 42

実験結果

1. 推論エンジンの選択

vLLM

推論サービスのスクリプト
vllm serve Qwen/Qwen3-32B
ベンチマーク結果
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  178.01
Total input tokens:                      217393
Total generated tokens:                  201422
Request throughput (req/s):              5.62
Output token throughput (tok/s):         1131.55
Peak output token throughput (tok/s):    2360.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          2352.82
---------------Time to First Token----------------
Mean TTFT (ms):                          78118.74
Median TTFT (ms):                        77291.46
P99 TTFT (ms):                           153161.51
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          88.09
Median TPOT (ms):                        70.72
P99 TPOT (ms):                           378.18
---------------Inter-token Latency----------------
Mean ITL (ms):                           69.76
Median ITL (ms):                         50.20
P99 ITL (ms):                            277.93
==================================================

SGLang

推論サービスのスクリプト
python3 -m sglang.launch_server --model-path Qwen/Qwen3-32B
ベンチマーク結果
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  247.94
Total input tokens:                      217393
Total generated tokens:                  201826
Request throughput (req/s):              4.03
Output token throughput (tok/s):         814.03
Peak output token throughput (tok/s):    1329.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          1690.84
---------------Time to First Token----------------
Mean TTFT (ms):                          115690.30
Median TTFT (ms):                        117738.49
P99 TTFT (ms):                           230503.32
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          57.86
Median TPOT (ms):                        54.19
P99 TPOT (ms):                           95.84
---------------Inter-token Latency----------------
Mean ITL (ms):                           56.25
Median ITL (ms):                         43.94
P99 ITL (ms):                            207.79
==================================================

TensorRT-LLM

推論サービスのスクリプト
trtllm-serve Qwen/Qwen3-32B
ベンチマーク結果
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  157.59
Total input tokens:                      217393
Total generated tokens:                  201723
Request throughput (req/s):              6.35
Output token throughput (tok/s):         1280.04
Peak output token throughput (tok/s):    1958.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          2659.50
---------------Time to First Token----------------
Mean TTFT (ms):                          65281.52
Median TTFT (ms):                        65325.76
P99 TTFT (ms):                           133106.50
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          61.90
Median TPOT (ms):                        59.59
P99 TPOT (ms):                           121.97
---------------Inter-token Latency----------------
Mean ITL (ms):                           59.22
Median ITL (ms):                         47.89
P99 ITL (ms):                            214.01
==================================================

結果: TensorRT-LLM (2659.50 tok/s) > vLLM (2352.82 tok/s) > SGLang (1690.84 tok/s)

2. 量子化:TensorRT-LLM

FP8

推論サービスのスクリプト
python3 -m sglang.launch_server --model-path Qwen/Qwen3-32B-FP8
ベンチマーク結果
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  104.55
Total input tokens:                      217393
Total generated tokens:                  201376
Request throughput (req/s):              9.56
Output token throughput (tok/s):         1926.06
Peak output token throughput (tok/s):    4391.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          4005.32
---------------Time to First Token----------------
Mean TTFT (ms):                          35510.55
Median TTFT (ms):                        31577.26
P99 TTFT (ms):                           79653.82
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          205.13
Median TPOT (ms):                        119.96
P99 TPOT (ms):                           1141.98
---------------Inter-token Latency----------------
Mean ITL (ms):                           118.32
Median ITL (ms):                         86.53
P99 ITL (ms):                            1195.28
==================================================

3. チャンク化プリフィルの有効化:TensorRT-LLM

推論サービスのスクリプト
trtllm-serve Qwen/Qwen3-32B-FP8 --max_seq_len=40960 --enable_chunked_prefill
ベンチマーク結果
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  97.74
Total input tokens:                      217393
Total generated tokens:                  201376
Request throughput (req/s):              10.23
Output token throughput (tok/s):         2060.40
Peak output token throughput (tok/s):    4371.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          4284.68
---------------Time to First Token----------------
Mean TTFT (ms):                          31208.75
Median TTFT (ms):                        25003.73
P99 TTFT (ms):                           72827.99
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          158.64
Median TPOT (ms):                        115.67
P99 TPOT (ms):                           993.03
---------------Inter-token Latency----------------
Mean ITL (ms):                           107.04
Median ITL (ms):                         85.28
P99 ITL (ms):                            569.95
==================================================

最適化項目の一覧

最適化項目 スループット改善率
エンジンの選択 +13.0%
量子化 +50.6%
チャンク化プリフィルの有効化 +7.0%

その他のベンチマークケース

さらに、さまざまなワークロードに対する汎用性を評価するため、最適化済み設定でベンチマークを実施しました。

基準設定の推論スクリプト
vllm serve Qwen/Qwen3-32B
基準設定のベンチマーク結果
# random 32K input
============ Serving Benchmark Result ============
Successful requests:                     100
Benchmark duration (s):                  1157.25
Total input tokens:                      3200000
Total generated tokens:                  7681
Request throughput (req/s):              0.09
Output token throughput (tok/s):         6.64
Peak output token throughput (tok/s):    24.00
Peak concurrent requests:                100.00
Total Token throughput (tok/s):          2771.81
---------------Time to First Token----------------
Mean TTFT (ms):                          585981.22
Median TTFT (ms):                        582757.65
P99 TTFT (ms):                           1144686.57
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          43.42
Median TPOT (ms):                        43.36
P99 TPOT (ms):                           44.34
---------------Inter-token Latency----------------
Mean ITL (ms):                           42.86
Median ITL (ms):                         43.30
P99 ITL (ms):                            46.54
==================================================

# random 4K input
============ Serving Benchmark Result ============
Successful requests:                     500
Benchmark duration (s):                  976.29
Total input tokens:                      1997942
Total generated tokens:                  99790
Request throughput (req/s):              0.51
Output token throughput (tok/s):         102.21
Peak output token throughput (tok/s):    186.00
Peak concurrent requests:                500.00
Total Token throughput (tok/s):          2148.69
---------------Time to First Token----------------
Mean TTFT (ms):                          482284.21
Median TTFT (ms):                        483375.28
P99 TTFT (ms):                           956141.26
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          66.61
Median TPOT (ms):                        62.08
P99 TPOT (ms):                           100.86
---------------Inter-token Latency----------------
Mean ITL (ms):                           66.29
Median ITL (ms):                         43.38
P99 ITL (ms):                            1395.23
==================================================

# random 2K input
============ Serving Benchmark Result ============
Successful requests:                     500
Benchmark duration (s):                  328.04
Total input tokens:                      998175
Total generated tokens:                  50000
Request throughput (req/s):              1.52
Output token throughput (tok/s):         152.42
Peak output token throughput (tok/s):    359.00
Peak concurrent requests:                500.00
Total Token throughput (tok/s):          3195.30
---------------Time to First Token----------------
Mean TTFT (ms):                          163909.40
Median TTFT (ms):                        164148.38
P99 TTFT (ms):                           322980.86
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          86.62
Median TPOT (ms):                        84.24
P99 TPOT (ms):                           131.41
---------------Inter-token Latency----------------
Mean ITL (ms):                           85.97
Median ITL (ms):                         44.80
P99 ITL (ms):                            1462.05
==================================================

# random 128 input
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  32.88
Total input tokens:                      127698
Total generated tokens:                  4000
Request throughput (req/s):              30.42
Output token throughput (tok/s):         121.66
Peak output token throughput (tok/s):    522.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          4005.62
---------------Time to First Token----------------
Mean TTFT (ms):                          21648.67
Median TTFT (ms):                        21342.36
P99 TTFT (ms):                           32678.31
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          1169.72
Median TPOT (ms):                        1292.78
P99 TPOT (ms):                           1417.05
---------------Inter-token Latency----------------
Mean ITL (ms):                           877.29
Median ITL (ms):                         1141.11
P99 ITL (ms):                            1435.80
==================================================
最適化後の推論スクリプト
trtllm-serve Qwen/Qwen3-32B-FP8 --max_seq_len=40960 --enable_chunked_prefill
最適化後のベンチマーク結果
# random 32K input
============ Serving Benchmark Result ============
Successful requests:                     100
Benchmark duration (s):                  788.52
Total input tokens:                      3200000
Total generated tokens:                  7832
Request throughput (req/s):              0.13
Output token throughput (tok/s):         9.93
Peak output token throughput (tok/s):    104.00
Peak concurrent requests:                100.00
Total Token throughput (tok/s):          4068.16
---------------Time to First Token----------------
Mean TTFT (ms):                          396294.90
Median TTFT (ms):                        397717.15
P99 TTFT (ms):                           778540.06
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          286.97
Median TPOT (ms):                        255.80
P99 TPOT (ms):                           581.09
---------------Inter-token Latency----------------
Mean ITL (ms):                           284.98
Median ITL (ms):                         39.76
P99 ITL (ms):                            2105.62
==================================================

# random 4K input
============ Serving Benchmark Result ============
Successful requests:                     500
Benchmark duration (s):                  425.60
Total input tokens:                      1997942
Total generated tokens:                  99888
Request throughput (req/s):              1.17
Output token throughput (tok/s):         234.70
Peak output token throughput (tok/s):    828.00
Peak concurrent requests:                500.00
Total Token throughput (tok/s):          4929.16
---------------Time to First Token----------------
Mean TTFT (ms):                          208082.20
Median TTFT (ms):                        204136.20
P99 TTFT (ms):                           415000.76
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          138.75
Median TPOT (ms):                        141.52
P99 TPOT (ms):                           151.74
---------------Inter-token Latency----------------
Mean ITL (ms):                           138.01
Median ITL (ms):                         45.37
P99 ITL (ms):                            1254.20
==================================================

# random 2K input
============ Serving Benchmark Result ============
Successful requests:                     500
Benchmark duration (s):                  177.60
Total input tokens:                      998175
Total generated tokens:                  50000
Request throughput (req/s):              2.82
Output token throughput (tok/s):         281.53
Peak output token throughput (tok/s):    1529.00
Peak concurrent requests:                500.00
Total Token throughput (tok/s):          5901.95
---------------Time to First Token----------------
Mean TTFT (ms):                          86596.60
Median TTFT (ms):                        86629.72
P99 TTFT (ms):                           171842.84
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          223.40
Median TPOT (ms):                        237.63
P99 TPOT (ms):                           249.66
---------------Inter-token Latency----------------
Mean ITL (ms):                           221.16
Median ITL (ms):                         49.40
P99 ITL (ms):                            1216.32
==================================================

# random 128 input
============ Serving Benchmark Result ============
Successful requests:                     1000
Benchmark duration (s):                  19.29
Total input tokens:                      127698
Total generated tokens:                  4000
Request throughput (req/s):              51.83
Output token throughput (tok/s):         207.33
Peak output token throughput (tok/s):    860.00
Peak concurrent requests:                1000.00
Total Token throughput (tok/s):          6826.33
---------------Time to First Token----------------
Mean TTFT (ms):                          10718.84
Median TTFT (ms):                        10511.60
P99 TTFT (ms):                           19055.52
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          890.11
Median TPOT (ms):                        949.23
P99 TPOT (ms):                           1351.38
---------------Inter-token Latency----------------
Mean ITL (ms):                           667.57
Median ITL (ms):                         925.89
P99 ITL (ms):                            1854.09
==================================================