The 300-Watt Question: A User's Diagnostic Insight That Reshaped an Inference Stack
"Only 300-400W power use out of 1100W, maybe worth trying EP now that we have nvlink with multicast support? Cuda graphs working?"
At first glance, this message from the user in an opencode coding session appears to be a simple status check — a glance at power meters and a tentative suggestion to try a different parallelism strategy. But beneath its brevity lies one of the most consequential moments in a long-running deployment effort. This single sentence, uttered at message index 11785, crystallizes a profound insight about GPU utilization, challenges the assistant's benchmarking assumptions, and redirects the entire optimization trajectory for deploying the Kimi K2.6 model with DFlash speculative decoding on an 8× NVIDIA B300 SXM6 machine.
To understand why this message matters, one must appreciate the context in which it arrived. The assistant had just finished a grueling multi-hour deployment effort: copying a working virtual environment from a CT200 machine, downloading a 590 GB model via aria2 at 575 MiB/s, fixing a Triton JIT compilation failure caused by missing Python.h headers, skipping the vision tower warmup to avoid an unavailable flash_attn.cute dependency, and finally launching the K2.6 + DDTree service on the B300 machine. The first benchmark results ([msg 11783]) were impressive: 285.4 tok/s at concurrency 1 with short context, 5/5 coding correctness passes, and clean scaling across the context×concurrency matrix. The NVLink advantage over the earlier PCIe PRO6000 system was dramatic — roughly double the single-stream performance.
But the user was looking at something the assistant had not yet considered: the power draw.
The Power Draw as a Diagnostic Signal
The observation that the GPUs were drawing only 300–400 watts out of a 1100-watt thermal budget is the kind of insight that separates a user who understands system architecture from one who merely reads benchmark tables. Each B300 GPU has a TDP (thermal design power) — the maximum power it can consume under sustained compute load. Drawing only 27–36% of that budget means the GPUs are fundamentally not being utilized. They are not compute-bound. They are not memory-bandwidth-bound in the traditional sense. They are waiting — stalled on communication, synchronization barriers, or kernel launch latency.
This is a critical diagnostic. In GPU computing, power draw correlates strongly with actual computational work being performed. Tensor cores, CUDA cores, and memory subsystems all draw significant power when active. When a GPU is idling — even briefly — between kernel launches, power drops. When it is spending cycles on AllReduce synchronization over NVLink rather than computing, power drops. The 300–400W reading told the user that the current TP8 (tensor parallelism) configuration, despite producing respectable throughput numbers, was leaving the vast majority of the hardware's compute capability on the table.
The assistant's own reasoning in the preceding message ([msg 11784]) had already identified that "the AllReduce bottleneck was the limiting factor on the PCIe setup" and that NVLink was showing "substantially higher throughput." But the assistant was satisfied with the improvement. The user, by contrast, saw the power numbers and immediately recognized that the problem had merely shifted, not been solved. On PCIe, the bottleneck was the interconnect bandwidth. On NVLink, the interconnect was faster, but the GPUs were still not fully utilized — they were now waiting on something else, likely the same AllReduce synchronization patterns that had plagued the PCIe setup, just less severely.
The EP Proposal: Reopening the Parallelism Question
The user's suggestion to "try EP now that we have nvlink with multicast support" is not a random idea — it is a direct consequence of the power observation. Expert Parallelism (EP) had been thoroughly benchmarked on the PCIe PRO6000 system earlier in the conversation ([chunk 64.0]), where EP8 dramatically improved single-request throughput from 26→65 tok/s by eliminating AllReduce on MoE layers. On PCIe, EP was the clear winner because it replaced expensive AllReduce communication with cheaper all-to-all operations that better fit the PCIe topology. The user's intuition — validated at the time — was that expert parallelism avoids PCIe AllReduce bottlenecks.
But the B300 machine has NVLink, which changes the communication calculus. NVLink provides much higher bandwidth and lower latency than PCIe, and NVLink multicast (NVLS) allows efficient broadcast operations. On NVLink, tensor parallelism (TP) becomes more viable because the AllReduce overhead is significantly reduced. The assistant had chosen TP8 for the B300 deployment, and the benchmark results were strong.
Yet the power draw tells a different story. If TP8 on NVLink is still leaving 70% of the GPU power budget unused, then the AllReduce overhead — while reduced — is still the dominant cost. The user's suggestion to try EP again on NVLink is a hypothesis: perhaps EP's elimination of AllReduce on MoE layers will not just improve throughput on paper, but will actually saturate the GPUs, pushing power draw toward the 1100W ceiling and extracting genuine compute-bound performance.
The parenthetical "now that we have nvlink with multicast support" is crucial. NVLink multicast (NVLS) is a hardware feature that allows one GPU to send data to multiple receivers simultaneously, dramatically reducing the cost of collective operations. Earlier, on the PCIe system, EP's advantage came from avoiding PCIe AllReduce. On NVLink, the question is subtler: does TP8 with NVLink AllReduce still leave headroom, or does EP with NVLink multicast unlock a new regime? The user is betting on the latter.
The CUDA Graphs Question
The second half of the message — "Cuda graphs working?" — is deceptively simple. CUDA graphs are a mechanism for launching sequences of GPU kernels as a single unit, eliminating kernel launch overhead and allowing the GPU to pipeline work more efficiently. In the context of speculative decoding with DDTree, CUDA graphs are critical because the tree verification step involves launching many small kernels in sequence; without graphs, the CPU→GPU launch latency for each kernel becomes a bottleneck.
The user's question reveals an understanding that CUDA graphs might not be functioning correctly in the current deployment. This is a pointed diagnostic: if CUDA graphs are broken, the GPUs would be underutilized regardless of parallelism strategy, because they would be spending cycles waiting for kernel launches from the CPU. The power draw observation and the CUDA graphs question are two sides of the same coin — the user is triangulating on the root cause of underutilization.
The assistant's subsequent investigation ([msg 11786]) confirmed the user's suspicion: the DDTree run showed only 51 out of 131 log entries with cuda graph: True, meaning CUDA graphs were not consistently active. This became a critical finding that would shape the next phase of optimization.
Assumptions and Knowledge Required
To fully understand this message, one needs substantial background knowledge. The reader must understand GPU power draw as a proxy for utilization — that 300W out of 1100W means the GPU is idling most of the time. They must understand the difference between tensor parallelism (splitting individual layers across GPUs, requiring AllReduce after every layer) and expert parallelism (assigning different MoE experts to different GPUs, requiring all-to-all communication only at MoE boundaries). They must know what NVLink is, how it differs from PCIe, and what "multicast support" means for collective operations. They must understand CUDA graphs and why they matter for small-kernel workloads like tree verification in speculative decoding. And they must have context from the earlier PCIe benchmarks to understand why EP was previously the winner.
The message also makes several assumptions. It assumes that the power draw is being measured correctly (that nvidia-smi or similar tool is reporting accurately). It assumes that NVLink multicast is available and functional on the B300 machine. It assumes that the assistant has the ability to reconfigure the service for EP without breaking other functionality. It assumes that the CUDA graphs issue is a configuration problem rather than a fundamental incompatibility with the DDTree code path.
Mistakes and Incorrect Assumptions
The user's hypothesis that EP would be better on NVLink turned out to be incorrect in practice, as later benchmarks would show. On NVLink, TP8 with CUDA graphs achieved 303 tok/s at C=1 (2.15× over the autoregressive baseline), while EP configurations could not match this due to the overhead of all-to-all communication and the inability to use CUDA graphs effectively with the EP topology. The NVLink interconnect was fast enough that TP's AllReduce overhead was no longer the dominant cost, and TP's simpler communication pattern won out.
However, the user's diagnostic instinct was correct in a deeper sense. The 300–400W power draw was a real signal of underutilization, and the subsequent investigation revealed that the root cause was not the parallelism strategy but the CUDA graph instability on sm_103 (the B300 architecture). Budgets larger than 8 caused illegal memory accesses during tree-verify graph capture, forcing the system to use eager mode which lost the 3.8× graph speedup. The workload was confirmed to be HBM-bandwidth-bound — 100% GPU utilization but only 360–460W, meaning the compute units were genuinely idle, waiting on memory. The user's power observation was the first clue that led to this diagnosis, even if the specific remedy (EP) was not the answer.
The Thinking Process Visible in the Message
This message is a masterclass in concise diagnostic reasoning. The user connects three observations — low power draw, the availability of NVLink multicast, and the uncertain status of CUDA graphs — into a coherent hypothesis about system underutilization. Each element reinforces the others: low power suggests the GPUs aren't working hard, which could be caused by communication overhead (addressed by EP) or launch overhead (addressed by CUDA graphs). The user doesn't prescribe a solution; they pose a question, inviting the assistant to investigate.
The phrase "maybe worth trying" is deliberately tentative — the user is not commanding but suggesting, leaving room for the assistant's judgment. The question mark on "Cuda graphs working?" is genuine inquiry, not rhetorical. The entire message is structured as a diagnostic probe: here's a symptom (low power), here's a possible cause (parallelism strategy), here's another possible cause (CUDA graphs), please investigate.
Impact on the Conversation
This message redirected the entire optimization effort. The assistant immediately investigated CUDA graphs and NVLS support ([msg 11786]), discovering the inconsistent graph activation that would become a central focus of subsequent work. The power draw observation was documented in the final DDTREE_FINDINGS_REPORT.md as a key finding: "Workload confirmed to be HBM-bandwidth-bound (100% GPU util but only 360–460 W / 1100 W), meaning the compute is genuinely idle and waiting on memory." This finding directly motivated the roadmap for a custom C/C++/CUDA inference stack that could eliminate Python overhead and fuse operations to better utilize the hardware.
The user's message at index 11785 is a reminder that in systems engineering, the most valuable insights often come not from benchmark numbers but from physical observations — the heat coming off the hardware, the whine of the fans, the power meter reading. The user saw something the assistant missed, asked the right questions, and set the project on a more productive course.