N Neurarch Try it See it Changes Bot Pricing API Open app

Models / qwen3

Kimi-K3-DSpark: GPU memory to fine-tune

Fine-tuning Kimi-K3-DSpark at batch 1 and 2048 tokens takes about 85.6 GB of GPU memory for a full fine-tune (fits one H200 141 GB), and 12.5 GB with LoRA r=16 on a bf16 base (borderline on one T4 16 GB). Estimated from the model's structure, reading the config under transformers semantics, not measured. What fits on which card.

Reconstructed from its own config.json with no weights read. 2.6M downloads on Hugging Face.

Our count against the checkpoint

The left number comes from the graph. The right one is the number of scalars in the published weight files. Nothing on this page was tuned to make them agree.

Derived from structure
4.26B
4,257,461,248 parameters
In the published checkpoint
2.25B
2,249,289,601 scalars · safetensors.total, read 2026-08-16
Delta
+89.3%

custom-code This repository ships its own modeling code (`auto_map`, e.g. `dspark.py`), so `config.json` names a class in the repo rather than an architecture `transformers` defines. The graph below is what those config keys mean under `transformers` semantics, which is not necessarily what the repo's own file builds. A gap here is a statement about what we read, not about the checkpoint.

What it costs to run

Cost is a roofline estimate on the priced GPU for 10 epochs at batch 32, 2048 tokens over 50,000 samples (assumed; no dataset attached).

Layers
34
Will it forward-pass
Yes
Priced on
A10G (24GB)
Est. one run
$239.57

Memory: what fits on which card

Largest batch per card. Training is sized at 2048 tokens per sample, serving at 4096 tokens per sequence.

Full fine-tune, batch 1 at 2048 tokens
85.6 GB
LoRA r=16, batch 1 at 2048 tokens
12.5 GB
Serve: bf16 weights
8.51 GB
Serve: KV cache, 4096 tokens
84 MB
CardFull fine-tuneLoRA r=16Serve bf16, 4096 tokens
T4 16 GBdoes not fit at batch 1batch 1, borderlinebatch 64
L4 24 GBdoes not fit at batch 1batch 3batch 147
A100 40 GBdoes not fit at batch 1batch 6batch 313
A100 / H100 80 GB2 cards at batch 1 (33 + 1 layers)batch 15batch 727
H200 141 GBbatch 10batch 29batch 1360

Training: 2048 tokens per sample (2048, or the model's context when shorter; the structure table is at the config's maximum, 1048576), AdamW with bf16 autocast, SDPA attention (no score matrix stored), 1.15x headroom on every card. Full fine-tune holds weights, gradients and optimizer state (1.2 x 16 bytes per parameter) plus activations. LoRA is r=16 on every linear layer but the head, base frozen in bf16 (2 bytes per parameter), adapters at full AdamW state, same activations. A two-card split is a contiguous layer cut (pipeline parallel), computed only where one card cannot hold batch 1. "Borderline" means the card holds batch 1 on the estimate but not on the conservative peak (the estimate x 1.43, at or above the measured peak on 95% of held-out runs): measure one step before reserving it. Serving: bf16 weights plus the KV cache of 4096 tokens per sequence; prefill working set, CUDA context and framework reserve not counted.

These are estimates from the graph, not measurements. Against measured runs, held out by architecture, the estimate flagged 113 of the 131 jobs that did not fit their card and said "fits" on the other 18. Every measured run.

Structure

36 nodes. Output shapes are propagated from the input shape, batch dimension excluded, at 1048576 tokens: the config's maximum context, not the 2048 the memory above is sized at.

LayerTypeOutput shape
1InputInput1 × 1048576
2EmbeddingEmbedding1 × 1048576 × 7168
3RoPERoPE1 × 1048576 × 7168
4RMSNorm_1_1RMSNorm1 × 1048576 × 7168
5Attention_1Grouped Query Attn1 × 1048576 × 7168
6Add_1_attnAdd1 × 1048576 × 7168
7RMSNorm_1_2RMSNorm1 × 1048576 × 7168
8FFN_1SwiGLU1 × 1048576 × 7168
9Add_1_ffnAdd1 × 1048576 × 7168
10RMSNorm_2_1RMSNorm1 × 1048576 × 7168
11Attention_2Grouped Query Attn1 × 1048576 × 7168
12Add_2_attnAdd1 × 1048576 × 7168
13RMSNorm_2_2RMSNorm1 × 1048576 × 7168
14FFN_2SwiGLU1 × 1048576 × 7168
15Add_2_ffnAdd1 × 1048576 × 7168
16RMSNorm_3_1RMSNorm1 × 1048576 × 7168
17Attention_3Grouped Query Attn1 × 1048576 × 7168
18Add_3_attnAdd1 × 1048576 × 7168
19RMSNorm_3_2RMSNorm1 × 1048576 × 7168
20FFN_3SwiGLU1 × 1048576 × 7168
21Add_3_ffnAdd1 × 1048576 × 7168
22RMSNorm_4_1RMSNorm1 × 1048576 × 7168
23Attention_4Grouped Query Attn1 × 1048576 × 7168
24Add_4_attnAdd1 × 1048576 × 7168
25RMSNorm_4_2RMSNorm1 × 1048576 × 7168
26FFN_4SwiGLU1 × 1048576 × 7168
27Add_4_ffnAdd1 × 1048576 × 7168
28RMSNorm_5_1RMSNorm1 × 1048576 × 7168
29Attention_5Grouped Query Attn1 × 1048576 × 7168
30Add_5_attnAdd1 × 1048576 × 7168
31RMSNorm_5_2RMSNorm1 × 1048576 × 7168
32FFN_5SwiGLU1 × 1048576 × 7168
33Add_5_ffnAdd1 × 1048576 × 7168
34Final_RMSNormRMSNorm1 × 1048576 × 7168
35LM_HeadLinear1 × 1048576 × 163840
36OutputOutput1 × 1048576 × 163840

What the verifier says

warnLinear "LM_Head" is 7168 × 163840 = 1174M parameters (~4.4 GB float32). A single dense layer this large usually means a feature map was flattened without pooling first; embedding / vocab-projection heads are the expected exception. Fix: Add a Global Average Pool or more downsampling before the Linear, or factorize it (low-rank / bottleneck projection).
huge-linear-params

What changed upstream

The change tracker follows RadixArk/Kimi-K3-DSpark: every revision it has read, what changed in the config, tokenizer, chat template or weights between them, and an OSV advisory per change.

Do this to your own model

Same numbers, on a model in your repo, in one command. No account.

pip install neurarch-trace
neurarch-trace RadixArk/Kimi-K3-DSpark --plan --share

Other qwen3 checkpoints

jina-reranker-v3
596M derived · -0.13% against the checkpoint
Qwen3-0.6B
596M derived · -0.00% against the checkpoint
Qwen3-1.7B
1.72B derived · -0.00% against the checkpoint
Qwen3-32B
32.76B derived · +0.00% against the checkpoint