|
| 1 | +# NVFP4 Model-Card Sampling Reference |
| 2 | + |
| 3 | +Published `temperature` / `top_p` / max generation length for the **2026 NVFP4 |
| 4 | +checkpoints under [huggingface.co/nvidia](https://huggingface.co/nvidia/models) |
| 5 | +whose cards disclose them** — 25 rows, collected 2026-08-20. All 69 NVFP4 |
| 6 | +checkpoints in the org were read; absent are those published before 2026-01-01, |
| 7 | +those whose cards disclose nothing usable, and **speculative-decoding variants |
| 8 | +(`-DSpark`, `-DFlash`)** — spec decoding is verified against the target and does |
| 9 | +not change its output distribution, so those checkpoints share their base |
| 10 | +checkpoint's row. A miss here means "read the card", not "not yet checked". |
| 11 | + |
| 12 | +Use it to reproduce a published NVFP4 number, and as the cross-check when a card |
| 13 | +is silent or ambiguous. It does not replace reading the card — see |
| 14 | +`model-card-research.md`. |
| 15 | + |
| 16 | +## Lookup |
| 17 | + |
| 18 | +**The card is the source of truth; this table is a reference, not a constraint.** |
| 19 | +Use it to confirm what you read, to fill a gap when the card is silent, and as a |
| 20 | +sanity check when you are unsure — never to override a value the card states. |
| 21 | + |
| 22 | +1. **Exact row, resolved per field.** `eval` → use it, cite the row. `rec` → use |
| 23 | + it, but note in the config comment that it is recommended sampling, not a |
| 24 | + stated eval setting; if a same-family `eval` row disagrees, surface both. |
| 25 | + `—` → that field is unpublished; resolve **it alone** via step 2. |
| 26 | + `max_num_tokens` is the card's *headline* cap — where a note names a higher |
| 27 | + per-task cap (GLM-5.2 GPQA `100000`, Qwen3.5-397B-V2 τ²-Telecom `128000`, |
| 28 | + Kimi-K3 uncapped for Terminal-Bench) and that task is in your suite, SKILL.md |
| 29 | + Step 3's take-the-highest rule governs the single top-level value, not the |
| 30 | + column. |
| 31 | +2. **No row** (new or unreleased variant, non-NVIDIA baseline, pre-2026) → take |
| 32 | + the nearest same-family rows as the expected value. |
| 33 | +3. **Card vs. table.** Agree → proceed. Card silent + family consistent → adopt |
| 34 | + the family value and cite this file in a line comment; that beats SKILL.md |
| 35 | + Step 3's generic 65536 / 16384. **Card disagrees → the card wins**, but |
| 36 | + surface it — defaults shift between generations, so a mismatch means re-read, |
| 37 | + not auto-correct. |
| 38 | +4. **Baseline and candidate share one setting.** Cards report both precisions |
| 39 | + measured under the single setting listed; use the NVFP4 row for both. |
| 40 | + |
| 41 | +**Per-task sampling is precedent, not mandate.** Some notes record a |
| 42 | +benchmark-specific `temperature` / `top_p` (Qwen3.6 SciCode `0.6`; Qwen3.6-27B |
| 43 | +τ²-Bench Telecom `0.0` / `top_p=1.0`; Kimi-K3 `top_p=1.0` agentic). Engineers do |
| 44 | +tune sampling per benchmark, so **follow the card you are working from** and use |
| 45 | +these as the cross-check. Where the two disagree, **escalate to the user on a |
| 46 | +regime change, not a nudge** — greedy (`temperature ≤ 0.1` or `top_p ≤ 1e-4`) |
| 47 | +versus sampled flips the regime and materially moves both score and variance; |
| 48 | +`0.95` vs `1.0` does not. NEL accepts per-task `temperature` / `top_p` under |
| 49 | +`evaluation.tasks.*.nemo_evaluator_config`; only `max_new_tokens` is barred |
| 50 | +(SKILL.md Step 3). |
| 51 | + |
| 52 | +> **Never take sampling from a card's quickstart snippet.** |
| 53 | +> `SamplingParams(temperature=0.8, top_p=0.95)` and `max_tokens=32` are |
| 54 | +> boilerplate, repeated verbatim across unrelated models. Only *Benchmarked |
| 55 | +> with…* / *evaluated with…* / *We evaluate the model using…* sentences, |
| 56 | +> "Recommended Sampling" rows, and footnotes under the accuracy table count. |
| 57 | +
|
| 58 | +`provenance` — **`eval`** (20 rows): card ties the values to its accuracy table, |
| 59 | +authoritative. **`rec`** (5 rows): card recommends them for inference without |
| 60 | +that tie. `max_num_tokens` is the max generation length, i.e. |
| 61 | +`nemo_evaluator_config.config.params.max_new_tokens`. |
| 62 | + |
| 63 | +| Model card ID | temp | top_p | max_num_tokens | prov | notes | |
| 64 | +| --- | --- | --- | --- | --- | --- | |
| 65 | +| `nvidia/DeepSeek-V4-Flash-NVFP4` | 1.0 | **1.0** | 384000 | eval | `top_p=1.0`, unlike every other row here | |
| 66 | +| `nvidia/Qwen3.6-35B-A3B-NVFP4` | 1.0 | 0.95 | 131072 | eval | SciCode used `temperature=0.6` | |
| 67 | +| `nvidia/Qwen3.6-27B-NVFP4` | 1.0 | 0.95 | 81920 | eval | SciCode `0.6`; τ²-Bench Telecom `0.0` / `top_p=1.0` | |
| 68 | +| `nvidia/Qwen3.5-397B-A17B-NVFP4-V2` | 0.6 | 0.95 | 64000 | eval | τ²-Bench Telecom used `128000` | |
| 69 | +| `nvidia/Qwen3.5-397B-A17B-NVFP4` | 0.6 | 0.95 | 64000 | eval | | |
| 70 | +| `nvidia/Qwen3.5-122B-A10B-NVFP4` | 0.6 | 0.95 | 64000 | eval | | |
| 71 | +| `nvidia/Qwen3-Coder-480B-A35B-Instruct-NVFP4` | **0.0** | **1.0e-05** | 16384 | eval | greedy — instruct variant | |
| 72 | +| `nvidia/GLM-5.2-NVFP4` | 1.0 | 0.95 | 64000 | eval | GPQA Diamond used `100000` | |
| 73 | +| `nvidia/GLM-5.1-NVFP4` | 1.0 | 0.95 | 64000 | eval | benchmarked on `vllm/vllm-openai:v0.19.1` | |
| 74 | +| `nvidia/GLM-5-NVFP4` | 1.0 | 0.95 | 131072 | eval | | |
| 75 | +| `nvidia/GLM-4.7-NVFP4` | 1.0 | 0.95 | 131072 | eval | | |
| 76 | +| `nvidia/Kimi-K3-NVFP4` | 1.0 | 0.95 | 65536 | eval | **uncapped for Terminal-Bench**; card also recommends `top_p=1.0` agentic, `n=1`, `presence_penalty=0`, `frequency_penalty=0` | |
| 77 | +| `nvidia/Kimi-K2.7-Code-NVFP4` | 1.0 | 0.95 | 64000 | eval | | |
| 78 | +| `nvidia/Kimi-K2.6-NVFP4` | 1.0 | 0.95 | 128000 | eval | | |
| 79 | +| `nvidia/MiniMax-M3-NVFP4` | 1.0 | 0.95 | 65536 | eval | baseline is native MXFP8 | |
| 80 | +| `nvidia/MiniMax-M2.5-NVFP4` | 1.0 | 0.95 | 64000 | eval | | |
| 81 | +| `nvidia/Gemma-4-31B-IT-NVFP4` | 1.0 | 0.95 | 131072 | eval | | |
| 82 | +| `nvidia/Gemma-4-26B-A4B-NVFP4` | 1.0 | 0.95 | 131072 | eval | | |
| 83 | +| `nvidia/diffusiongemma-26B-A4B-it-NVFP4` | upstream | upstream | `null` (uncapped) | eval | defers to `google/diffusiongemma-26B-A4B-it`; diffusion decoding, serve with `--override-generation-config '{"max_new_tokens": null}'`. Uncapped is deliberate — do **not** substitute a numeric fallback | |
| 84 | +| `nvidia/Ising-Calibration-1.5-31B-NVFP4` | 0.2 | — | 8192 zero-shot / 32767 ICL | rec | domain model (Gemma-4-31B derivative) | |
| 85 | +| `nvidia/Mistral-Medium-3.5-128B-NVFP4` | 0.7 | 0.95 | — | eval | benchmarked with `reasoning_effort="high"` | |
| 86 | +| `nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4` | 1.0 | 0.95 | — | rec | its spec-decode siblings' cards say *Benchmarked with* these same values; eval recipes live in NeMo Gym, client examples use `max_tokens=16000` | |
| 87 | +| `nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4` | 1.0 | 0.95 | — | rec | card: use across **all** tasks and serving backends | |
| 88 | +| `nvidia/NVIDIA-Nemotron-Labs-3-Elastic-30B-A3B-NVFP4` | 1.0 | 1.0 | — | rec | reasoning tasks | |
| 89 | +| `nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4` | 0.6 think / 0.2 instruct | 0.95 think / — | 20480 think / 1024 instruct | rec | think adds `reasoning_budget=16384`, `grace_period=1024`; instruct sets `top_k=1` | |
| 90 | + |
| 91 | +## Priors (verify against the card) |
| 92 | + |
| 93 | +- **`1.0 / 0.95` is the house default** — GLM 4.7–5.2, Kimi K2.6–K3, MiniMax |
| 94 | + M2.5–M3, Gemma 4, Nemotron 3/3.5, Qwen3.6. Best guess when a recent card is |
| 95 | + silent. |
| 96 | +- **DeepSeek is carved out of it** — its row uses `top_p=1.0`, not `0.95`. |
| 97 | + Never carry the house default onto an unlisted DeepSeek variant. |
| 98 | +- **Qwen splits by variant** — thinking `0.6 / 0.95` at Qwen3.5, raised to `1.0` |
| 99 | + at Qwen3.6; instruct/coder near-greedy `0 / 1e-5` with `16384`. |
| 100 | +- **GLM** — `1.0 / 0.95` throughout; cap fell from 131072 (4.7, 5) to 64000 |
| 101 | + (5.1, 5.2). |
| 102 | +- **Caps cluster at 64000 / 65536 / 81920 / 128000 / 131072**, 64000 most |
| 103 | + common. `16384` appears only with greedy instruct Qwen; DeepSeek-V4-Flash's |
| 104 | + `384000` is a long-context outlier. |
| 105 | +- **Per-task overrides are narrow** — SciCode (lower temperature), τ²-Bench |
| 106 | + Telecom (greedy or larger cap), GPQA Diamond (larger cap), Terminal-Bench |
| 107 | + (uncapped). SKILL.md Step 3 forbids per-task `max_new_tokens`, so when a card |
| 108 | + lists two caps **take the maximum** as the single top-level value and note the |
| 109 | + split in a comment. |
| 110 | + |
| 111 | +## Refreshing |
| 112 | + |
| 113 | +Built from the HF API, verified to match the website pagination page for page |
| 114 | +(918 repos across `p=0..31`, identical NVFP4 sets). |
| 115 | + |
| 116 | +```bash |
| 117 | +curl -s "https://huggingface.co/api/models?author=nvidia&limit=1000" -o all.json |
| 118 | +python3 -c " |
| 119 | +import json, re |
| 120 | +KEEP = re.compile(r'-NVFP4(-V\d+|-QAD)?\$', re.I) # target checkpoints only |
| 121 | +for m in json.load(open('all.json')): |
| 122 | + if KEEP.search(m['id']) and m.get('createdAt', '') >= '2026-01-01': |
| 123 | + print(m['id']) |
| 124 | +" > ids.txt |
| 125 | + |
| 126 | +mkdir -p cards |
| 127 | +# 404 = repo ships no card; 401 = gated, fetch with 'hf download <id> README.md' |
| 128 | +# (never interpolate the HF token into a curl argument) |
| 129 | +while read id; do curl -sfL "https://huggingface.co/$id/raw/main/README.md" \ |
| 130 | + -o "cards/${id//\//_}.md"; done < ids.txt |
| 131 | + |
| 132 | +grep -ihnE "benchmark(ed|ing) (parameters|with)|were evaluated with|we evaluate the model using|evaluation settings" cards/*.md |
| 133 | +grep -ihnE "max OSL|for evals?|including benchmarking" cards/*.md |
| 134 | +``` |
| 135 | + |
| 136 | +The second grep is **not optional**: some cards give the cap only as a footnote |
| 137 | +under the accuracy table (*"\*Max OSL for evals can be as high as 64K"*), and |
| 138 | +DeepSeek states sampling in its `## Input:` usage block — neither is reachable |
| 139 | +from the first. |
| 140 | + |
| 141 | +`KEEP` matches a **target checkpoint's** name shape — `…-NVFP4`, plus the |
| 142 | +`-V2`-style revision and `-QAD` (a quantization recipe, so still a target). It |
| 143 | +therefore drops, by construction, every repo class that would only pollute the |
| 144 | +table: `-DSpark` / `-DFlash` speculative-decoding variants (verified against the |
| 145 | +target, so identical accuracy — they duplicate the base row), `-Eagle3` draft |
| 146 | +heads, and `-MLPerf-Inference-Closed-*` submission snapshots (which ship no |
| 147 | +card). `re.I` matters: DeepSeek spells its revisions `-v2`, not `-V2`. The one |
| 148 | +blind spot is a repo named `-FP4-*` whose `hf_quant_config.json` says NVFP4 — |
| 149 | +rare, and none currently in scope; check the `fp4` tag if you need certainty. |
0 commit comments