| 123456789101112131415161718192021222324252627282930313233 |
- """RigMark's prose decode, alone: the identical requests (comparison id, seed, nonces,
- reasoning_effort=low) and its decode-rate formula, plus DFlash acceptance from /metrics.
- usage: rigprose.py BASE_URL [runs] [workload]"""
- import json, os, re, sys, time, urllib.request
- sys.path.insert(0, os.environ.get("RIGMARK_DIR", "rigmark"))
- import bench as rb
- from pathlib import Path
- BASE = sys.argv[1]; RUNS = int(sys.argv[2]) if len(sys.argv) > 2 else 2
- WL = sys.argv[3] if len(sys.argv) > 3 else "prose"
- prompts, _ = rb.load_prompts(Path(rb.__file__).parent / "prompts.json")
- client = rb.Client(BASE, "", 600)
- def metrics():
- raw = urllib.request.urlopen(BASE + "/metrics", timeout=30).read().decode()
- get = lambda k: sum(float(v) for v in re.findall(rf"^vllm:{k}\S*\s+([0-9.e+]+)$", raw, re.M))
- return (get("spec_decode_num_accepted_tokens_total"), get("spec_decode_num_draft_tokens_total"),
- get("spec_decode_num_drafts_total"))
- rates = []; dsec = 0.0
- a0, d0, s0 = metrics()
- for i in range(RUNS):
- nonce = rb.nonce("ringside-redhat-rowsplit-20260926", "decode", WL, i + 1)
- payload = rb.build_chat_payload(os.environ.get("GATE_MODEL", "glm53"), prompts["system"], f"Request nonce: {nonce}\n\n{prompts['workloads'][WL]}",
- 4096, 20260905, {"chat_template_kwargs": {"reasoning_effort": "low"}})
- row = client.stream("/v1/chat/completions", payload)
- rates.append(row["decode_tokens_per_second"]); dsec += row["decode_seconds"]
- print(f" run {i + 1}: {row['decode_tokens_per_second']:.1f} tok/s, {row['completion_tokens']} tokens, TTFT {row['ttft_seconds']:.3f}s", flush=True)
- a1, d1, s1 = metrics()
- acc = (a1 - a0) / (d1 - d0) if d1 > d0 else float("nan")
- steps = s1 - s0
- print(f"{WL}: {sum(rates) / len(rates):.1f} tok/s mean, acceptance {acc * 100:.1f}%, "
- f"{dsec * 1000 / steps if steps else float('nan'):.2f} ms/step over {int(steps)} steps")
|