Skip to content

About ReVolta: why a separate repository, how it is developed, and what changed since 1Cat-vLLM v1.5.1 #1

Open

Description

@Leonccaa

This pinned issue is an informal overview of ReVolta, updated from time to time (last update: 2026-10-30). It covers:

  1. Where ReVolta stands now and what is next.
  2. How ReVolta is developed, and how to follow it.
  3. Why ReVolta is a separate repository instead of a branch of 1Cat-vLLM.
  4. What ReVolta 0.1.0 changed compared with 1Cat-vLLM v1.5.1, and what each release since then added.

Questions and corrections are welcome in the comments. Bug reports should go in separate issues, using the bug report form.

Current status (2026-10-30)

How ReVolta is developed

Until 0.1.2, ReVolta was developed in a private repository, and each release was published here with its history rewritten. Since 2026-10-23, all development happens in this repository, so you can follow what changes and why:

  • main: every change is a pull request, merged with a merge commit.
  • release/0.1.x: frozen for release testing. The tested commit gets the tag v0.1.x, and the GitHub Release, the Docker image and the PyPI package are built from it.
  • prod: the code that runs on our own 4 × V100 server. It changes only through a pull request from a release branch, and each deployment gets a tag deploy-YYYYMMDD-<version> (the first is deploy-20261023-v0.1.2).
  • Checks on every pull request: no private addresses, local paths or credentials in the PR text, commit messages or added lines; every commit signed off; no added file over 1 MiB; pre-commit on the changed files; mypy for Python 3.12. GPU acceptance (4 and 8 concurrent requests, multimodal input, KV offload readback, long context) runs on our reference machine before each release; there is no GPU CI.
  • Contributions are welcome: see CONTRIBUTING.md.

Why a separate repository

ReVolta is designed for four or more V100 32 GB GPUs and validated on four. We recommend, and test, the two interconnects that give the best speed: NVLink, and all GPUs under one PCIe switch with P2P. ReVolta began as the build behind our own daily service: Qwen3.8 Flash-Next (text, images and video) on such a server. 1Cat-vLLM is the base of that work, and we still contribute to it: 41 of our pull requests have been merged there, and 10 are open (2026-10-27). We opened a separate repository for these reasons:

  • A focused target. 1Cat-vLLM supports many models, quantization formats and GPU setups. ReVolta targets one setup: four or more V100 32 GB GPUs (validated on four) serving Qwen3.8 Flash-Next. Some of our changes only make sense there: custom all-reduce for NVLink and PCIe-switch topologies, AWQ memory layouts tuned for this one model, and serving defaults tuned for TP4 + DCP2 with MTP4 or DFlash2. In a general project these changes would be opt-in switches, or they would not be accepted.
  • Production settings in code. Before ReVolta, our service ran 1Cat-vLLM with a startup hook and many environment variables. The hook forced the topology checks and enabled the tuned kernels. In ReVolta these settings are code defaults. An automatic "ReVolta profile" applies them, and the startup log lists each value and where it came from. Explicit user settings still win.
  • A fixed base and a strict gate. Every change must give the same greedy output as the running service, token for token. Where that is impossible, the change must come with a quality measurement. It must also pass a full serving gate: 4 and 8 concurrent requests, multimodal input, KV offload readback and 512K context. This works only if the base stays fixed. 1Cat-vLLM moves fast: its main has gained 1,311 commits since our fork point (2026-10-27). So ReVolta does not follow 1Cat-vLLM main. We port the upstream fixes that affect the code paths we run, and we review upstream about every two weeks.
  • Our own release schedule. Upstream reviews take time, and that is normal for a project of this size. With our own repository, a fix ships when it passes our gate. We keep the upstream pull request open at the same time.
  • A focused package. ReVolta ships an SM70-only wheel and Docker image under the name revolta, starting at version 0.1.0. We removed parts that are not needed at runtime: documentation sources, upstream CI, examples, benchmarks and platform build recipes (1,366 files changed, almost all deletions). Our own pull-request checks were added later. The runtime and native source trees are unchanged.

ReVolta does not replace 1Cat-vLLM. Most of the V100 kernel work in this repository comes from 1Cat-vLLM and its contributors (see NOTICE). When a ReVolta fix also applies upstream, we propose it there.

What changed in 0.1.0 since 1Cat-vLLM v1.5.1

Baseline

Commit
1Cat-vLLM v1.5.1 (2026-10-03) 589a5d1
Fork point: 1Cat-vLLM main after the merge of 1CatAI/1Cat-vLLM#809 (2026-10-04) f551e0a
ReVolta 0.1.0 b02ee33 (tag v0.1.0)
  • Between v1.5.1 and the fork point: 0.1.0 includes 264 upstream commits, mainly 1Cat-vLLM's GGUF loader and lattice kernels, PLE DCP transport and mixed-prefill latency work.
  • After the fork point: ReVolta adds 138 commits (git log --no-merges f551e0afea..v0.1.0).

