Skip to content

[RFC]: Model support and feature roadmap for Ouro, Nanbeige4.2, and Huginn #69

Open

Description

@bjf-frz

Motivation.

Maintain one model and feature progress tracker for vllm-rlt, initially limited to Ouro, Nanbeige4.2, and Huginn. Contributors should be able to see which implementations exist, which work is in progress, and which combinations still need integration.

Track architecture implementations rather than duplicating the same backend for every checkpoint size. Keep PD as a core priority alongside loop-level batching, depth-aware KV, asynchronous execution, adaptive depth, and self-speculative decoding.

This issue complements the architecture/refactoring roadmap in #32. Recipes and training/rollout integration will have separate RFCs; this issue links to their results rather than collecting unrelated benchmark scripts or training tasks.

Proposed Change.

Scope and model reuse

  • Ouro: one model implementation for 1.4B and 2.6B, configured by checkpoint metadata.
  • Ouro-Thinking: reuse the Ouro core and runtime features. Track Thinking-specific basic integration separately: checkpoint configuration, BOS/EOS, chat-template/enable_thinking behavior, and generation/reference checks. Do not create another recurrent backend solely for the Thinking weights.
  • Nanbeige4.2: one implementation covering 3B and 3B-Base, starting with the official fixed two-loop semantics. Native fixed two-loop support merged in [MODEL] : support Nanbeige/Nanbeige4.2-3B recurrent causal LM #63; checkpoint-specific and cross-feature qualification remains separate.
  • Huginn: a separate architecture integration for Huginn-0125, including its prelude/recurrent/coda structure, state initialization/input injection, and cache semantics.

Official references: Ouro, Ouro-Thinking, Nanbeige4.2, Huginn.

Status convention

  • ✅ Implemented and merged for the tracked architecture/path.
  • 🚧 In progress: a partial integration, open implementation PR, or explicitly active work item in a linked RFC.
  • ⬜ Not implemented/integrated for this model in the tracked scope.
  • ➖ No separate implementation task: reuse the Ouro implementation and track its progress in the Ouro row/sub-tables.

These are engineering progress indicators, not claims of validation on every checkpoint, hardware platform, workload, or feature combination. A parent feature is 🚧 while some listed subfeatures remain incomplete. An existing shared utility does not by itself complete a new model's integration.

Progress refreshed on 2026-10-22 against main at 4a350344027960a48384626aa646f1765fda6d4f. #63 Nanbeige, #77 Nanbeige PD, #82 Huginn and #106 Thinking basic integration are merged. #118 stage/loop execution and #107 scheduler result application are also merged. These statuses identify implementation scope, not qualification of every checkpoint, backend or feature combination.

Overall progress

Model / integration Checkpoint scope Basic implementation Assignee(s) Scheduling / batching Assignee(s) KV cache Assignee(s) GPU execution Assignee(s) Adaptive depth Assignee(s) Self-speculation Assignee(s) PD Assignee(s)
Ouro 1.4B, 2.6B ✅ — 🚧 @LyxWxj, @Carlos779988 ✅ — 🚧 @yanbao1217 🚧 @MinhaoLi0318 🚧 @0z5a, @IDEA-V, @liuyao0322, @Dmaner 🚧 @jyizheng
Ouro-Thinking 1.4B-Thinking, 2.6B-Thinking ✅ #106 @YouHengfei ➖ — ➖ — ➖ — ➖ — ➖ — ➖ —
Nanbeige4.2 3B, 3B-Base ✅ #63 @cs-ai-li 🚧 #63 @cs-ai-li 🚧 #63 @cs-ai-li 🚧 @0z5a ⬜ — ⬜ — 🚧 #77 merged basic PD @kunkunblueberry
Huginn Huginn-0125 ✅ #82 @0z5a 🚧 #82 @0z5a 🚧 #82 @0z5a 🚧 #82 @0z5a ⬜ — ⬜ — ⬜ —

Each feature has an Assignee(s) column listing contributors to its claimed work. Multiple contributors may share a feature or claim different subfeatures. — means no assignee is recorded; Ouro-Thinking runtime cells marked ➖ inherit the corresponding Ouro task.

Names prefilled from existing PRs/RFC claims identify contributors only to the linked scope, as shown in the sub-tables. They do not assign all remaining work in the parent feature to those contributors. Record new subfeature claims as status · issue/PR · @username in the corresponding model cell and reflect the contributors in the overall table.

Basic implementation includes configuration and weight loading, tokenizer/chat template, model computation, fixed recurrence, greedy and temperature/top-k/top-p sampling, EOS/length handling, and text generation. These define acceptance for basic model integration; contributors may split the implementation work as needed.

For Ouro-Thinking, only basic integration requires a separate task. All other cells are marked ➖ because they reuse Ouro and require no separate implementation; their progress is maintained in the Ouro row and sub-tables. This does not mean the features are unsupported or that checkpoint validation can be skipped.

@YouHengfei's shared Thinking-specific basic integration merged in #106. The recipe covers bounded BF16 fixed-four-loop synchronous checks for both 1.4B-Thinking and 2.6B-Thinking. Other runtime combinations and base Ouro-2.6B quality/performance are not inherited from those checks. See the current checkpoint matrix.

Scheduling and batching

Subfeature Meaning Ouro, including Thinking runtime Nanbeige4.2 Huginn
Loop-level continuous batching Rebuild batches at recurrence boundaries so requests at different positions/depths can execute together and new requests can enter. ✅ ✅ #63 · @cs-ai-li ✅ #82 (synchronous fixed-depth) · @0z5a
Chunked prefill Process a long prompt in smaller chunks to bound how long prefill occupies execution resources. ✅ ⬜ ⬜
Priority scheduling / preemption Prefer higher-priority requests and suspend eligible requests when capacity is needed. ✅ ⬜ ⬜
Wavefront chunked prefill batching (WCPB) Batch ready prompt chunks at different recurrence depths while preserving causal dependencies. 🚧 #65 · @LyxWxj (#60 closed unmerged) ⬜ ⬜
Mixed prefill/decode batching Execute compatible prompt and decode recurrent tasks in the same device batch; minimize decode post-processing interference with prefill and keep shared computation and phase-specific state handling clearly separated. ✅ #118, tracked in #81; existing claim @Carlos779988 retained for coordination ⬜ ⬜

Request arrival, completion and cancellation are part of continuous batching. #118 merged split-prefill and compatible prompt/decode RECURRENT batching under LAST_EXITED with non-atomic prefill; PRELUDE/CODA stay separate and speculative rounds are excluded. It does not implement same-request multi-chunk wavefront scheduling (#65). #60 and #50 closed without merge; #68/#113 scheduling fixes and #107 scheduler-owned result application are merged. Further #81 validation should build on this implementation.

KV cache

Subfeature Meaning Ouro, including Thinking runtime Nanbeige4.2 Huginn
Depth-aware paged KV Address cached keys/values by request, token position, layer, and recurrence depth. ✅ ✅ #63 · @cs-ai-li ✅ #82 (boundary/recurrent KV) · @0z5a
KV layouts Define separate/shared storage across depths and the valid history used by subsequent computation. ✅ ⬜ ✅ LAST_EXITED #82; other layouts unqualified · @0z5a
Incremental allocation Assign physical KV pages to a request as its execution frontier grows, rather than assigning its full maximum-length footprint immediately. ✅ ⬜ ⬜
Prefix caching Reuse valid KV for a shared prompt prefix to avoid repeated prefill computation. ✅ ⬜ ⬜
Snapshot / restore Save a suspended request's KV and device state to CPU, release GPU resources, then restore and continue with its logical progress and RNG behavior preserved. ✅ ⬜ ⬜

Incremental allocation draws pages from the engine's KV pool; it does not allocate a new CUDA tensor per token. Snapshot/restore preserves request state rather than recomputing from scratch. #57 public KV views, #109 async device-token restoration and #118 shared metadata/resource contracts are merged; speculative preemption (#52) is still open. Opt-in FP8 KV (#129) is open, including fused writes and scale-aware restoration. FP8 PD transfer is not implemented. Combining #129 with #128 packed/split attention requires scale reads in every consuming path; the second merged change must include that integration.

GPU execution

