Prefill and decode do not have to run the same weights. This repo holds prefillers: NVFP4 transformer blocks that are streamed off the SSD one layer at a time, paired to complement low-bit GGUF for decode.

The point is that the two phases want different things. Decode is memory-bound, has to be on device for fast generation and is accelerated by being small. Prefill is compute-bound, so there's little point in compressing it below NVFP4 (compute-native on Blackwell) as long as it doesn't occupy much memory, which we achieve via offloading.

Accuracy and time-to-first-token against device weight size

Auxiliary prefillers recover ~50% of the accuracy that aggressive quantization gives up, at close to no extra memory cost. Moreover, past a few thousand tokens, the offloading streaming disappears under compute, so it is not paid for in latency either

you are viewing a single comment's thread
view the rest of the comments
[–] 1 point 1 month ago (2 children)

Interesting, will check that out too.

  • source
  • parent
  • hideshow 2 child comments
  • [–] 1 point 1 month ago* (1 child)

    Just for reference, I’m now getting 20 tokens/sec with Deepseek V4 Flash 0731, on a single 3090 desktop, whereas I was only getting 13 in ik llama.cpp, and less in base llama.cpp.

    I have not switched to 4.1 in IK yet. All these releases are happening so fast by brain can’t even keep up…

  • source
  • parent
  • hideshow 1 child comment