mirror of
https://github.com/kvcache-ai/ktransformers.git
synced 2026-11-05 01:07:28 +00:00
[GH-ISSUE #1730] Performance Query: Is ~9.5 tokens/s normal for Kimi-K2-Thinking-Native on Xeon 6960P (MRDIMM 8800) + RTX 6000 Blackwell? #1096
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
kvcache-ai/ktransformers#1096
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @yumenoshizuku on GitHub (Dec 18, 2025).
Original GitHub issue: https://github.com/kvcache-ai/ktransformers/issues/1730
Originally assigned to: @KMSorSMS on GitHub.
Reminder
System Info
nvidia-smioutput:lscpuoutput:htopoutput:pqos -moutput:Reproduction
I am following the tutorial:
Running Kimi-K2-Thinking with SGLang and KT-Kernel.Launch Command:
Output Logs (showing generation speed) attached:
sglang.txt
Others
I am observing a decoding speed of approximately 9.5 tokens/s.
Given the hardware specifications:
I would like to ask if this speed is within the expected range for this configuration using the kimi_k2 branch and KT-Kernel?
Considering the high memory bandwidth of the MRDIMMs and the capabilities of the CPU/GPU, I wanted to confirm if there are potential bottlenecks I should look into (e.g., NUMA configuration on the dual-socket board despite using one CPU, specific kernel flags, or quantization overhead).
@ErvinXie commented on GitHub (Dec 18, 2025):
this is not an expected performance, if you have wechat please add me ErvinXie . we will provided fast support.
@ErvinXie commented on GitHub (Dec 18, 2025):
Maybe you can run bench moe scripts in bench directory.
@yumenoshizuku commented on GitHub (Dec 18, 2025):
bench_moe.pyusingCPUINFER_PARAM = 72bench_moe_torch.pyOther moe benchmarks all ran into error :(
bench_moe_amx_k.py(all quantization modes)bench_moe_amx.py(all quantization modes)bench_moe_kernel.py(int8)(int4)
bench_moe_kernel_tiling.py --quant int8 --threads 72bench_moe_kernel_tiling.py --quant int4 --threads 72bench_moe_kml.py@ErvinXie commented on GitHub (Dec 19, 2025):
@yumenoshizuku try this param in bench_moe_amx.py, change CPUINFER_PARAM to your number of cores. Segfault is not an expected results. The expected bandwidth is about 70% of total memory bandwidth.
@ErvinXie commented on GitHub (Dec 19, 2025):
Maybe you did not install the AMX version?
@yumenoshizuku commented on GitHub (Dec 19, 2025):
Still shows segmentation fault when at the warm-up stage using the following config:
Looks like AMX is supported:
@ErvinXie commented on GitHub (Dec 19, 2025):
This is not ok, did you test your memory bandwidth using STREAM? We currently do not have intel XEON6, you can provide us your environment if you don't mind. We can ssh to your environment and fix this problem.
@yumenoshizuku commented on GitHub (Dec 19, 2025):
Here are the STREAM benchmark results:
Multi-thread:
Single-thread:
Regarding the hardware setup, we are currently working on balancing the RAM between the two NUMA nodes. I will let you know once that is ready, as it might affect the memory bandwidth utilization.
Regarding environment access: It would be great if you can look into this. Would it work if we host an AnyDesk session? I can open a terminal with SSH access inside the remote desktop session for you to operate.
@ErvinXie commented on GitHub (Dec 20, 2025):
@yumenoshizuku It is estimated that your env should achieve at least 15 token/s, with 350GB/s for one single numa and 700GB/s for 2 numas. You can email me ervinxie@qq.com your remote desktop, we will find a time to operate on your env next week.
@shrould8888 commented on GitHub (Dec 20, 2025):
I got near 15 t/s with single xeon 5 64 cores cpu + 4090 24G x 2. My config only uses 1 NUMA node
@mtcl commented on GitHub (Dec 22, 2025):
Do you think i can run this model on my configuration?
System Specifications
OS Overview
OS: Ubuntu 24.04.3 LTS
Kernel: Linux 6.14.0-37-generic
Motherboard Specifications
Model: ASUS Pro WS W790E-SAGE SE
CPU Specifications
Processor: Intel Xeon w9-3495X
GPU Specifications
Graphics Cards: 2x NVIDIA RTX PRO 6000 Black Edition
Memory Configuration
Total RAM: 512 GB
Memory Type: DDR5 (8x DIMM slots populated)
Memory Speed: DDR5-4800+ (OC capable)
OC Supported: 6000 OC Stable
Swap: 0 GB (disabled)
Memory Architecture: 8-channel DDR5 configuration
Available for Inference: 503 GB total capacity for model loading
@ErvinXie commented on GitHub (Dec 23, 2025):
@mtcl it is not enough for kimi k2 thinking. But we are going to release our support for Minimax m2 later, then you can try it.
@mtcl commented on GitHub (Dec 23, 2025):
Can I run glm 4.6 or 4.7 with CPU GPU hybrid? I'm able to do it in llama.cp right now with glm 4.6 GG UF. But I would like to run it using SGlang and kt-kernel/ktransformers. When you had your independent ktransformers I used to run deepseek r1 using that. I bought my AMX enabled Intel Xeon processor because of ktransformers.
@yumenoshizuku commented on GitHub (Dec 24, 2025):
Update: After fully populating both CPUs with 12 * 96 GB MRDIMM-8800 per socket, decoding performance increased a little bit:
Hyper-threading ON: ~12.8 tokens/s
Hyper-threading OFF: ~11 tokens/s
I also tried different settings of SNC in the BIOS:
SNC Disabled: The speed drops to 0.5 tokens/s.SNC Enabled: This results in 6 NUMA nodes total. But only 4 of them can be utilized due to the MoE intermediate size being 2048 (unable to evenly distribute across 6 nodes).
Are there specific BIOS options that I can change to optimize the memory topology?
For reference, the BIOS options for our server can be found in the user manual.
@ErvinXie commented on GitHub (Dec 24, 2025):
We recommend using 2 NUMA, multiple NUMA is not friendly to tensor parallel on cpu. How about the total memory bandwidth now?
@yumenoshizuku commented on GitHub (Dec 24, 2025):
The 6-node topology is due to SNC3 (Sub-NUMA Clustering), which is default on Xeon 6 (also discussed in Issue #812).
I tested disabling SNC to achieve 2 NUMA nodes (HEX mode). While raw bandwidth more than doubled, inference speed dropped catastrophically:
The anomaly: In HEX mode, using both sockets yields 0.5 t/s, but restricting it to one socket yields 9.5 t/s. This suggests a severe bottleneck/synchronization issue between the two HEX nodes, despite the much higher bandwidth. Is there a specific configuration to make the 2-node HEX mode work correctly?
Update & Correction:
I re-tested the SNC Disabled (HEX mode/2 NUMA) configuration. The 0.5 t/s was caused by disabling Hyper-Threading and using all physical cores.
With Hyper-Threading ON, the 2-NUMA topology performed better because it allows utilizing all cores (unlike SNC Enabled, which limited usage to 96/144 cores):
SNC Enabled (4 out of 6 NUMA): ~12.8 t/s (96 threads)
SNC Disabled (2 NUMA): 14.5 t/s (144 threads)
However, I attempted to upgrade to v0.5.0 to see if performance could be improved further, but it now crashes on launch.
I attempted setting
--mem-fraction-static 0.8, but the error persists.It appears the kt cli does not expose
--cuda-graph-max-bsfor adjustment.v0.5.0 Crash Log:
@yumenoshizuku commented on GitHub (Dec 25, 2025):
I did more testing with MiniMax-M2 using v0.5.0. Here are the detailed performance results under different BIOS configurations (SNC Enabled vs Disabled) and Hyper-Threading settings.
Summary:
Detailed Benchmarks
1. SNC Enabled (6 NUMA Nodes)
Hyper-Threading: OFF
STREAM Triad: 658,201.1 MB/s
--cpu-threads 144 --numa-nodes 6--cpu-threads 142 --numa-nodes 6--cpu-threads 140 --numa-nodes 6--cpu-threads 138 --numa-nodes 6--cpu-threads 136 --numa-nodes 6--cpu-threads 132 --numa-nodes 6--cpu-threads 96 --numa-nodes 6--cpu-threads 96 --numa-nodes 4--cpu-threads 72 --numa-nodes 3Hyper-Threading: ON
STREAM Triad: 648,842.0 MB/s
--cpu-threads 150 --numa-nodes 6--cpu-threads 144 --numa-nodes 6--cpu-threads 138 --numa-nodes 6--cpu-threads 96 --numa-nodes 62. SNC Disabled (2 NUMA Nodes / HEX Mode)
Higher bandwidth, lower decode speed.
Hyper-Threading: ON
STREAM Triad: 770,911.4 MB/s
--cpu-threads 150 --numa-nodes 2--cpu-threads 146 --numa-nodes 2--cpu-threads 144 --numa-nodes 2--cpu-threads 142 --numa-nodes 2--cpu-threads 140 --numa-nodes 2--cpu-threads 138 --numa-nodes 2Hyper-Threading: OFF
STREAM Triad: 695,106.9 MB/s
--cpu-threads 144 --numa-nodes 2--cpu-threads 142 --numa-nodes 2--cpu-threads 140 --numa-nodes 2--cpu-threads 138 --numa-nodes 2--cpu-threads 132 --numa-nodes 2--cpu-threads 96 --numa-nodes 2--cpu-threads 72 --numa-nodes 1However, when trying to run DeepSeek-V3.2, it only outputs garbled characters.
@ErvinXie commented on GitHub (Dec 25, 2025):
I think the results for M2 is reasonable, but for deepseek it is not expected. A community user of us provided his results for reference.
@KMSorSMS commented on GitHub (Dec 25, 2025):
You need to add a parameter :
--kv-cache-dtype bf16@yumenoshizuku commented on GitHub (Dec 25, 2025):
Thanks for the suggestion. It runs correctly now.
However, the decode speed for DeepSeek V3.2 is only ~13.5 tokens/s with SNC Disabled, which is still much lower than the result posted in the earlier comment. Does it look like the bottleneck is on the CPU?
With SNC Enabled, decode speed is around 11.8 t/s:
Launch Command:
@mtcl commented on GitHub (Dec 26, 2025):
would you know for a similar issue, even if i add or dont add
--kv-cache-dtype bf16i keep on getting garbled characters.@mtcl commented on GitHub (Dec 26, 2025):
So I was able to solve the garbled test issue with below command, but I get this new error now on a bigger prompt.
@ErvinXie commented on GitHub (Jan 15, 2026):
We somehow encountered this problem in our xeno6 test environment. It turns out that some cpu core binding strategy work not very well on multi numa xeno6 cpus. Maybe you should adjust thread pool count and threads count to adjust this.