Subfeature Meaning Ouro, including Thinking runtime Nanbeige4.2 Huginn
Triton / FlashAttention backends Execute attention with the selected optimized backend while preserving model and KV semantics. ✅ #30 ⬜ ⬜
Asynchronous scheduling Prepare/submit subsequent work while earlier GPU work is still running. ✅ #30 ⬜ ⬜
Multi-stream execution Organize compute, transfers, and readbacks on CUDA streams with explicit event dependencies. ✅ #30 ⬜ ⬜
Device-resident state / buffer reuse Retain ordinary-decode tokens, hidden state, and metadata on GPU and reuse bounded workspaces. ✅ #30 ⬜ ⬜
Recurrent CUDA Graph Capture/replay recurrent-core GPU operations to reduce CPU kernel-submission overhead. ✅ #30 🚧 · @0z5a (#76 closed without merge) ✅ #82 (synchronous core/CODA) · @0z5a

This table covers ordinary inference. Huginn's #82 implementation and synchronous LAST_EXITED core/CODA Graph path are merged; async Huginn is not claimed. Nanbeige validation PR #76 closed unmerged, so broader graph qualification remains separate from basic model/PD support. Unchanged empty cells require model-specific integration or qualification rather than inheriting Ouro results. #46 attention contracts are merged; #112 FlashInfer and #128/#130 Triton kernel changes remain open.

Hardware and attention backend adaptation

Adapt suitable attention backends for the hardware available to contributors, and track progress per model and hardware family. These are recommended adaptation targets, not claims that every listed backend is already integrated or fastest on every workload. The existing GPU execution table above describes the implemented CUDA paths; broader hardware/backend coverage is tracked here.

For this table: ✅ completed integration for the explicitly identified device/path; 🚧 partial integration or ongoing work/validation; ⬜ adaptation or target-device validation pending. Record the claimed contributor and implementation PR in the relevant cell when work starts. Performance and accuracy evidence belongs in the corresponding recipes.

