rigprose.py 1.9 KB

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