Prebuilt Qwen3-only server for Linux x86_64. The archive contains CUDA 13.0 runtime libraries and supports NVIDIA compute capabilities 8.x through 12.x. NVIDIA driver 580 or newer, glibc 2.35 or newer, and OpenSSL 3 are required. Model weights are not included.
What's Changed
- fix(deepseek-v2-lite): widen EP2 HF correctness gate by @CAICAIIs in #381
- fix(build): probe CUDA toolkit layouts in a shared openinfer-build crate by @FeathBow in #343
- test(qwen3): add real PEFT LoRA accuracy gate by @FeathBow in #369
- test(qwen3): de-flake lora_golden_gate via own-distribution regret; add TP=2 pass by @FeathBow in #385
- fix(deepseek-v2-lite): precompute NCCL MoE route plan by @CAICAIIs in #383
- docs(readme): refresh Qwen3.5 benchmark against vLLM 0.23.0 by @CAICAIIs in #386
- docs(readme): add star history chart by @xiaguan in #387
- feat(scheduler): add engine-side request lifecycle logs (admitted/fin… by @lulululu-debug in #382
- fix(qwen35): align GDN chunk_state AOT pointers :16 to fix sm_90 crash by @FeathBow in #390
- fix(build): explicitly enable tracing log bridge by @xwxb in #391
- fix(qwen35): batch step-tail logits and sampling by @CAICAIIs in #392
- chore(vllm-support): remove unused load_tokenizer_async by @xiaguan in #394
- chore(vllm): bump git deps to latest main for long-prompt 400 fix by @xiaguan in #402
- refactor(server): own per-model engine launch in model crates by @xiaguan in #404
- refactor(scheduler): collapse per-request output fan-out into one channel + demux by @xiaguan in #405
- fix(ci): restore green CI — sim fixture vocab_size + rustfmt by @xiaguan in #406
- test(vllm-frontend): lift bridge demux tests to sibling file, cull low-value cases by @xiaguan in #407
- fix(qwen35): add __syncthreads() to close the warp_norms WAR race in GDN decode by @FeathBow in #411
- fix(qwen): batch mixed FlashInfer sampling by @CAICAIIs in #413
- refactor(sample): converge per-model token selection + logprobs into openinfer-sample by @xiaguan in #417
- feat(deepseek-v2-lite): start/load logging by @Kokoro2336 in #415
- perf(qwen35): fuse gate/up MLP and tune decode GEMMs by @CAICAIIs in #421
- feat(qwen3): add green context SM partitioning by @xiaguan in #388
- fix(vllm-frontend): reject logprobs=-1 and cache_salt with 400 by @Rushit in #426
- fix(deepseek-v2-lite): add NCCL decode graph probe by @CAICAIIs in #429
- feat(qwen3): add profile-based KV cache sizing by @wdlin233 in #430
- fix(qwen3-scheduler): route echo+logprobs requests to prefill, not unified by @Rushit in #427
- chore(qwen3-scheduler): prune redundant fake-loop tests, extract test module by @xiaguan in #433
- bench(qwen): add mixed sampling HTTP benchmark gate by @CAICAIIs in #432
- fix(qwen3): opt-in GEMM-N reduction-order pin by @FeathBow in #428
- perf(qwen3): select decode attention path by batch, drop ctx>=1024 gate by @xiaguan in #437
- docs(skills): add vllm-bench multi-turn serving benchmark skill by @xiaguan in #424
- docs(skills): scrub local paths from vllm-bench skill by @xiaguan in #440
- feat(qwen3): DFlash speculative decoding by @xiaguan in #436
- fix(qwen3-dflash): post-merge correctness fixes — capture-shape gate, unified readiness, stream by @xiaguan in #442
- feat(deepseek-v2-lite): add mixed-request serving gate with per-request KV ownership by @CAICAIIs in #441
- docs(readme): add Slack community invite badge by @xiaguan in #444
- fix(qwen3): opt-in split-KV chunk-count reduction-order pin by @FeathBow in #438
- feat(dynamo): serve openinfer Qwen3 as a Dynamo backend worker, with a pure-Rust frontend and KV-aware routing by @xiaguan in #445
- chore(deps): bump vllm rust frontend to dedicated-runtime perf rev by @xiaguan in #447
- fix(frontend): drop HTTP-layer sampling guard to restore request-runtime isolation by @xiaguan in #448
- DeepSeek-V2-Lite: HTTP concurrency evidence, subgroup decode batching, and long-prompt fix by @CAICAIIs in #451
- feat(qwen35): scheduler-level chunked prefill (#375) by @scatyf3 in #431
- perf(qwen3): warp-per-token QK RMSNorm+RoPE prefill kernel by @xiaguan in #455
- fix(qwen3-dflash): set enable_kv_events in DFlash test launch options by @FeathBow in #457
- perf(qwen3): decouple batch-invariant split-KV size from Tuned cap by @FeathBow in #449
- fix(qwen3): assert NumericPolicy is immutable post-construction by @FeathBow in #458
- test(qwen35): cover chunked prefill resumed paged kv by @Mrtroll486 in #460
- fix(qwen3): fail loud under --batch-invariant instead of silent per-token fallback by @FeathBow in #462
- bench(deepseek-v2-lite): retain issue 279 benchmark snapshot by @CAICAIIs in #463
- perf(qwen3): add DSpark Markov drafting by @xiaguan in #468
- Lower Qwen3 speculative accept trace to debug by @xiaguan in #472
- feat(kernels): gate MoE third-party substrates by @xiaguan in #474
- Add GLM5.2 DP1/EP8 load-weight slice by @xiaguan in #476
- fix(vllm-frontend): report real KV capacity for engines that publish it by @FeathBow in #475
- feat(glm52): MLA decode brick — projection, absorb, cache-pack, FlashMLA sparse decode by @xiaguan in #477
- fix(glm52): gate kernels behind explicit feature by @xiaguan in #478
- chore(kv-cache): drop local lora_salt_hash, use upstream compute_salt_hash by @xiaguan in #480
- chore(qwen3): single-source split-KV config and pin warmup, measure report GEMMs under the production policy by @FeathBow in #473
- fix(qwen3): size decode page indices for prefix-shared views by @n-WN in #482
- chore(kernels): bump FlashInfer v0.6.12 -> v0.6.13 (#479) by @n-WN in #486
- perf(kernels): vectorize batched embedding gather to 16-byte row copies (#484) by @n-WN in #488
- fix(qwen3): make stream override an RAII guard by @FeathBow in #487
- feat(qwen3-kernel-report): full-forward manifest coverage + roofline rank pass (#456) by @n-WN in #485
- docs(roadmap): add 2026-H2 roadmap by @xiaguan in #493
- fix(kernels): format embedding batch test to satisfy cargo fmt CI by @xiaguan in #494
- refactor(qwen3): rename crate openinfer-qwen3-4b -> openinfer-qwen3 by @xiaguan in #495
- feat(glm52): DSA indexer kernel ops — cache, topk, slots, hadamard, DeepGEMM MQA logits by @xiaguan in #489
- fix(qwen3): disable cuda graph under tensor parallelism by @FeathBow in #496
- feat(bench): one-shot serving benchmark script by @xiaguan in #497
- feat(glm52): accuracy oracle harness — pinned HF glm_moe_dsa reference + hardcoded probe gate by @xiaguan in #499
- fix(kernels): point DeepGEMM submodule to openinfer-project fork by @xiaguan in #500
- docs(claude): sync AGENTS.md with repo reality by @xiaguan in #505
- docs(readme): link open-infer.org docs and blog by @xiaguan in #506
- fix(qwen3): join the scheduler thread on engine drop by @FeathBow in #511
- feat(sampling): min_p end to end, per-request seed groundwork, fail-loud on unsupported params (#490) by @n-WN in #491
- feat(qwen3): P/D disaggregation with cross-instance KV via pegaflow metaserver P2P by @xiaguan in #522
- feat(glm52): DSA indexer forward — DeepGEMM MQA logits + topk by @xiaguan in #521
- fix(kernels): correct rerun-if-changed tracking of third-party dirs by @FeathBow in #529
- feat(glm52): EP1 decoder-layer forward — MoE brick, dense/bookends, cross-layer top-k composition by @xiaguan in #530
- feat(glm52): DeepEP EP8 MoE + full-model DP1 forward — first end-to-end generation by @xiaguan in #531
- test(qwen3): extract the prefetch-tick decision and unit-test its failure paths by @n-WN in #532
- perf(glm52): 2.2x bs=1 decode — bound MoE rows by token count, persistent workspace, hoisted MLA sched metadata by @xiaguan in #535
- feat(glm52): DP8 scheduler — one request per rank; retire the DeepGEMM MQA runtime JIT by @xiaguan in #537
- fix(glm52): bump minijinja 2.19 → 2.21 to fix GLM5.2 chat template parse by @xiaguan in #538
- perf(glm52): whole-step decode CUDA graph + weight-only GEMV — 200 → 25.3 ms/step by @xiaguan in #543
- feat(glm52): batch the decode step — GLM52_MAX_BATCH_PER_RANK rows per rank (D1) by @xiaguan in #546
- fix(qwen35): load the untied lm_head instead of reusing embed_tokens by @FeathBow in #544
- feat(glm52): continuous batching — multi-slot admission + {1,8} batch-bucket graphs (D2) by @xiaguan in #547
- fix(kernels): catch C++ exceptions at the FFI boundary and surface the message by @FeathBow in #539
- fix(qwen35): guard baked head dims, not the runtime value-head count by @FeathBow in #536
- chore(glm52): remove load-only scaffold and eliminate crate-internal glm52 feature by @xiaguan in #550
- feat(glm52): middle decode buckets {1,2,4,8} — kill the c9 cliff (D2.5) by @xiaguan in #552
- perf(glm52): ROWS=4 register tile for the batched weight-only GEMV — bucket-8 step 45.6 -> 37.0 ms by @xiaguan in #558
- feat(glm52): DSpark speculative-decoding design + span steps (D3 M1) by @xiaguan in #553
- feat(glm52): in-process step bench — one weight load, bucket sweep + solo span-8 ingest by @xiaguan in #560
- fix(qwen35): serve uncompiled GQA groups through the prefill path by @FeathBow in #564
- fix(qwen3): serve uncompiled GQA groups through the prefill path by @FeathBow in #562
- test(qwen35): size-keyed golden fixtures and model-wide collapse gate by @FeathBow in #557
- perf(glm52): tensor-core mma path for batch-4/8 weight-only GEMV — solo span-8 step 36.9 → 32.2 ms by @xiaguan in #566
- perf(glm52): DeepGEMM masked grouped expert GEMM — c64 1113 → 1475 tok/s, solo step 21.6 → 19.6 ms by @xiaguan in #567
- docs(glm52): MegaMoE (DeepGEMM PR #323) evaluated — measured out at decode payloads by @xiaguan in #568
- perf(glm52): launch-ahead decode — hide the ~0.7ms cuGraphLaunch under the previous step's execution by @xiaguan in #570
- refactor(glm52): typed Rows buffers — invariants at construction, not per-call ensure by @xiaguan in #575
- chore(glm52): zero out clippy warnings and delete dead kernels by @xiaguan in #576
- refactor(glm52): hoist derived constants to config.rs, extract build module by @xiaguan in #580
- docs(glm52): cross-node DP16 replicated deterministic coordinator (SMR) design sketch by @xiaguan in #581
- feat(glm52): VRAM-derived max_model_len replaces the hardcoded 4096 cap by @xiaguan in #583
- feat(glm52): non-greedy sampling on the plain decode path by @xiaguan in #586
- feat(glm52): paged KV pool + prefix caching replace the static per-slot partitions by @xiaguan in #588
- feat(glm52): sampled-verify speculative decoding — lift the DSpark greedy-only gate by @xiaguan in #589
- docs(glm52): serving-status doc — frozen sampling surface + ordered remaining work by @xiaguan in #593
- refactor(glm52): split the 2.3k-line scheduler.rs into focused modules by @xiaguan in #594
- refactor(glm52): name the coordinator's phases as functions by @xiaguan in #596
- docs(glm52): pegaflow offload → P/D design record; refresh serving-status by @xiaguan in #597
- feat(kv-offload): explicit multi-arena registration (pegaflow M1 step 1) by @xiaguan in #598
- feat(glm52): pegaflow host-tier KV offload — shared DP8 pool, warm TTFT ~34x by @xiaguan in #600
- perf(qwen35): batch the uncompiled-GQA-group decode fallback by @FeathBow in #599
- test: tempfile scratch dirs across crates, shared qwen3 LoRA fixtures by @FeathBow in #592
- test(qwen35): commit a Qwen3.5-27B hf_golden_gate fixture by @FeathBow in #578
- test(qwen3): size-key hf_golden_gate and commit a Qwen3-14B golden by @FeathBow in #577
- perf(glm52): graph the dspark draft round — markov chain + piecewise forward (−6.8% bs=1) by @n-WN in #591
- feat(metrics): bump vllm-* rev and wire scheduler stats to /metrics by @xiaguan in #601
- feat(qwen3): make KV page size configurable by @sparkzky in #554
- chore(deps): remove unused direct dependencies by @xiaguan in #607
- feat(glm52): TP8-sharded low-latency MoE decode behind --moe-topo tp8 by @xiaguan in #609
- feat(glm52): TP8 span row mapping — single-user speculative decode at 186 tok/s by @xiaguan in #610
- refactor(core): compact log layout, drop RFC3339+module prefix by @xiaguan in #616
- fix(kernels): initialize submodules during build by @Ma1oneZhang in #619
- docs(glm52): tp8+mtp round profile — verify graph 90%, draft 10% by @xiaguan in #615
- feat(glm52): attention-TP with replicated activations — solo 13.75ms, MTP code 221 tok/s by @xiaguan in #620
- perf(glm52): size tp8 gemm_c by its own occupancy grid by @xiaguan in #621
- fix(server): consume-or-reject CLI args instead of silently dropping them by @FeathBow in #622
- test(qwen3): chunk the split-KV gate prefill within the pin envelope by @FeathBow in #612
- fix(qwen3): re-enable CUDA Graph under TP via startup decode-graph pre-capture by @FeathBow in #611
- fix(dsv2lite): add HTTP reliability gate by @CAICAIIs in #556
- feat(glm52): TileLang right-sized sparse MLA decode kernel for the attention-TP path by @xiaguan in #624
- docs: update DeepSeek README status section by @mvanhorn in #348
- feat(deepseek-v2-lite): publish benchmark artifact manifest and regression summary by @Kokoro2336 in #617
- ci(workflows): split CPU and CUDA checks by @xiaguan in #633
- fix(ci): enforce warning-free Clippy by @xiaguan in #634
- chore(tools): remove obsolete probes by @xiaguan in #639
- feat(qwen3): export decode CUDA graphs by @xiaguan in #640
- refactor(glm52): remove dead kernels and redundant weight loads by @xiaguan in #641
- docs(glm52): document speculative state in P/D by @xiaguan in #643
- feat(glm52): export per-rank scheduler metrics by @xiaguan in #644
- fix(kernels): drop the pinned algo for a shape whose retune fails by @FeathBow in #631
- fix(qwen3): fail loud at the --batch-invariant envelope boundary by @FeathBow in #629
- chore: remove the DeepSeek-V4 model line and the pplx-ep comm stack by @xiaguan in #649
- fix(kernels): drop redundant clone in the glm52 stub nvcc args by @xiaguan in #650
- feat(glm52): support and optimize TP4 on GB300 by @xiaguan in #637
- feat(glm52): export decode CUDA graphs by @xiaguan in #645
- metrics: commit Grafana dashboard JSON by @Kokoro2336 in #648
- feat(kernels): custom-mask prefill/paged attention for EAGLE-3 drafter by @scatyf3 in #647
- perf(deepseek-v2-lite): group EP2 expert routes and compute gate logits on CUDA by @CAICAIIs in #632
- perf(glm52): cut TP4 bucket-1 decode graph 2,334 -> 1,867 kernels by @xiaguan in #656
- fix(bench): make summarize_qps_sweep.py executable by @xiaguan in #652
- docs(glm52): cross-node scaling design — DP16 and the road to DP32/64 by @xiaguan in #659
- feat(glm52): EP4 (DP4/EP4) on 4×GB300 with a weight-only expert chain + FlashMLA sm100 UE8M0 KV-scale fix by @xiaguan in #658
- chore: clear the clippy backlog outside the linted lanes by @FeathBow in #660
- feat(sim): scripted-token completion mode + tool-call round-trip test by @scatyf3 in #653
- fix(qwen3): pin decode attention-path to SplitKv under --batch-invariant by @FeathBow in #623
- feat(glm52): cross-node EP-N serving — rank-host transport + EP{4..64} topology widths by @xiaguan in #661
- perf(glm52): min-latency router logits GEMV replaces the cublas splitK plan by @xiaguan in #664
- perf(glm52): indexer weights_proj via min-latency GEMV, drop last per-step cublas splitK plan by @xiaguan in #665
- feat(glm52): cross-engine P/D — vLLM TP8 prefill + openinfer EP8 decode, strict zero-prefill by @xiaguan in #657
- test(sim): add chat completions e2e tests by @bytelazy in #630
- perf(glm52): GB300 split-K table + fused reduce-SwiGLU for the batched GEMV chain by @xiaguan in #671
- perf(glm52): fuse the MLA q_a and kv_a projections into one batched GEMV by @xiaguan in #677
- fix(qwen3): route unified decode rows through split-KV under --batch-invariant by @FeathBow in #679
- feat(dsv2lite): add retained HTTP serving SLO reports by @CAICAIIs in #678
- fix(qwen35): restrict token selection to the frontend-decodable vocab by @FeathBow in #676
- feat(tools): CUDA graph dump + folded PNG render for cross-engine kernel recon by @xiaguan in #683
- chore(kernels): bump FlashInfer to v0.6.14 by @xiaguan in #685
- feat(qwen3): sampled-verify speculative decoding — lift the greedy-only gate (#512) by @n-WN in #670
- fix(qwen35): reserve recurrent-state memory ahead of KV-pool sizing by @FeathBow in #675
- test(qwen3): add output-level batch-invariance gate by @FeathBow in #686
- docs(qwen35): retain 5090 serving benchmark sweep by @CAICAIIs in #687
- fix(qwen3): request-local prefill chunk boundaries under --batch-invariant by @FeathBow in #688
- ci: keep draft pull request checks lightweight by @FeathBow in #696
- fix(bench): derive a unique per-point seed for serving sweeps by @FeathBow in #703
- fix(dsv2lite): make NCCL HTTP readiness discover wheel runtime by @CAICAIIs in #684
- docs(contributing): fix escaped markdown by @Nyvo-io in #682
- fix(qwen35): batch linear decode kernels by @CAICAIIs in #690
- feat(eagle3): drafter config, weight loading, and memory sizing by @scatyf3 in #662
- fix: eliminate the scheduler-thread stall on bulk KV restore (#704) by @xiaguan in #705
- feat(qwen35): publish scheduler load snapshots by @BreezyB1n in #692
- docs(qwen35): add prefix cache design document by @Ke-Wng in #423
- chore(ci): add stale cleanup and DCO checks by @xiaguan in #725
- docs(glm52): consolidate serving records by @xiaguan in #726
- docs: fix escaped markdown in the PR template by @FeathBow in #728
- fix(qwen3): use configured device ordinal for decode overlap resources by @LanluZ in #710
- perf(core): parallelize weight prefetch for single-rank Qwen loads by @FeathBow in #731
- perf(sampling): batch logprob extraction into one device reduction by @FeathBow in #721
- chore(ci): notify on unverified cross-author commit attribution by @FeathBow in #732
- [feat] qwen35: measure mixed-load ITL after chunked prefill + bench --max-batch (#470) by @bbirdxr in #693
- perf(qwen3): prefetch checkpoint once across sequential TP rank loads by @FeathBow in #736
- chore(tooling): adopt rustfmt/taplo/typos/editorconfig configs by @xiaguan in #737
- feat(qwen35): add adaptive decode-priority scheduler policy by @CAICAIIs in #730
- fix: restore --all-features build for qwen35-4b and bench_serving by @xiaguan in #741
- chore(tooling): add hawk config + playbook; drop 131 dead_public items by @xiaguan in #743
- refactor(workspace): apply hawk visibility downgrades (unnecessary_public + restricted) by @xiaguan in #745
- refactor(qwen35): use size-neutral crate and feature names by @xiaguan in #747
- feat(tracing): fastrace OTLP request tracing with scheduler phase spans by @xiaguan in #739
- perf(glm52): stage warm-cache weight uploads through pinned buffers by @xiaguan in #750
- perf(core): pinned double-buffered staging for weight uploads by @FeathBow in #742
- feat(glm52): define TP4 prefill-only contract by @xiaguan in #751
- fix(qwen3): order cross-stream prefill temporaries in the decode-overlap path by @FeathBow in #695
- fix(qwen3): reclaim completed KV blocks when prefix cache is off (#681) by @Polaris3003 in #735
- feat(glm52): add native TP4 prefill-only execution by @xiaguan in #754
- perf(qwen3): drop the duplicate cublasLt tuning burst from startup by @FeathBow in #749
- refactor(core): validate the whole weight load before the first upload by @FeathBow in #752
- fix(qwen35): size the TP sampling scratch from the decodable vocab by @FeathBow in #761
- feat(glm52): add checkpoint-native MTP speculative decoding by @xiaguan in #762
- perf(glm52): rework TP4 prefill layer-outer on a cubin-free kernel stack by @xiaguan in #765
- feat(glm52): align TP4 prefill KV layout with EP by @xiaguan in #766
- perf(glm52): enlarge sparse prefill attention tiles by @xiaguan in #768
- feat(glm52): enable native MTP on EP4 by @xiaguan in #769
- fix(qwen35): compile and lint clean under the qwen35 feature by @FeathBow in #771
- Add CUDA development container by @xiaguan in #770
- test(qwen3): golden fixtures for the 0.6B and 1.7B sizes by @FeathBow in #772
- test(qwen35): golden fixtures for the 0.8B and 2B sizes by @FeathBow in #773
- feat(glm52): hand off native MTP state across P/D by @xiaguan in #776
- fix(server): fail closed on unrecognized model configs by @FeathBow in #775
- feat(gemma4): register the model line behind a fail-closed probe by @FeathBow in #789
- feat(glm52): free-running per-rank DP engines and fleet-scale native-MTP P/D by @xiaguan in #795
- chore(glm52): drop Hopper paths; Blackwell-only + TP4 prefill by @xiaguan in #797
- perf(glm52): replace routed expert kernel with SM100 DeepGEMM by @xiaguan in #798
- docs(glm52): record multi-turn P/D campaign — pool sizing, EP16 gate, #799 by @xiaguan in #800
- fix(glm52): async admission restore (#799) + remove vLLM-compat P/D by @xiaguan in #801
- chore(workspace): drop openinfer-vllm-support, inline tokenizer loader into consumers by @xiaguan in #803
- perf(core): reuse a persistent weight-fill pool and tune staging geometry by @FeathBow in #763
- refactor(kv-offload): async pegaflow shim, glm52 poll-everything, TP4 MTP fix (#799, #802, #805) by @xiaguan in #804
- feat(glm52): prefix cache under native MTP — flat multi-turn TTFT by @xiaguan in #811
- feat(glm52): verify-span buckets — speculation survives full occupancy, 2.2x per-GPU decode by @xiaguan in #813
- perf(glm52): packed q_a|kv_a GEMM on the wide-bucket route (#812) by @xiaguan in #815
- feat(glm52): EP32 serving + 16-slot/2-draft throughput profile — 626 tok/s per GPU under 20 ms TPOT (#812) by @xiaguan in #816
- feat(glm52): 96-row step — 32 decode slots, 1,027 tok/s per GPU at 26 ms TPOT (#812 stage 3) by @xiaguan in #817
- feat(glm52): decouple the KV pool from the slot count — budget-filled pool, 131K cap on 32 slots (#812) by @xiaguan in #823
- feat(kv-store): openinfer-kv-store skeleton — resolve/seal/retire + KvPrefix dispatch (#824) by @xiaguan in #825
- feat(kernels): instantiate FlashInfer attention at head_dim 512 by @FeathBow in #784
- chore(dynamo): bump dynamo rev 364cc8aa -> c45d976e (+620 commits) by @xiaguan in #839
- chore(project): rename OpenInfer to PegaInfer by @xiaguan in #841
- kv-store successor: resolver-ownership design + phase-1 store surface (supersedes #830's capacity layer) by @xiaguan in #840
- test(gemma4): gate tokenizer and chat-template parity against a reference by @FeathBow in #794
- feat(kernels): add sliding-window paged attention for head_dim 256 by @FeathBow in #819
- feat(glm52): migrate the KV path onto pegainfer-kv-store — radix-first native restore, pad-to-boundary tail by @xiaguan in #843
- feat(glm52): kernel_lab fp8 GEMM lab — CUTLASS sm_103 units + CuTe DSL tcgen05 line by @xiaguan in #835
- feat(glm52): M-tile the DSL fp8 GEMM over rows — 96-row bucket joins the tcgen05 table by @xiaguan in #845
- feat(gemma4): validate and load the 12B text tower by @FeathBow in #827
- test(gemma4): record the HF reference for the 12B text tower by @FeathBow in #832
- fix(glm52): chunk FlashInfer sparse MLA over the batch — TP4 MTP proposal survives batches above 8 by @xiaguan in #846
- feat(glm52): page-first KV slab + TP4 tier mirrors (#849) by @xiaguan in #850
- fix(glm52): let the prefill-only role resolve Plain prefixes by @xiaguan in #847
- chore(project): update GitHub org references openinfer-project -> pegainfer-project by @xiaguan in #854
- refactor(frontend): consolidate serving frontend into pegainfer-frontend + ModelLine dispatch by @xiaguan in #855
- feat(kernels): plain-w QK-norm and RoPE prep at head_dim 256 by @FeathBow in #853
- fix(frontend): validate model-line CLI schema by @FeathBow in #857
- refactor(workspace): reduce unused public surface by @xiaguan in #858
- refactor(frontend): split engine contract into engine/ modules by @xiaguan in #859
- fix(frontend): satisfy clippy needless_borrow in engine handle test by @xiaguan in #860
- feat(frontend): step-batched engine contract, qwen3 as first pilot by @xiaguan in #861
- refactor(frontend): collapse per-request abort flag to a plain boolean by @xiaguan in #863
- feat(kernels): QK-norm and partial RoPE prep at head_dim 512 by @FeathBow in #838
- feat(core): split the RoPE frequency denominator from the rotary extent by @FeathBow in #821
- fix(qwen35): wrap the TP2 serve engine in LaunchedEngine::Handle by @FeathBow in #866
- K3 model line: decode E2E at ep_size 4 with MegaMoE(situ) transport by @xiaguan in #867
- docs: refresh README — pegainfer.org links, blog list, GLM-5.2 row by @xiaguan in #868
- K3: paged latent MLA KV + absorbed decode; EP slot default 64 by @xiaguan in #869
- refactor(frontend): rename step-contract intake vocabulary to submit/QueuedRequest by @xiaguan in #871
- feat(kernels): explicit hd512 sm_scale and the final-logit softcap by @FeathBow in #873
- feat(gemma4): local decoder layer and its HF golden oracle by @FeathBow in #875
- feat(gemma4): global decoder layer and its HF golden oracle probes by @FeathBow in #877
- feat(gemma4): full 12B forward from one token through window-edge pfill by @FeathBow in #879
- feat(kernels): pool-write prep for Gemma 4 serving at both head dims by @FeathBow in #881
- feat(kernels): Rust wrapper for the hd256 windowed paged prefill by @FeathBow in #883
- feat(gemma4): paged KV serving across both attention families by @FeathBow in #885
- feat(gemma4): cross the sliding window — front-release with retained global by @FeathBow in #887
- feat(metrics): spec-decode acceptance counters for the DFlash draft path by @scatyf3 in #787
- feat(gemma4): serve requests through the engine contract by @FeathBow in #890
- feat(kernels): batched decode prep entries at both head dims by @FeathBow in #892
- feat(gemma4): batched decode with iteration level scheduling by @FeathBow in #894
- docs(skills): point vllm-bench install at vllm-project/vllm rust workspace by @xiaguan in #888
- refactor(frontend): id-based Scheduler contract — RequestLedger replaces typestate handles by @xiaguan in #897
- fix(sim): follow the SchedulerMetrics rename in the frontend E2E harness by @xiaguan in #899
- chore(frontend): bump vllm rust crates to cc706b05 by @RicardoMin in #898
- chore(k3): drop the UnwiredExecutor placeholder by @xiaguan in #901
- feat(sim): migrate pegainfer-sim onto the step contract by @xiaguan in #902
- test(gemma4): a ragged decode batch must replay and reorder identically by @FeathBow in #903
- refactor(gemma4): reuse the epilogue buffers the caller owns by @FeathBow in #905
- refactor(gemma4): reuse decode device buffers and attention plans by @FeathBow in #909
- perf(gemma4): capture decode steps in bucketed CUDA graphs by @FeathBow in #911
- refactor(gemma4): native split KV decode for the global family by @FeathBow in #913
- fix(frontend): arm the injected fatal only once a request is in the scheduler by @FeathBow in #917
- feat(k3): chunked prefill at the MegaMoE protocol width — FlashKDA + FlashMLA, 4224-token chunks by @xiaguan in #916
- refactor(k3): put the forward pass behind a narrow host contract by @xiaguan in #918
- perf(gemma4): a newcomer's prompt rides the live decode batch by @FeathBow in #915
- feat(gemma4): conversation prefix cache with prompt state capture by @FeathBow in #920
- perf(gemma4): overlapped async prefill on an SM capped lane by @FeathBow in #923
- feat(qwen35): overlap Unified prefill with active decode by @CAICAIIs in #786
- feat(gemma4): gather coincident admissions into one mixed step by @FeathBow in #925
- perf(gemma4): one per token prep launch per family in the mixed step by @FeathBow in #927
- perf(gemma4): walk gathered prompts through shared chunk steps by @FeathBow in #929
- feat(k3): cross-machine expert parallelism — EP4/8/16/32/64 over NVLink-fabric slabs by @xiaguan in #921
- feat(gemma4): a walker reserves its pages round by round by @FeathBow in #933
- feat(k3): speculative decoding with the RadixArk DSpark drafter by @xiaguan in #931
- feat(gemma4): the serving ceiling reads from the environment by @FeathBow in #935
- test(gemma4): long context waypoints answer to the reference by @FeathBow in #941
- feat(qwen35): tp2 phase 2a by @Mrtroll486 in #870
- perf(k3): warp-cooperative two-pass MLA absorbed decode kernel by @xiaguan in #938
- perf(k3): block-parallel router top-k replaces the serial TileLang scan by @xiaguan in #939
- perf(k3): batched spec-round propose + e2e A/B and round anatomy by @xiaguan in #936
- fix(frontend): refuse the ec_transfer_params the engine would silently drop by @FeathBow in #907
- perf(gemma4): the chunk step aligns to the kernel tile by @FeathBow in #949
- fix(metrics): stamp spec-decode counters on the stepped bridge by @scatyf3 in #952
- perf(qwen3): fuse qualified TP1 decode projections by @Polaris3003 in #895
- docs: require evidence for AI-assisted PRs by @xiaguan in #954
- docs: delegate DCO validation to CI by @xiaguan in #955
- perf(core): the weight prefetch runs only where it can help by @FeathBow in #951
- refactor(gemma4): the tests call the production path instead of shaping it by @FeathBow in #947
- fix(qwen3): cap PerToken CUDA Graph buckets by @RicardoMin in #848
- feat(k3): CP context-parallel prefill lane (M0 + M0.5 serving, pruned@EP4) by @xiaguan in #957
- perf(k3): fuse the CP middle-rank M+D doctored FlashKDA calls by @xiaguan in #960
- perf(k3): raise the MegaMoE protocol max to 16896 tokens per rank by @xiaguan in #962
- perf(k3): parallelize staged weight startup by @xiaguan in #964
- chore(frontend): bump vllm rust crates to d3e2888c by @xiaguan in #961
- chore(k3): add checkpoint-gate runner script by @xiaguan in #963
- feat(release): publish Qwen3 CUDA 13 binary for v0.1.1 by @xiaguan in #971
- fix(release): install CUDA driver stub by @xiaguan in #972
- fix(release): link CUDA driver stub by @xiaguan in #973
- fix(release): probe CUDA link through rustc by @xiaguan in #974
- fix(release): install CUDA EULA by @xiaguan in #976
- fix(release): validate packaged CUDA bundle by @xiaguan in #977
New Contributors
- @lulululu-debug made their first contribution in #382
- @xwxb made their first contribution in #391
- @Kokoro2336 made their first contribution in #415
- @Rushit made their first contribution in #426
- @wdlin233 made their first contribution in #430
- @n-WN made their first contribution in #482
- @sparkzky made their first contribution in #554
- @bytelazy made their first contribution in #630
- @Nyvo-io made their first contribution in #682
- @BreezyB1n made their first contribution in #692
- @LanluZ made their first contribution in #710
- @bbirdxr made their first contribution in #693
- @Polaris3003 made their first contribution in #735
- @RicardoMin made their first contribution in #898
Full Changelog: v0.1.0...v0.1.1