Hardware family Recommended attention backend Ouro Nanbeige4.2 Huginn
NVIDIA Ampere: A100 / RTX 30 FA2, FlashInfer FA2 🚧; FlashInfer ⬜ ⬜ ⬜
NVIDIA Ada: L40 / L40S / RTX 40 FA2, FlashInfer FA2 🚧; FlashInfer ⬜ ⬜ ⬜
NVIDIA Hopper: H100 / H800 / H200 FA3 / FA4, FlashInfer FA3 🚧; FA4 🚧 #47; FlashInfer ⬜ ⬜ ⬜
NVIDIA Blackwell: B200 / B300 FA4, FlashInfer FA4 ✅ (B300, #30); FlashInfer ⬜ ⬜ ⬜
NVIDIA Blackwell RTX: RTX 50 / RTX PRO Blackwell FlashInfer with an SM120-compatible path 🚧 #112 · @yanbao1217 (claim); initial validation: RTX 5090 ⬜ ⬜
AMD Instinct: MI300 / MI325 / MI350 series AITER ⬜ ⬜ ⬜
AMD Radeon: RX 7000 / RX 9000 series ROCm Triton; HIP paged attention as an optimization candidate ⬜ ⬜ ⬜
Ascend NPU CANN fused inference attention through torch_npu; MindIE-SD attention operators as a candidate ⬜ ⬜ ⬜
  • Ouro-Thinking inherits Ouro. Existing Ouro hardware evidence primarily covers 1.4B; it does not qualify every checkpoint or device in the same family.
  • FA2/FA3 interfaces already exist, but target-device validation remains pending. H800 FA4 results are reported in the still-open [DOCS] Report synchronous self-speculation evaluation on H800 #47. Nanbeige basic integration merged in [MODEL] : support Nanbeige/Nanbeige4.2-3B recurrent causal LM #63; that alone does not establish support for the recommended backends above.
  • MindIE-SD is a candidate operator integration. Confirm causal attention, paged KV and incremental decode applicability before claiming a complete language-model attention backend. Retain the existing Triton path as a comparison/fallback where supported.

Selection references: FlashAttention, FlashInfer hardware support, AMD backend guidance, and MindIE-SD attention APIs.

Adaptive depth

Subfeature Meaning Ouro, including Thinking runtime Nanbeige4.2 Huginn
Model-specific early exit Use the model's gate or an explicitly defined stopping rule to decide whether a token needs another recurrent traversal. ✅ ⬜ ⬜
Delayed exit Continue submission while an exit signal is pending, with explicitly documented delayed-policy semantics. ✅ #30 ⬜ ⬜
Exact-policy asynchronous exit Preserve the exit depth and hidden state selected by the original policy despite asynchronous execution. 🚧 #56 · @MinhaoLi0318 ⬜ ⬜

Fixed recurrence is part of basic support. Adaptive exit is an optional research extension for Nanbeige4.2, not a requirement for its fixed two-loop integration. Huginn's stopping rules require their own implementation/validation rather than reuse of the Ouro gate. #56 also tracks accuracy, mean-depth, and throughput evidence. Its adaptive-exit evaluation harness and depth statistics merged in #58; this does not complete the exact-policy asynchronous exit implementation.

Self-speculative decoding

Subfeature Meaning Ouro, including Thinking runtime Nanbeige4.2 Huginn
Synchronous greedy / sampling speculation Draft with a shallower recurrence, verify at full depth, and commit a valid suffix; includes correction/bonus tokens, ragged requests, and KV rollback. ✅ #44 ⬜ ⬜
Speculative CUDA Graph Capture/replay compatible draft and verification operations. ✅ #48 synchronous; #118 async core/CODA graphs; #127 additional optimizations open · @0z5a ⬜ ⬜
Token / metadata readback reduction Batch or remove CPU/GPU round trips for draft IDs, verification results, and execution metadata. ✅ #51 · @IDEA-V ⬜ ⬜
Cross-round asynchronous speculation Submit the next speculative round before the previous result is delivered to CPU. ✅ #66/#115/#118 (fixed-depth greedy CUDA, eager/graphs) · @liuyao0322 ⬜ ⬜
Adaptive K / draft depth Choose the candidate count and draft recurrence depth based on acceptance and execution cost/load. 🚧 #84 · @Dmaner; adaptive K also in open #127, not main ⬜ ⬜
Speculative preemption / resume Suspend and restore at safe boundaries while preserving committed outputs, recurrent state, and RNG behavior. 🚧 #52 · @0z5a ⬜ ⬜

#43 tracks algorithms and #47 the H800 evaluation report (still open; retarget/rebase reported complete). #48/#51/#66/#115 are merged. #118 adds shared runtime integration, async speculative core/CODA graphs and PD D-side speculation, with scoped B300 Triton/FA4 device coverage. Async stochastic sampling and speculative preemption remain unsupported; #52 is open for synchronous boundary preemption. #127 remains open for graph buckets, derived limits, vectorization and adaptive K; #121/#133 are open pipelining experiments. #59 closed unmerged after a negative result; #120 documents that result and remains open.

Prefill/decode disaggregation (PD)

Subfeature Meaning Ouro, including Thinking runtime Nanbeige4.2 Huginn
P/D separation and KV/hidden handoff Prefill workers process prompts and transfer the state needed for decode workers to continue generation. ✅ #31 ✅ #77 · @kunkunblueberry; bounded fixed-two-loop PD scope ⬜
Chunked transfer / compute overlap Transfer completed prompt chunks while later prefill computation continues. ✅ #31 ⬜ ⬜
Multiple P/D workers / resource credits Route requests across worker pools and reserve receiving/execution capacity. ✅ #31 ⬜ ⬜
Prefix-cache integration Reuse valid cached prefixes within PD and adjust the required computation/transfer ranges. ✅ #31 ⬜ ⬜
Async / CUDA Graph integration Use asynchronous execution and graphs in PD workers while respecting receive completion and buffer lifetimes. ✅ #31 ⬜ ⬜
WCPB integration Combine wavefront prefill with valid chunk/depth handoff boundaries. ⬜ ⬜ ⬜
Self-speculation integration Let the decode worker run draft/verify/rollback after receiving the prompt state from prefill. ✅ #118 D-side speculation; draft #119 agreement validation · @jyizheng ⬜ ⬜

PD speculation combines PD deployment with local speculation on D; it does not put draft and target on separate P/D workers. #118 provides shared stage connectors and D-side speculative execution; #122 ready-handoff prioritization and #77 Nanbeige basic PD are merged. Current deployment scope is same-host multi-GPU, not cross-node RDMA qualification. #64 closed unmerged; #111 retains contracts, #131 protocol typing and dependent #132 reservation-credit naming are draft/open. #119 is a draft real-checkpoint agreement test; equal-prefill-geometry checks do not imply bitwise equality under arbitrary concurrent BF16 batching.

Independent tasks, dependencies, and inherited support

These relationships describe implementation scope, not contributor ownership. A dependent task can have a different assignee from its prerequisite and can be developed in parallel against an agreed interface.

Relationship Scope What to implement / reuse
Shared architecture Ouro 1.4B / 2.6B; Nanbeige4.2 3B / 3B-Base Reuse the corresponding architecture implementation; validate checkpoint-specific configuration and behavior without duplicating runtime tasks.
Inherited runtime support Ouro-Thinking Claim only Thinking-specific basic integration. Runtime features inherit Ouro's implementation and status; keep their overall cells ➖ and validate Thinking checkpoints in recipes.
Separate model integration Ouro, Nanbeige4.2, Huginn Each architecture needs its own computation and state semantics. Shared engine infrastructure can be reused, but each model's feature integration and validation remain tracked separately.
Separately claimable runtime work Scheduling, KV management, GPU execution, adaptive depth, self-speculation, PD, and their subfeatures Contributors may claim a whole feature or a bounded subfeature. These are separate work scopes, not a promise that they have no technical dependencies.
Dependent scheduling / state work WCPB; prefix caching; snapshot/restore WCPB builds on chunked prefill and recurrence-aware scheduling. Prefix reuse needs valid model/depth-aware KV semantics. Snapshot/restore needs request-state preservation and resource lifecycle handling.
Dependent execution work Delayed / exact-policy asynchronous exit; speculative CUDA Graph; cross-round asynchronous speculation Async exit needs a defined model-specific stopping policy and async execution. Speculative graphs and async speculation build on correct draft/verify/commit/rollback behavior plus compatible execution and buffer-lifetime support.
Separate speculative optimizations Token/readback reduction; adaptive K / draft depth; speculative preemption / resume Each can be claimed separately on top of the speculative path. They must preserve its correctness; preemption/resume additionally needs request-state preservation; PD reuses the existing KV transfer mechanism. None automatically completes the other optimizations.
Explicit cross-feature integration PD prefix-cache, async/graph, WCPB, and self-speculation integration Reuse PD and the corresponding feature, then implement and validate their interaction. Completing both standalone features does not automatically complete their PD integration cell.

For each implementation issue, list concrete prerequisites and reused components. A dependency is not a new implementation task if the needed support already exists. Inherited support must be distinguished from integration that still needs model-specific work or validation; do not mark another architecture complete merely because Ouro supports it.

Task assignment and claiming

Progress and linked claims refreshed on 2026-10-22. Existing claims are preserved; this refresh assigns no new work. Implementation and qualification remain separate.

@Carlos779988's mixed-batching claim remains recorded in #81; #118 has now delivered its implementation foundation and mixed recurrent batching. Coordinate remaining validation with @LyxWxj, keeping multi-chunk WCPB in #65 separate. @0z5a's Nanbeige/Huginn graph claim is retained: Huginn #82 merged, Nanbeige #76 closed unmerged. @CXJorz has no implementation task assigned.

Contributors may freely claim and split work at any practical scope, individually or collaboratively. Comment with the intended scope and link the implementation issue/PR; record the contributor(s) under Assignee(s) and note relevant dependencies. Ownership applies only to the claimed scope.

Track subfeature progress independently and mark a parent feature complete once all applicable subfeatures are integrated and validated. Technical dependencies and inherited support describe how implementations relate; they do not restrict task assignment.

Open qualification and evidence work (2026-10-22)

Completion and maintenance

  • Update the relevant cell, assignee(s), and linked implementation issue/PRs when work starts or merges. Ownership applies only to the explicitly claimed scope; parent status aggregates the subfeature results.
  • For basic model integration, validate the intended checkpoint against its reference computation and generation behavior. Reusing an architecture does not automatically qualify every checkpoint.
  • For a feature, exercise its real engine path, relevant request/KV/RNG lifecycle, and the combinations being claimed. Unsupported combinations should be rejected explicitly and documented.
  • For performance work, report matched, repeated before/after results, including high-concurrency/large-batch workloads and low-concurrency controls where relevant. Fewer synchronizations or kernels alone is not a throughput claim.
  • Every new model or feature must update the README support matrix, relevant documentation, and its recipe. Keep commands, checkpoint/configuration pins, correctness results, and performance measurements in the recipe; avoid adding a separate benchmark script for every tracker cell.

Alternatives and impact

We considered separate implementations/progress matrices for every checkpoint size and Thinking variant. The shared-architecture approach keeps runtime work in one place while preserving a small, explicit Thinking integration task and separate checkpoint validation. A single flat feature list would hide important PD, asynchronous, and speculative integration gaps, so those features have sub-tables.

This RFC itself changes no runtime behavior, public API, or memory usage. Implementation PRs must describe any API/configuration changes and their measured performance and memory effects. It does not expand model scope beyond the three families above, introduce training integration, or declare performance gains without evidence.

Feedback Period.

At least one week after publication. Keep this issue open as a living implementation tracker after the initial scope discussion.

CC List.

@bjf-frz @hsliuustc0106

Anything else.

Related architecture and implementation work is linked in the tables. The progress snapshot should be maintained as those PRs evolve; a refactoring PR and a feature-support PR are different kinds of work.

Before submitting a new issue...

Activity

  1. added
    RFCRequests for comments on major architectural changes or design choices
    on Sep 29, 2026
  2. 0z5a commented on Sep 29, 2026

    @0z5a
    Contributor

    It's okay for me to take further CUDA Graph support on Nanbeige4.2 and Huginn based on my previous work.

  3. CXJorz commented on Sep 29, 2026

    @CXJorz

    I'm new to infra, but I also want to make some contributions to the community

  4. Carlos779988 commented on Sep 29, 2026

    @Carlos779988

    Hi @bjf-frz, I'd like to take the mixed prefill/decode batching item in the scheduling table if no one is on it yet.

    Right now a prefill chunk runs all loops in one go and decode just waits during that time. The idea is to put decode recurrent rows and prompt chunks into the same core call each step: decode rows first, then prompt chunks fill whatever token budget is left, similar to how vLLM handles chunked prefill. WCPB (#60) already splits prefill into chunk/depth tasks, so I'll build on that instead of redoing it, and I'll sync with @LyxWxj.

    The first version will only cover last_exited + sync, and reject the other combos (async, CUDA graphs, spec, PD) for now. For correctness I'll compare against the current phase-separated path on the tiny model.

    The PD numbers in #31 (2P2D cutting ITL by ~50% vs 4 replicas) already suggest prefill interference is a big part of decode latency. I'd start with a small single-GPU benchmark that isolates this on current main, so there's a baseline to compare against. Then an RFC with the design, then the implementation.

  5. LyxWxj commented on Sep 29, 2026

    @LyxWxj
    Contributor

    Hi @bjf-frz, I'd like to take the mixed prefill/decode batching item in the scheduling table if no one is on it yet.

    Right now a prefill chunk runs all loops in one go and decode just waits during that time. The idea is to put decode recurrent rows and prompt chunks into the same core call each step: decode rows first, then prompt chunks fill whatever token budget is left, similar to how vLLM handles chunked prefill. WCPB (#60) already splits prefill into chunk/depth tasks, so I'll build on that instead of redoing it, and I'll sync with @LyxWxj.

    The first version will only cover last_exited + sync, and reject the other combos (async, CUDA graphs, spec, PD) for now. For correctness I'll compare against the current phase-separated path on the tiny model.

    The PD numbers in #31 (2P2D cutting ITL by ~50% vs 4 replicas) already suggest prefill interference is a big part of decode latency. I'd start with a small single-GPU benchmark that isolates this on current main, so there's a baseline to compare against. Then an RFC with the design, then the implementation.

    Hello @Carlos779988, thanks for your reply. The pr #60 was just a temporary design to test the gaining of WCPB without much consideration of later maintenance. I'm not sure it'd be good if we build on that ,we should discuss it first.

  6. bjf-frz commented on Sep 29, 2026

    @bjf-frz
    CollaboratorAuthor

    It's okay for me to take further CUDA Graph support on Nanbeige4.2 and Huginn based on my previous work.

    Thanks for taking this on! You could also look into improving the CUDA Graph hit rate under high concurrency.

  7. bjf-frz commented on Sep 29, 2026

    @bjf-frz
    CollaboratorAuthor

    I'm new to infra, but I also want to make some contributions to the community

    Hi @CXJorz, you can start by following the user guide to get the project running and try it out. Once you’re familiar with the basics, we can help you find a suitable task to work on.

  8. bjf-frz commented on Sep 29, 2026

    @bjf-frz
    CollaboratorAuthor

    Hi @bjf-frz, I'd like to take the mixed prefill/decode batching item in the scheduling table if no one is on it yet.

    Right now a prefill chunk runs all loops in one go and decode just waits during that time. The idea is to put decode recurrent rows and prompt chunks into the same core call each step: decode rows first, then prompt chunks fill whatever token budget is left, similar to how vLLM handles chunked prefill. WCPB (#60) already splits prefill into chunk/depth tasks, so I'll build on that instead of redoing it, and I'll sync with @LyxWxj.

    The first version will only cover last_exited + sync, and reject the other combos (async, CUDA graphs, spec, PD) for now. For correctness I'll compare against the current phase-separated path on the tiny model.

    The PD numbers in #31 (2P2D cutting ITL by ~50% vs 4 replicas) already suggest prefill interference is a big part of decode latency. I'd start with a small single-GPU benchmark that isolates this on current main, so there's a baseline to compare against. Then an RFC with the design, then the implementation.

    Thanks for taking this on! I think there are two points worth focusing on:

    1. Minimize the impact of decode-side post-processing after each loop on prefill tokens, especially unnecessary exit checks, CPU/GPU synchronization, and waiting.
    2. Keep the implementation simple and maintainable, with clear boundaries between shared computation and prefill/decode-specific processing.

    Please coordinate with @LyxWxj on the design before building on #60.

  9. yanbao1217 commented on Sep 29, 2026

    @yanbao1217

    Hi @bjf-frz @hsliuustc0106, I'd like to take ownership of the Ouro × RTX 50 (SM120) FlashInfer adaptation item in the hardware/backend table.

    Plan:

    • Identify and validate a FlashInfer version with an SM120-compatible path, and first verify kernel coverage for Ouro's attention shapes/workloads. If coverage is incomplete, I'll document the unsupported cases explicitly before starting the integration.
    • Integrate FlashInfer as a selectable attention backend for Ouro on the SM120 path, while preserving the existing depth-aware paged-KV semantics and model/KV invariants.
    • Correctness: compare generation results against the existing Triton path (which already has RTX 5090 evidence via [FEAT] Capture fixed-depth speculative decode with CUDA Graphs #48) and the reference implementation.
    • Performance: run matched benchmarks against the existing Triton backend on Ouro-1.4B BF16, covering both low- and high-concurrency settings according to the tracker's performance reporting requirements.
    • Update the README support matrix and the Ouro recipe with the validated configuration and any relevant limitations.

    Validation environment: single RTX 5090 (SM120, 32GB), CUDA.

    I'm also happy to coordinate with the attention-interface refactoring in #46 if it affects this work.

    Thank you!

  10. kunkunblueberry commented on Sep 29, 2026

    @kunkunblueberry
    Contributor

    I'd like to take the Nanbeige4.2 × PD integration item as a focused scope.

    My plan is to build on the existing PD implementation in #31 and the Nanbeige4.2 model support in #63, rather than reimplementing the PD runtime. The initial scope will cover:

    • Nanbeige4.2 fixed two-loop execution across separate prefill/decode workers
    • KV/state handoff through the existing PD/NIXL path
    • correctness validation against single-engine Nanbeige execution
    • request lifecycle cases including cancellation and request-id reuse
    • documentation/recipe updates for the supported configuration

    I will start with the single P + single D worker configuration for correctness and lifecycle validation, then evaluate broader multi-worker coverage separately. I won't claim Huginn × PD as part of this task.

    This should leave the model-specific integration separate from the ongoing PD architecture refactoring in #64, while keeping the implementation aligned with the current PD contracts.

    cc @bjf-frz @hsliuustc0106

  11. YouHengfei commented on Sep 30, 2026

    @YouHengfei
    Contributor

    Hi @bjf-frz, I’d like to claim Ouro-Thinking basic integration, starting with Ouro-1.4B-Thinking, followed by separate validation of Ouro-2.6B-Thinking.

    I’ll reuse the existing Ouro implementation and runtime, focusing on:

    Checkpoint/configuration loading, tokenizer, BOS/EOS, and chat-template/enable_thinking behavior.
    Reference computation and generation checks, including greedy/sampling and EOS/length handling.
    README support matrix, documentation, and a reproducible validation recipe.

    Initial validation will cover fixed four-loop synchronous inference. This claim is limited to Thinking-specific basic integration and validation.

  12. bjf-frz commented on Sep 30, 2026

    @bjf-frz
    CollaboratorAuthor

    Hi @bjf-frz @hsliuustc0106, I'd like to take ownership of the Ouro × RTX 50 (SM120) FlashInfer adaptation item in the hardware/backend table.

    Plan:

    • Identify and validate a FlashInfer version with an SM120-compatible path, and first verify kernel coverage for Ouro's attention shapes/workloads. If coverage is incomplete, I'll document the unsupported cases explicitly before starting the integration.
    • Integrate FlashInfer as a selectable attention backend for Ouro on the SM120 path, while preserving the existing depth-aware paged-KV semantics and model/KV invariants.
    • Correctness: compare generation results against the existing Triton path (which already has RTX 5090 evidence via [FEAT] Capture fixed-depth speculative decode with CUDA Graphs #48) and the reference implementation.
    • Performance: run matched benchmarks against the existing Triton backend on Ouro-1.4B BF16, covering both low- and high-concurrency settings according to the tracker's performance reporting requirements.
    • Update the README support matrix and the Ouro recipe with the validated configuration and any relevant limitations.

    Validation environment: single RTX 5090 (SM120, 32GB), CUDA.

    I'm also happy to coordinate with the attention-interface refactoring in #46 if it affects this work.

    Thank you!

    Hi @yanbao1217, this scope looks good—thanks for taking it on! Please coordinate with @Levius-Fubuki on the attention interface changes in #46, and keep the validated SM120 configurations and any unsupported cases explicit. Looking forward to the correctness and performance comparisons against the existing Triton path.

  13. bjf-frz commented on Sep 30, 2026

    @bjf-frz
    CollaboratorAuthor

    I'd like to take the Nanbeige4.2 × PD integration item as a focused scope.

    My plan is to build on the existing PD implementation in #31 and the Nanbeige4.2 model support in #63, rather than reimplementing the PD runtime. The initial scope will cover:

    • Nanbeige4.2 fixed two-loop execution across separate prefill/decode workers
    • KV/state handoff through the existing PD/NIXL path
    • correctness validation against single-engine Nanbeige execution
    • request lifecycle cases including cancellation and request-id reuse
    • documentation/recipe updates for the supported configuration

    I will start with the single P + single D worker configuration for correctness and lifecycle validation, then evaluate broader multi-worker coverage separately. I won't claim Huginn × PD as part of this task.

    This should leave the model-specific integration separate from the ongoing PD architecture refactoring in #64, while keeping the implementation aligned with the current PD contracts.

    cc @bjf-frz @hsliuustc0106

    Hi @kunkunblueberry, this scope looks good—thanks for taking it on! Starting with a single P + single D setup is reasonable. Please coordinate with @cs-ai-li on Nanbeige4.2 support in #63 and @YouHengfei on the PD refactoring in #64, reusing the existing interfaces and covering cancellation, request-ID reuse, and resource cleanup.

  14. bjf-frz commented on Sep 30, 2026

    @bjf-frz
    CollaboratorAuthor

    Hi @bjf-frz, I’d like to claim Ouro-Thinking basic integration, starting with Ouro-1.4B-Thinking, followed by separate validation of Ouro-2.6B-Thinking.

    I’ll reuse the existing Ouro implementation and runtime, focusing on:

    Checkpoint/configuration loading, tokenizer, BOS/EOS, and chat-template/enable_thinking behavior. Reference computation and generation checks, including greedy/sampling and EOS/length handling. README support matrix, documentation, and a reproducible validation recipe.

    Initial validation will cover fixed four-loop synchronous inference. This claim is limited to Thinking-specific basic integration and validation.

    Hi @YouHengfei, this scope looks good—thanks for taking it on! Please cover both 1.4B-Thinking and 2.6B-Thinking with one shared integration and validation recipe, using checkpoint configuration to handle the differences. Reuse the existing Ouro implementation and validate both checkpoints through the same workflow.

  15. yanbao1217 commented on Oct 10, 2026

    @yanbao1217

    @bjf-frz FlashInfer SM120 decode backend is ready for review at #112 — initial RTX 5090 validation is complete (correctness, GSM8K-87, and matched throughput results in the PR).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

RFCRequests for comments on major architectural changes or design choices

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions