ITADN

[Performance] PR #29223 regresses Llama 3.3 FP8 TP8 H100 throughput by 3.2%

#30200Opennvpohanh 创建于 2026-07-06
N
nvpohanhcommented
[by Codex] ## Checklist - [x] I searched related issues but did not find an existing report for this regression. - [x] The regression appears after PR #29223 / merge commit `da802ddcafe55e25b3e1db86b1e0444afc3e05bc`. - [x] This report uses a public model, public tools, and public SGLang entry points only. ## Describe the bug PR #29223, `(perf): Shard Kimi-K2.5 Eagle3 draft fc + symm-mem AG`, causes an approximately 3.2% decode-throughput regression for `nvidia/Llama-3.3-70B-Instruct-FP8` on one 8x H100 node with TP8. The source boundary was reproduced and bisected repeatedly: the parent of merge commit `da802ddcafe55e25b3e1db86b1e0444afc3e05bc` remains at approximately 128.8 output tok/s, while that merge commit measures approximately 124.8 output tok/s. Because this workload does not use Kimi-K2.5 EAGLE3, the likely area to debug is the shared `LogitsProcessor` change in PR #29223. It replaces `tensor_model_parallel_all_gather(logits)` with `MultimemAllGatherer(..., skip_entry_sync=True)` for the normal tensor-parallel logits-gather path. This is only a suspected mechanism; the bisect proves the PR boundary, not the specific code path within the PR. cc @kpham-sgl ## Reference performance Metric: AIPerf `Output Token Throughput (tokens/sec)` for the completions endpoint, streaming enabled, concurrency 1, fixed ISL 1000, and fixed OSL 1000. | Workload | System / shape | Before #29223 | After #29223 | Drop | | --- | --- | ---: | ---: | ---: | | `nvidia/Llama-3.3-70B-Instruct-FP8` | 1x 8-GPU H100 node, TP8, ModelOpt FP8 | 128.856 tok/s | 124.677 tok/s | 3.24% | Additional fixed-source bisect samples were consistent with this boundary: the last good point measured 128.762-128.859 tok/s and the first bad point measured 124.795-124.930 tok/s. ## Reproduction Compare `da802ddcafe55e25b3e1db86b1e0444afc3e05bc^` against `da802ddcafe55e25b3e1db86b1e0444afc3e05bc` in otherwise identical environments. The measurements above used a CUDA 13.0-era stack, PyTorch 2.11.0-era build, FlashInfer 0.6.12, and Triton 3.6.0. ### 1. Launch the server ```bash export MODEL=nvidia/Llama-3.3-70B-Instruct-FP8 export SERVED_MODEL_NAME=llama3.3-70b export PORT=30000 export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 # Prevent prefix reuse while keeping the optimized radix-cache code path. export SGLANG_RADIX_FORCE_MISS=1 python3 -m sglang.launch_server \ --model-path "${MODEL}" \ --served-model-name "${SERVED_MODEL_NAME}" \ --host 0.0.0.0 \ --port "${PORT}" \ --tp 8 \ --quantization modelopt \ --context-length 2048 \ --piecewise-cuda-graph-max-tokens 2048 \ --mem-fraction-static 0.79 ``` Wait for `http://localhost:${PORT}/health` to become ready. ### 2. Run AIPerf ```bash export ISL=1000 export OSL=1000 export CONCURRENCY=1 export REQUEST_COUNT=5 aiperf profile \ --url "http://localhost:${PORT}" \ --model "${SERVED_MODEL_NAME}" \ --tokenizer "${MODEL}" \ --tokenizer-trust-remote-code \ --endpoint-type completions \ --streaming \ --ui simple \ --extra-inputs "min_tokens:${OSL}" \ --extra-inputs "max_tokens:${OSL}" \ --extra-inputs "ignore_eos:true" \ --concurrency "${CONCURRENCY}" \ --synthetic-input-tokens-mean "${ISL}" \ --synthetic-input-tokens-stddev 0 \ --output-tokens-mean "${OSL}" \ --output-tokens-stddev 0 \ --request-count "${REQUEST_COUNT}" \ --warmup-request-count 1 \ --artifact-dir "aiperf_llama33_fp8_isl${ISL}_osl${OSL}_con${CONCURRENCY}" ``` Compare AIPerf's `Output Token Throughput (tokens/sec)` between the two source revisions. ## Useful debug checks - Revert only the `python/sglang/srt/layers/logits_processor.py` hunk from #29223 and repeat the benchmark. This isolates the shared logits gather from the Kimi-specific FC changes. - Compare the new `MultimemAllGatherer` path with the previous `tensor_model_parallel_all_gather` path on TP8 H100 for a single-token decode workload. - Check the `skip_entry_sync=True` assumption and the lazy symmetric-memory buffer path for this non-speculative Llama workload. - Profile the logits gather latency and any synchronization gap before and after the merge commit. ## Environment - Hardware: 8x NVIDIA H100 in one node - Parallelism: TP8 - Model: `nvidia/Llama-3.3-70B-Instruct-FP8` - Quantization loader: ModelOpt FP8 - Workload: concurrency 1, ISL 1000, OSL 1000, five measured requests, one warmup request - Culprit PR: #29223 - First bad commit: `da802ddcafe55e25b3e1db86b1e0444afc3e05bc`
1 条评论