Skip to content

PegaInfer v0.1.1

Latest

Choose a tag to compare

@github-actions github-actions released this 26 Aug 10:58
· 34 commits to main since this release
3363255

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

Full Changelog: v0.1.0...v0.1.1