feature/three-pass-benchmark
Fixed two bugs that caused near-zero tok/sec and latency=9999 in the concurrent benchmark.
Root cause: Benchmark was firing all 21 requests (3 models × 7 prompts) at once via
async uri. With OLLAMA_NUM_PARALLEL=2, only 2 slots run at a time; the other 19 queue.
eval_duration includes queue-wait time → tok/sec measured as ~0.18 instead of ~22.
Fix: playbooks/_bench_tier_batch.yml — replaced the 7 async fire+collect tasks
with 5 synchronous uri tasks (no async/poll). Node1 runs all its prompts first,
then node0. One request at a time = idle slot = clean eval_duration.
Key structural changes:
_bench_node1_jobs / _bench_node0_jobs intermediate registersasync_status collect tasksitem.item (top-level in sync uri) instead of
item._async_job.item (the old async indirection)timeout reverted from benchmark_large_timeout × 15 to plain benchmark_large_timeoutRoot cause: Load phase warm-up "Hi" populates KV cache. Benchmark "Hi" hits cache →
prompt_eval_duration ≈ 0 and eval_duration ≈ 0 → sum = 0 → latency_ms = 9999.
Fix: playbooks/03_benchmark.yml line 268 — changed latency measurement from
eval_duration + prompt_eval_duration to resp.total_duration | default(0) | int.
total_duration is true wall-clock end-to-end; never zero for a completed request.
Both fixes are committed as d9a991f. Nothing is pending.
avg_tok_per_sec ≈ 5–25 (was 0.04–0.08)latency_ms ≈ 300–6000 ms (was 9999)Run benchmark to verify the fix:
If scores look correct, update warm-up slots:
ansible-playbook playbooks/03_benchmark.yml -K -e @local.yml && \
ansible-playbook playbooks/04_models.yml -K -e @local.yml
Merge feature/three-pass-benchmark into master when satisfied.