You Downloaded 82 GB of “6B”
You grabbed a model called 125B, saw that it activates 6B per token, and now your disk is full, your RAM is full, and each token only touches a small slice of all that weight. Nothing is broken. The “B” in a model name is one number, and you need about four numbers to know what a model will do on your box.
Here is the short version. The B counts parameters, in billions. Parameters are the learned weights. The count tells you roughly how big the file is before quantization and roughly how much the model can store. It does not tell you speed, quality, or how much memory you need. Those depend on active parameters, bits per weight, and when the model was trained.
What a Parameter Is
A parameter is one number the model learned during training. Mostly these are weights in big matrices: the numbers that decide how strongly one internal signal pushes on the next. A 12B model has about 12 billion of them. Training is the process of nudging all of them until the model predicts text well.
So “B” is a size measure, like horsepower or cubic feet of cargo. Useful, but you would not pick a truck on cargo volume alone.
What more parameters buy you, as a simplification:
- Breadth of stored knowledge. A small model knows the common stuff. A bigger model also knows more of the long tail: rare facts, niche domains, less common languages.
- Capacity to hold a long task together. Bigger models tend to keep more constraints in play across a multi-step job before they drop one.
Treat that as a rule of thumb, not a law. I will not tell you “a 12B model knows X level of material,” because nobody can say that honestly. Training data quality, how long the model trained, and the model’s generation all move the result. A current 12B can beat an older 70B on many tasks, and that is why you should not compare B across model generations. Each vendor’s model card shows how the generations compare on their own benchmark tables. Read the table for your task, not the size in the name.
Total vs Active: The MoE Twist
Everything above assumes a dense model, where every parameter runs for every token. A Mixture of Experts (MoE) model splits its feed-forward layers into many “experts” and routes each token to a few of them. The rest sit idle for that token. The MoE explainer covers the architecture, so here is just the naming consequence: an MoE model has two sizes.
- Total parameters: everything stored in the file. This drives memory.
- Active parameters: what runs per token. This drives compute per token, and so speed.
Two worked examples, both checked against the vendors’ own pages.
Qwen3.6-35B-A3B. The Qwen model card says 35B total and 3B activated, with 256 experts and 8 routed plus 1 shared per token. The name encodes it: 35B-A3B is 35B total, A3B is 3B active.
Qwen3.8-Flash-Next. The Unsloth GGUF model card lists the language model as 125B parameters with 6B activated, plus a 51B n-gram embedding and a 4B MTP head. It has 512 experts, and each token uses 10 routed experts plus 1 shared. Only about 5% of the 125B runs per token.
NVIDIA Nemotron 3.5 Super VL. NVIDIA’s announcement describes a 120B-parameter MoE that activates 12B parameters per token.
Why Qwen3.8-Flash-Next Has Three Different Totals
Go looking for this model’s size and you will see 125B, 177B, and 180B on different pages. They are not contradicting each other. They count different things.
- 125B is the core language model.
- 51B n-gram embedding is a giant lookup table. The card describes it as embeddings indexed by short n-grams (bigrams and trigrams) and lists 20,000,000 for its size. Looking up a row costs almost no compute, so it adds memory but barely adds per-token work. Qwen’s own highlights say embeddings are a parameter-scaling axis that needs less computation and is easier to offload than MoE.
- 4B MTP is a multi-token prediction head. It drafts several tokens ahead so the main model can verify them, which speeds up generation. Unsloth ships it as a separate small GGUF.
Add 125, 51 and 4 and you get 180. The Hugging Face GGUF page for the Unsloth repo shows 177B params. The page does not say why that differs from 180B. My guess is that it counts the main GGUF without the separate MTP file. If you only remember one thing: the bigger totals include lookup memory, and lookup memory is not compute.
Why B Doesn’t Tell You Memory, Speed, or Quality
Memory
The file size is roughly parameters times bits per weight, divided by 8. On top of that you pay for the KV cache (which grows with context length, see KV cache quantization) and some runtime overhead. For the full per-GPU fit check, see GPU memory math.
def gb(params_b, bits_per_weight): return params_b * 1e9 * bits_per_weight / 8 / 1e9
# bits per weight are approximate: Q8_0 stores ~8.5, Q4_K_M ~4.8for name, p, bpw in [ ("12B @ Q8_0 ", 12, 8.5), ("12B @ BF16 ", 12, 16), ("35B @ Q4_K_M", 35, 4.8), ("70B @ Q4_K_M", 70, 4.8), ("125B @ ~3 bit", 125, 3.0),]: print(f"{name} {gb(p, bpw):6.1f} GB")12B @ Q8_0 12.8 GB12B @ BF16 24.0 GB35B @ Q4_K_M 21.0 GB70B @ Q4_K_M 42.0 GB125B @ ~3 bit 46.9 GBSanity check against a real file: the Unsloth Qwen3.6-35B-A3B-Q8_0.gguf is 36.9 GB on the Hub. The estimate for 35B at 8.5 bits is 37.2 GB. Close enough to plan a download.
Same Memory, Different Model
Now the interesting part. Take the Qwen3.8-Flash-Next UD-IQ3_XXS build. It totals 82 GB on the Hub. Using the 177B figure from that page, that works out to about 3.7 bits per weight. The same 82 GB would hold roughly a 77B dense model at Q8_0 (82 / 8.5 bits per weight).
Those two files need similar memory and behave differently:
- The heavily quantized big model keeps its breadth. It still has the experts that hold rare knowledge. But each weight is stored coarsely, so precision suffers.
- The smaller model at Q8 has less breadth, but its weights are close to the originals.
Neither wins everywhere. Which is better depends on the model and the task, and I will not hand you a quality-loss percentage for a quant level, because I did not measure one and the numbers vary by model. For the format and quant-level tradeoffs, see LLM formats and quantization and why Q4_K_M isn’t always the best choice. Test both on your own prompts. It takes ten minutes and beats any rule of thumb, including mine.
Speed
Speed tracks two things: active parameters, and where the weights live.
Each generated token has to read the active weights from memory. A 6B-active model reads far less per token than a 27B dense model, even when its total is 125B. That is why a 125B model with 6B active can, in principle, generate faster than a smaller dense model, as long as the active weights sit in fast memory.
But all 82 GB has to live somewhere. If it fits in VRAM, great. If part of it spills to system RAM, the RAM part reads much slower than VRAM, and you feel that. Active params set the ceiling. Where the weights sit decides how close you get to it.
Quality
Quality comes from size, training data, training length, generation, and quantization. B is one input of five. It is the one printed on the box, so it gets all the blame.
Reading a Model Filename Piece by Piece
Take the real file from the Unsloth repo. For UD-IQ3_XXS, the Hub lists three shards in a folder named UD-IQ3_XXS/:
Qwen3.8-Flash-Next-UD-IQ3_XXS-00001-of-00003.gguf (~11 MB)Qwen3.8-Flash-Next-UD-IQ3_XXS-00002-of-00003.gguf (~49.6 GB)Qwen3.8-Flash-Next-UD-IQ3_XXS-00003-of-00003.gguf (~32.4 GB)You point llama.cpp at the first shard and it loads the rest. The shard sizes add up to the 82 GB on the model page. The first one is small because it carries mostly metadata.
Piece by piece:
| Piece | Meaning |
|---|---|
Qwen3.8 | Family and version. Generation matters, so read this before the size. |
Flash-Next | The variant name. |
UD | Unsloth Dynamic. The quant mixes bit widths per layer instead of one level everywhere. |
IQ3_XXS | The quant type. Roughly a 3-bit class quant. |
00001-of-00003 | Shard number. Keep all shards in one folder. |
.gguf | The file format, which llama.cpp reads. |
Now the other one. The Unsloth repo has Qwen3.6-35B-A3B-UD-Q4_K_M.gguf at 22.1 GB (and no plain Q4_K_M, so that is the real name):
| Piece | Meaning |
|---|---|
Qwen3.6 | Family and version. |
35B | Total parameters. |
A3B | Active parameters per token: 3B. |
UD-Q4_K_M | Unsloth Dynamic build, Q4_K_M quant class. |
.gguf | File format. |
Some model names add Instruct or Base. Instruct is tuned to follow chat instructions. Base is the raw pretrained model, which continues text. Neither of the files above carries that tag, so read the model card to see what you are getting.
Check the Numbers Yourself
You do not have to trust the filename. Install the gguf package and dump the metadata of a file you have downloaded:
pip install ggufgguf-dump --no-tensors Qwen3.6-35B-A3B-UD-Q4_K_M.ggufLook for general.architecture, general.size_label, and the expert counts in the key list. --no-tensors skips the long tensor table.
For the original weights, the Hub gives you a size without downloading anything. The safetensors index lists total bytes:
curl -sL https://huggingface.co/Qwen/Qwen3.6-35B-A3B/resolve/main/model.safetensors.index.json \ | python3 -c "import json,sys; print(json.load(sys.stdin)['metadata'])"That printed {'total_size': 71903645408.0} when I ran it. Divide by 2 for BF16 and you get roughly 36 billion parameters, a bit above the 35B in the name, most likely because the repo also holds a vision encoder (the card lists one).
Tools Close Part of the Gap
One more lever, briefly. A small model that cannot recall a rare fact can look it up. A small model that is bad at arithmetic can call a calculator or run code. Search, code execution, and calculators trade recall for retrieval and computation, which small models handle fine. See function calling in local LLMs for the tool-calling setup and SearXNG plus a local LLM for local search. This does not give a small model a big model’s judgment, but it helps with the “I don’t know that” failures.
The SumGuy Take
Stop shopping by B. Ask four questions in order:
- What generation is it? Newer 12B often beats older 70B.
- Dense or MoE? If MoE, read total (memory) and active (speed) separately.
- How many GB is the file you will actually download? That number, plus KV cache, must fit your VRAM and RAM.
- Does it do your task? Run your own prompts.
Buying a GPU on parameter count alone is like hiring a forklift to move a couch. Technically it works, but your neighbors will have questions, and your power bill will too.
Common Questions
How much RAM do I need for a 70B model?
A 70B model at Q4_K_M needs about 42 GB for weights (70B times roughly 4.8 bits per weight, divided by 8), plus the KV cache and runtime overhead. Budget 48 GB or more of combined VRAM and system RAM. At Q8_0 the weights alone are about 74 GB.
Does a higher B mean a slower model?
For dense models, yes: more parameters means more weights read per token. For MoE models, no. Speed follows active parameters, so a 125B model with 6B active can generate faster than a 27B dense model. Placement still matters, because weights that spill from VRAM into system RAM slow generation.
Is a bigger model always better?
No. A bigger model usually stores more rare knowledge, but training data, training length, and model generation also matter, and a current 12B can beat an older 70B on many tasks. A heavily quantized big model can also lose precision. Test candidates on your own prompts.
What does the A in 35B-A3B mean?
The A stands for active parameters. In Qwen3.6-35B-A3B, 35B is the total parameter count and A3B means about 3B parameters run per token. The total sets the memory you need, and the active count sets how fast tokens come out.
Why do some pages list Qwen3.8-Flash-Next as 125B and others as 177B or 180B?
The 125B figure counts the core language model. The larger totals add a 51B n-gram embedding table and a 4B multi-token prediction head. The n-gram table is lookup memory, so it increases file size but adds almost no per-token compute.