Conversation
|
Warning Review limit reached
Next review available in: 27 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
37adef8 to
3737ace
Compare
3737ace to
53c1d3c
Compare
Aggregate integration qualification evidenceThis PR's patch was included in the combined security qualification branch
The combined changed-path GPU run exercised compiler-cache, attention, page/index validation, stream handling, PCIe IPC/DCP, GEMM, MoE routing, FP6 artifact/export/dequantization, profiler, packaging, and release paths: The artifact/profiler/release subset independently completed: With CUDA hidden, the CPU-compatible security set completed: Correctness gates passed for the benchmarked varlen attention paths: baseline and integrated arms produced identical checksums and maximum magnitude, finite tensors, and nonzero output. Balanced ABBA timings on the GPU above measured:
The fixed eager-launch cost comes from graph-safe validation/sanitization kernels. Standalone MoE route sanitization measured 7.387/7.384/7.322 µs for 8/512/4096 routes. Invalid-row scrub measured 6.967/6.909/7.031 µs for 8/64/512 rows at K=4096. Memory deltas observed in qualification:
Scope: this is evidence for the exact aggregate integration commit, not a claim that a later PR-head update was independently rerun. The full repository test tree is not CPU-compatible, and no end-to-end vLLM/SGLang model-serving run was performed. The temporary GPU runner was destroyed after qualification. |
lukealonso
left a comment
There was a problem hiding this comment.
The stream-lifetime hardening is directionally useful, but this implementation records the same tensors at the wrapper, custom-op, and launch layers. That puts repeated record_stream calls and allocator bookkeeping on the dense GEMM eager hot path, while also narrowing the API to the ambient current stream.
Please consolidate ownership recording at one boundary, preserve an explicit and testable stream contract, and provide target-GPU measurements for representative dense GEMM, weight-only, and block-FP8 shapes in both eager and CUDA-graph modes. Rebase the result with #194/#213 so the overlapping admission and buffer-contract changes are evaluated as one path.
|
Closing rather than merging. The stated threat is same-process misuse of an explicitly selected non-current stream. This patch changes the central dense launch path and adds stream dependencies plus allocator bookkeeping, while its required GPU correctness and performance checks remain pending. That is outside the zero-kernel-path-change boundary and introduces unmeasured hot-path cost. The issue remains open for an API-contract decision. |
Problem
The dense GEMM APIs accept a caller-selected CUDA stream, but the complete composite operation includes PyTorch allocation, fill, reduction, and epilogue work around raw CuTe launches. A non-current explicit stream therefore needs both execution dependencies and allocator-lifetime ownership at one boundary.
Implementation
stream=Nonepath. It enters the original implementation after one branch and performs no CUDA stream lookup, synchronization, orrecord_streamwork.Cost model
stream=None: one required Python branch; no stream resolution, events, or allocator bookkeeping.record_streampass over caller-owned storage.Validation
7b7420662f32871e8890edec78ec0c16dd40ca7d: 6 passed.git diff --check: passed.Closes #153