RalphSeek V4.1 Flash (tiny DeepSeek-V4.1 test fixture)
A 334M-parameter model with the DeepSeek-V4.1-Flash architecture. Its weights were randomly initialized, then trained from scratch on a small synthetic corpus. It exists so that DeepSeek-V4.1 support can be built and tested without the full model. It ships with the output distributions of DeepSeek's own reference code on fixed token sequences, so an implementation can be checked against that reference with llama-perplexity and nothing else.
This is not a usable language model. It is ten layers deep and 128 wide, which is enough to carry every V4.1 structure and nothing more. It answers everything with a confident, childlike non-fact, which is what it was trained to do:
I think clouds hide when the sun counts. They taste like the playground flag.
My ear says refrigerators hold hands through metal by the kitchen moon.
For use as a fixture, not as a model. It is the V4.1 sibling of RalphSeek V4 Flash.
Structure
| property | this model | DeepSeek-V4.1-Flash |
|---|---|---|
| architecture | deepseek41 | same |
| layers | 10 | 40 |
| hidden size | 128 | 5120 |
| routed experts / used | 384 / 6, MXFP4 | same |
| shared experts | 1 | same |
| attention heads / head dim | 64 / 512 | same |
| sliding window | 128 | same |
| compress ratio by layer | 0, 0, then 2 (4 layers), then 1 (4 layers) | 0, 0, then 2 (18 layers), then 1 (20 layers) |
| shared KV source layers | 2, 4, 6 | 2, 8, 14, 20 |
| indexer source layers | 2, 4, 6, 8 | 2, 8, 14, 20, 24, 28, 32, 36 |
| indexer top-k | 512 | same |
| candidate filter | source layer 6, 2048 blocks of 8 | source layer 20, 2048 blocks of 8 |
| engram layers | 1, 4 | 1, 14 |
| hyper-connection streams | 4, Sinkhorn 20 iterations | same |
| vocabulary | 129,280 | same |
| configured context | 1,048,576 | same |
| MTP layers | 0 | 3 |
| vision tower | none | present |
| parameters | 334.27 M |
It trained for 12 epochs on 256-token blocks. The weights here are from the epoch with the lowest validation loss (epoch 4).
Files
| file | size | use |
|---|---|---|
ralphseek-v41-flash-bf16.gguf | 418 MB | converter output (BF16 matrices, F32 norms, F32 output, MXFP4 experts, and Q8_0 engram tables); the reference arm |
ralphseek-v41-flash-q8_0.gguf | 261 MB | q8_0; experts stay MXFP4 |
ralphseek-v41-flash-iq4_nl.gguf | 205 MB | IQ4_NL; experts stay MXFP4; quick smoke arm |
ralphseek-v41-ref-c256.kld | 263 MB | reference output distributions, 8 chunks of 256 tokens |
ralphseek-v41-ref-c2048.kld | 529 MB | reference output distributions, 2 chunks of 2048 tokens |
hf/ | 422 MB | the checkpoint in DeepSeek's release layout (MXFP4 experts, fp8 engram tables) with config, tokenizer, and chat template, for testing a converter |
Usage
llama-cli -m ralphseek-v41-flash-bf16.gguf -c 512 -ngl 99 -fa on --temp 0 -n 48 \
-p "<|begin▁of▁sentence|><|User|>Tell me a fact about clouds.<|Assistant|></think>"
Set -c. Without it the context is the configured 1,048,576 tokens, and the K cache alone asks for 10 GiB.
Checking an implementation against the reference
The two .kld files hold the output distributions of DeepSeek's reference forward (inference/model.py from deepseek-ai/DeepSeek-V4.1-Flash) on this model, in the format llama-perplexity --kl-divergence-base reads. Point any build at them:
llama-perplexity -m ralphseek-v41-flash-bf16.gguf -ngl 99 -fa on -c 256 -b 256 -ub 256 \
--kl-divergence-base ralphseek-v41-ref-c256.kld --kl-divergence
and the same with -c 2048 -b 2048 -ub 2048 for the second file. -c must equal the context the file was written at.
| file | chunks x tokens | scored positions | what it covers |
|---|---|---|---|
ralphseek-v41-ref-c256.kld | 8 x 256 | 1,016 | attention, compressed KV, hyper-connections, engram, and MoE, with every position kept |
ralphseek-v41-ref-c2048.kld | 2 x 2048 | 2,046 | the same at long range, with indexer top-k (512) pruning in every indexer layer |
The tokens are RalphSeek validation conversations in the V4.1 chat template, concatenated, with BOS at the start of each chunk. The files carry the tokens, so tokenizer differences cannot enter.
Reading the output
Use Mean KLD and Same top p. Do not use Mean PPL(Q)/PPL(base), which reads about 1.20 even for a close match. The file stores each position over a 24-nat window below the top logit, and a token below that window counts at the window floor. Most user-prompt tokens fall there, because the model never trained on them. So PPL(base) comes out at 1,227.8 (c256) and 1,358.1 (c2048), while the reference's exact perplexity on the same tokens is 1,461.6 and 1,616.7. Compare Mean PPL(Q) with those two numbers instead.
For scale, the reference itself, with its fp8/fp4 storage fake-quant of the KV cache, indexer keys, and compressed latent switched off, scores Mean KLD 0.00083 against both files (same top 100% and 99.7%). This model trained with that fake-quant switched off.
Limits
This model depends very little on distant tokens. It trained on 256-token blocks, and its indexer receives no gradient through the top-k. At 2048 tokens, keeping every position instead of the top 512 moves the reference output by KLD 0.00031 (same top 99.9%). These files therefore cannot detect a missing or wrong token-selection stage. Candidate filtering (2048 blocks of 8) keeps every block below 16,384 positions, so neither file reaches it.
The reference forward replaces DeepSeek's tilelang sparse_attn kernel with an equivalent torch function, because at head dim 512 the kernel needs more shared memory than the GPU used (RTX 4070) has. The torch function matches the kernel to one bf16 ulp at head dims 64 and 128. Everything else in model.py runs as published, including the storage fake-quant.
Measured on ik_llama.cpp
At cdf232c, RTX 4070, -ngl 99 -fa on:
| context | GGUF | Mean KLD | Same top p | Mean PPL(Q) | Mean KLD, V41_SEPARATE=1 |
|---|---|---|---|---|---|
| 256 | bf16 | 0.00209 ± 0.00049 | 99.80% | 1,477.0 | 0.00209 |
| 256 | q8_0 | 0.00236 ± 0.00051 | 99.61% | 1,478.4 | 0.00236 |
| 256 | iq4_nl | 0.00976 ± 0.00156 | 97.93% | 1,497.7 | 0.00976 |
| 2048 | bf16 | 0.00237 ± 0.00033 | 99.27% | 1,637.9 | 0.00226 |
| 2048 | q8_0 | 0.00174 ± 0.00024 | 99.27% | 1,640.6 | 0.00177 |
| 2048 | iq4_nl | 0.00819 ± 0.00111 | 98.29% | 1,634.4 | 0.00821 |
At temp 0 the bf16 and q8_0 files reproduce the reference's own completions of three sample prompts word for word. IQ4_NL gives the same completion for one prompt and a different one for the other two.
Observed on the same commit:
convert_hf_to_gguf.pywrites the source dtypes fordeepseek41whatever--outtypesays. The q8_0 and IQ4_NL files come fromllama-quantize.llama-quantizerefuses to requantize MXFP4 tensors. The two quants were made with--custom-q "ffn_(gate|up|down)_exps=mxfp4,engram_embd=q8_0", which copies the experts and engram tables unchanged.- The converter writes none of
candidate_source_layer_id,candidate_block_size, andcandidate_topk_blocks. WithV41_SEPARATE=1the loader uses its defaults, including source layer 20, which this model does not have.
Other runtimes
Upstream llama.cpp master has no deepseek41 architecture; open PR ggml-org/llama.cpp#28696 adds one. These GGUFs were made with ik_llama.cpp's converter, and loading them anywhere else is untested. hf/ holds the checkpoint for converting it with another tool. There is no MTP head.
Provenance and licensing
- Weights are original, trained from random initialization on the synthetic corpus used for RalphSeek V4 Flash. They are not derived from, distilled from, or a slice of any DeepSeek checkpoint. The hidden size alone (128 against 5120) makes that impossible.
- Architecture and reference forward are DeepSeek's
inference/model.py,engram.py, andkernel.pyfrom deepseek-ai/DeepSeek-V4.1-Flash, which is MIT licensed. - Tokenizer and tokenizer config are copied from the same repository, so that prompts and special tokens behave as they do on the real model. The chat template below is added to
tokenizer_config.jsonand also ships aschat_template.jinja. - The chat template is the
tokenizer.chat_templateof vcruz305/DeepSeek-V4.1-Flash-GGUF, because DeepSeek'stokenizer_config.jsonships none. - Not affiliated with or endorsed by DeepSeek.
The name is the same joke as RalphSeek V4 Flash's, about a small thing that says wrong facts with total confidence.