The groups below list the main changes. Hashes refer to this repository. The release gate in the 0.1.0 release notes applies to 0.1.0 as a whole.

Topology and serving defaults

  • Custom all-reduce over a PCIe switch (10cbb71).
    • Upstream disables custom all-reduce on PCIe-only TP4. Four V100s under one PCIe switch have working P2P, so ReVolta treats them as fully connected.
    • It limits custom all-reduce to small payloads and CUDA graphs.
    • It admits the multimodal Qwen3.8 class to the FP16 decode lane.
    • This mode replaces the startup hooks we used before.
  • Interconnect policy (de450aa, c425cfc).
  • ReVolta profile (dc609b9, 7920055). Serving defaults for SM70 QSA TP4, selected by the weight format. The startup log records each value's source, and the record also covers child processes.
  • Custom all-reduce graph capture is VMM-safe (d450a43).
  • Compile cache key (5153b2e). The SM70 GEMM LUT path no longer changes the compile cache key.

Decode and prefill speed

Memory

Weight formats

  • NVIDIA FP4-Local weights with packed NVFP4 PLE (a8f444b, a15a196).
  • Standard NVFP4: raw E4M3 grouped decode (36f4321).
  • NVFP4 vision tower on TP4: unaligned projections are now sharded across the four GPUs (faab1e5, 8fdd91a).
  • FP4-Local QSA E4M3 KV scale pack (f074546).
  • AWQ relabeling applies only to real AWQ checkpoints under TurboMind (561bf4e).

INT8 KV cache

  • Shared page layout. One shared description of KV page layouts, with planar INT8 storage and a writer (b4681f9).
  • Readers. INT8 page4 readers with explicit backend admission, compiled separately from the existing kernels (08a2018, f70d36e, af7addf).
  • INT8 with offload and drafts (c26adab, c85c1ee, 8e64f15, e4a5b08, 554a7bd).
  • Not supported: INT8 with the SSD tier is rejected at configuration time.

KV offload and prefix cache

Correctness and API

  • Speculative decoding:
    • NaN block maxima normalized before argmax (1213eef);
    • Mamba align blocks kept when drafts shrink (566cfc5);
    • output metadata trimmed after a stop string (ee77aca).
  • OpenAI-compatible API:
    • the earliest completing stop string wins (04643ad);
    • every required tool call is streamed in each delta (d525a04);
    • tool calls keep their truncation reasons (79b722b);
    • logprobs are kept when parsers suppress deltas (f90b940);
    • streaming errors that occur before the first token are reported (2f8ebb3);
    • empty tool-call arrays are omitted (172c1eb);
    • top_logprobs: null is handled (4ba2a9a);
    • a grammar compilation failure affects only its own request (db055e2).
  • Multimodal input:
    • image orientation and transparency handled (48f75d0);
    • remote media size bounded while streaming (2f7a660);
    • request budgets checked before images are decoded (ff4a1e4, 8c8a843);
    • every overlapping media item keyed in block hashes (f6c9ead);
    • recovery when the frontend and engine media caches drift apart (b1aa855).
  • Startup validation:
    • unsupported draft KV precisions and QSA target formats rejected before loading (9c69cbe, 6559738);
    • the automatic model-runner fallback is explained in the log (ef40369).

Packaging, licenses and documentation

Current gaps (0.1.5)

The supported scope, verified configurations and known limitations are in the README. The main gaps:

  • V100 16 GB, TP2/TP8 and other models are not tested.
  • With 2 to 8 concurrent requests, outputs are not bitwise reproducible from run to run: the tensor-parallel all-reduce sums in an order that depends on how requests are batched. A batch-invariant all-reduce is a goal for 0.2.
  • INT8 KV decodes about 5–8% slower than E4M3.
  • DFlash2 depends on the workload: short English and code prompts benefit most; Chinese text and long agent sessions often favour MTP4. With several requests at once DFlash2 pulls ahead: on our reference setup four and eight concurrent requests (512-token answers) ran about 20% and 9% faster than MTP4, while a replay of 90 agent sessions one request at a time put DFlash2 at 0.98 of MTP4, within run-to-run variation. INT8 KV is not supported with DFlash2, and DFlash2 has not been tested with preemption.
  • Sleep level 2 (development mode) does not fit in host memory on the reference setup; sleep level 1 works.

Fixed since 0.1.0: stop strings with thinking on (0.1.1). ReVolta is on PyPI since 0.1.1.

Activity

  1. pinned this issue on Oct 21, 2026
  2. changed the title [-]Why ReVolta is a separate repository, and what changed in 0.1.0 since 1Cat-vLLM v1.5.1[/-] [+]About ReVolta: why a separate repository, how it is developed, and what changed since 1Cat-vLLM v1.5.1[/+] on Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions