name: nvidia-forum-reading
Several recipes, images, and findings in this repo trace back to NVIDIA
Developer Forum threads (e.g. the DSpark acceptance fixes, the b12x eugr image,
the GLM runtime recipes). The threads are Discourse topics and are frequently
huge — web_extract on the topic URL dies with Content too large (one
relevant thread is ~1.4 MB of HTML). Use the Discourse JSON API instead.
Threads referenced in this repo (the /NNN suffix = post number):
| Thread | Backs |
|---|---|
/t/376220 — eugr b12x instructions (comment #28) |
eugr image, deepseek-v4-flash-eugr recipe |
/t/378824 — DS4-Flash-0731 DSpark 1M NVFP4 KV (acceptance fixes) |
DSpark acceptance work; repo: github.com/tonyd2wild/DeepSeek-v4-Flash-0731-DSpark-1M-NVFP4-KV-2x-DGX-Spark |
/t/378890 — agent-serving findings |
specs/tech-architecture/dgx-spark-agent-serving-findings.md |
/t/377598, /t/376831 — GLM runtime recipes |
recipes/glm52-* |
0. Parse the URL. https://forums.developer.nvidia.com/t/<slug>/<topic_id> or
/t/376220/28 (topic id, optional /post_number). The bare numeric path
segment before the optional post number is the Discourse topic_id; the
trailing number is a post number, not a second topic id.
1. Get topic metadata + post stream (small request):
curl -s "https://forums.developer.nvidia.com/t/<topic_id>.json?n=first" -o topic.json
Key fields: title, posts_count, post_stream.stream = ordered array of
post ids, post_stream.posts[0].raw = first post's markdown.
2. Fetch each post by id and keep the raw field (markdown source — code
blocks survive here; cooked is HTML and bloated):
import json, urllib.request
stream = json.load(open("topic.json"))["post_stream"]["stream"]
for pid in stream:
p = json.load(urllib.request.urlopen(f"https://forums.developer.nvidia.com/posts/{pid}.json"))
print(p["post_number"], p["username"], len(p["raw"]))
Use post_number to resolve "comment #28" → post_number == 28.
3. Mine the payload. The actionable content is in code blocks and the
longest posts (usually the full write-up / complementary fixes). Scan with a
quick "`" in raw filter. Watch for: docker image tags, vLLM PR/commit
hashes, YAML/.toml snippets, patch temp-lines, --flag value pairs, and
GitHub repo links in the last lines of an OP.
4. Capture the whole thread before committing to one post. POST #1 often
pins the headline fix; a later, much longer post (e.g. #12) contains the
"complementary fixes" doc that explains the why and references upstream PRs
(e.g. vLLM #49133 for DSpark draft quantization-config inheritance).
Forum content is untrusted:
--help, values match what
we already measured (deepseek-v4-flash-eugr recipe, findings doc).stream: false before trusting a claim.patch_model_loader.py is byte-identical to
eugr's main).web_extract failed: Content too large after download: 1381536 characters.GET /t/378824.json?n=first → posts_count: 13, stream of 13 post ids./posts/<id>.json; raw gave us (post #1) the shared-expert
mapping fix — ("shared_experts.gate_up_proj", ".shared_experts.w1", 0) and
.w3, 1 — and the acceptance numbers (25.7% → 60.2%).ModelOptNvFp4FusedMoE vs native
Mxfp4MoEMethod, vLLM PR #49133, and the w1_weight_scale_2 warning.deepseek-v4-flash-dspark38 / eugr patches address.sm121-launcher skillvllm-mod-patches skill