r/LocalLLaMA · · 3 min read

Benchmark - 4x 5060 Ti (64GB VRAM) (P2P) - Qwen3.6 27B (INT8 /w bf16 kv cache) @ 8 concurrency with SGLang. SGLang seems to handle higher concurrency better with this setup

Mirrored from r/LocalLLaMA for archival readability. Support the source by reading on the original site.

I recently posted some posts with VLLM showing issues with TTFT and concurrency with 4x 5060 ti's. Wanted to share this benchmark to provide what worked for me so other people that are planning to go the 4x 5060 ti route aren't discouraged.

Benchmark Results

============ Serving Benchmark Result ============ Backend: sglang-oai Traffic request rate: inf Max request concurrency: 8 Successful requests: 200 Benchmark duration (s): 348.87 Total input tokens: 61870 Total input text tokens: 61870 Total generated tokens: 44525 Total generated tokens (retokenized): 44476 Request throughput (req/s): 0.57 Input token throughput (tok/s): 177.35 Output token throughput (tok/s): 127.63 Peak output token throughput (tok/s): 76.00 Peak concurrent requests: 11 Total token throughput (tok/s): 304.97 Concurrency: 7.84 Accept length: 2.50 ----------------End-to-End Latency---------------- Mean E2E Latency (ms): 13679.23 Median E2E Latency (ms): 12234.78 P90 E2E Latency (ms): 23320.88 P95 E2E Latency (ms): 28160.07 P99 E2E Latency (ms): 34531.84 ---------------Time to First Token---------------- Mean TTFT (ms): 7504.07 Median TTFT (ms): 7382.56 P90 TTFT (ms): 11857.75 P95 TTFT (ms): 12946.72 P99 TTFT (ms): 16279.74 -----Time per Output Token (excl. 1st token)------ Mean TPOT (ms): 31.24 Median TPOT (ms): 26.88 P90 TPOT (ms): 40.12 P95 TPOT (ms): 51.57 P99 TPOT (ms): 133.01 ---------------Inter-Token Latency---------------- Mean ITL (ms): 27.90 Median ITL (ms): 18.30 P90 ITL (ms): 31.83 P95 ITL (ms): 54.90 P99 ITL (ms): 196.80 Max ITL (ms): 3217.83 ================================================== 

SGLang Script

#!/usr/bin/env bash export PATH="$PATH:/usr/local/cuda-13.3/bin" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-13.3/lib64" # P2P — same NCCL vars as your vLLM script, honored by sglang's pynccl export NCCL_P2P_DISABLE=0 export NCCL_P2P_LEVEL=PHB export NCCL_CUMEM_ENABLE=1 export CUDA_DEVICE_ORDER=PCI_BUS_ID export CUDA_VISIBLE_DEVICES=0,2,3,4 # trust the patched driver's P2P report, skip the subprocess probe export SGLANG_SKIP_P2P_CHECK=1 MODEL=/data/models/hf-cache/Minachist/Qwen3.6-27B-INT8-AutoRound python launch_text_only.py \ --model-path "$MODEL" \ --served-model-name Qwen3.6-27B \ --host 0.0.0.0 \ --port 8000 \ --tp-size 4 \ --disable-custom-all-reduce \ --trust-remote-code \ --api-key <removed> \ --chat-template "$MODEL/chat_template.jinja" \ --tool-call-parser qwen3_coder \ --reasoning-parser qwen3 \ --speculative-algorithm NEXTN \ --speculative-num-steps 2 \ --speculative-eagle-topk 1 \ --speculative-num-draft-tokens 3 \ --max-running-requests 8 \ --chunked-prefill-size 16384 \ --mem-fraction-static 0.86 \ --context-length 200000 

SGLang Benchmark Command

python -m sglang.bench_serving --backend sglang-oai --base-url http://localhost:8000 --model Qwen3.6-27B --dataset-name sharegpt --num-prompts 200 --max-concurrency 8 --seed 42 --output-file sglang_tp4_mtp.json 

SGLang Patch

SGL_DIR=$(python -c "import sglang, os; print(os.path.dirname(sglang.__file__))") F=$SGL_DIR/srt/distributed/device_communicators/custom_all_reduce_utils.py # and will pass against your patched driver sed -i 's/^ full_nvlink = is_full_nvlink(physical_device_ids, world_size)/ full_nvlink = True # PATCHED: PCIe P2P via patched driver/' "$F" grep -n "full_nvlink = True" "$F" # confirm it took 

Disable Multimodal

Create ./launch_text_only.py and populate it with:

#!/usr/bin/env python """launch_text_only.py — sglang.launch_server with multimodal forced off.""" import os import sys def main(): from sglang.srt.plugins import load_plugins from sglang.srt.server_args import prepare_server_args from sglang.srt.utils import kill_process_tree from sglang.launch_server import run_server load_plugins() server_args = prepare_server_args(sys.argv[1:]) server_args.enable_multimodal = False try: run_server(server_args) finally: kill_process_tree(os.getpid(), include_parent=False) if __name__ == "__main__": main() 

## Model Details:
Model HF Page: https://huggingface.co/Minachist/Qwen3.6-27B-INT8-AutoRound
Model KLD (from HF page):

Metric Value Description
Median KLD 0.000621 Median divergence
P90 KLD 0.002607 Divergence at the 90th percentile
Mean KLD 0.009185 Average divergence
Mean Coverage 0.998240 -

KV Cache: BF16
Max Batch Tokens: 16384
Max Concurrency: 8
MTP Enabled: True
Multimodal: False (text only - manually disabled/multimodal by default with SGLang)

Hardware Details:
- Mobo: Asus TUF X570 Gaming Plus WIFi
- CPU: Ryzen 9 3900x
- RAM: 64GB DDR4 @ 3200 Mhz
- Primary X16 PCIE Slot: SlimSAS Retimer 2x 8i bifurcation card
- Bifurcation Cables: 2x Icydock 8i SlimSAS to 2x 4i Oculink
- 4x Oculink Boards 4i x16 (gpus slot into these
- PCIE Active Gen: GEN4 @ 4 lanes per card
- P2P Driver Patch Used: https://github.com/aikitoria/open-gpu-kernel-modules
- Driver Version: 610.43.02-p2p
- Workaround Details: My Ryzen Zen 2 CPU was choking while trying to perform PCIE switching. I managed to get P2P working by passing through the GPU's to a VM running in proxmox with full resizeable bar. I had to set IOMMU to passthrough on the proxmox host, add an ACS grub kernel argument, pass through with full rombar, set CPU to Host in VM settings, use Qemu, No virtual IOMMU in bios (disabled), IOMMU disabled in VM. Installed patched drivers in the Ubuntu 26.04 VM.

submitted by /u/joorklee
[link] [comments]

Discussion (0)

Sign in to join the discussion. Free account, 30 seconds — email code or GitHub.

Sign in →

No comments yet. Sign in and be the first to say something.

More from r/LocalLLaMA