SPB Git

spb/wp33_uqo

Public MIT

H5 energy run (laptop), probe +32% at 256 tokens, audit update, paper energy section

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Nov 1, 2026) parent 66fc134 Browse files

10 changed files +191 −5

modified benchmarks/processed/audit.json +48 −2
@@ -508,13 +508,59 @@
508 "unit": "tok/s", 508 "unit": "tok/s",
509 "source": "gateD/fused_upgate_laptop.jsonl" 509 "source": "gateD/fused_upgate_laptop.jsonl"
510 }, 510 },
511+ {
512+ "comparison": "laptop cold NVMe, 16 slots, 256-token generations (energy run): probe m=8 vs no prefetch",
513+ "n_a": 12,
514+ "n_b": 12,
515+ "median_a": 41.99697918839411,
516+ "ci_a": [
517+ 39.14102472377323,
518+ 45.06795864020263
519+ ],
520+ "median_b": 31.9444091359517,
521+ "ci_b": [
522+ 26.75143775848223,
523+ 35.180428866547544
524+ ],
525+ "diff": 10.052570052442405,
526+ "ci_diff": [
527+ 5.172641851309933,
528+ 16.906247304147133
529+ ],
530+ "rel_diff_pct": 31.46894972970022,
531+ "unit": "tok/s",
532+ "source": "gateG/energy_laptop/bench.jsonl"
533+ },
534+ {
535+ "comparison": "laptop energy run: TITAN all-resident vs mlx-lm (256 tokens)",
536+ "n_a": 12,
537+ "n_b": 12,
538+ "median_a": 461.94116784131916,
539+ "ci_a": [
540+ 459.97768086489026,
541+ 463.3110690149645
542+ ],
543+ "median_b": 463.01102813803016,
544+ "ci_b": [
545+ 457.19141824078304,
546+ 467.4469440144102
547+ ],
548+ "diff": -1.0698602967109991,
549+ "ci_diff": [
550+ -6.262159052607899,
551+ 4.915511533689653
552+ ],
553+ "rel_diff_pct": -0.2310658346548192,
554+ "unit": "tok/s",
555+ "source": "gateG/energy_laptop/bench.jsonl"
556+ },
511 { 557 {
512 "comparison": "M3U96a+M3U96b OLMoE 32 slots: odd experts remote vs local", 558 "comparison": "M3U96a+M3U96b OLMoE 32 slots: odd experts remote vs local",
513 "n_a": 16, 559 "n_a": 16,
514 "n_b": 16, 560 "n_b": 16,
515 "median_a": 15.099750302534616, 561 "median_a": 15.099750302534616,
516 "ci_a": [ 562 "ci_a": [
517− 14.832823372534836, 563+ 14.84831934271548,
518 15.478581724182211 564 15.478581724182211
519 ], 565 ],
520 "median_b": 81.29106238077739, 566 "median_b": 81.29106238077739,
@@ -525,7 +571,7 @@
525 "diff": -66.19131207824277, 571 "diff": -66.19131207824277,
526 "ci_diff": [ 572 "ci_diff": [
527 -71.76838200410603, 573 -71.76838200410603,
528− -55.195792166972154 574+ -55.20837275832496
529 ], 575 ],
530 "rel_diff_pct": -81.42507938719571, 576 "rel_diff_pct": -81.42507938719571,
531 "unit": "tok/s", 577 "unit": "tok/s",
added benchmarks/processed/energy_laptop.json +50 −0
@@ -0,0 +1,50 @@
1+{
2+ "idle_mW": 13229.4,
3+ "samples": 411,
4+ "configs": [
5+ {
6+ "backend": "mlx_lm",
7+ "capacity": null,
8+ "predictor": "none",
9+ "cold": false,
10+ "runs": 12,
11+ "J_per_token_gross_median": 0.10103162032482216,
12+ "J_per_token_net_median": 0.07269091873825528,
13+ "mean_W_median": 47.16142500000001,
14+ "tok_s_median": 463.01102813803016
15+ },
16+ {
17+ "backend": "titan",
18+ "capacity": 64,
19+ "predictor": "none",
20+ "cold": false,
21+ "runs": 12,
22+ "J_per_token_gross_median": 0.10082230988186783,
23+ "J_per_token_net_median": 0.0721311173920054,
24+ "mean_W_median": 46.38324304673549,
25+ "tok_s_median": 461.94116784131916
26+ },
27+ {
28+ "backend": "titan",
29+ "capacity": 16,
30+ "predictor": "none",
31+ "cold": true,
32+ "runs": 12,
33+ "J_per_token_gross_median": 0.4979993704629596,
34+ "J_per_token_net_median": 0.08558683837410064,
35+ "mean_W_median": 15.91768522488383,
36+ "tok_s_median": 31.9444091359517
37+ },
38+ {
39+ "backend": "titan",
40+ "capacity": 16,
41+ "predictor": "probe",
42+ "cold": true,
43+ "runs": 12,
44+ "J_per_token_gross_median": 0.4409973693503532,
45+ "J_per_token_net_median": 0.11889855275903824,
46+ "mean_W_median": 18.36748862744526,
47+ "tok_s_median": 41.99697918839411
48+ }
49+ ]
50+}
\ No newline at end of file
modified benchmarks/raw/gateG/energy_laptop/bench.jsonl +6 −0
@@ -56,3 +56,9 @@
56 {"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 0, "family": "code", "prompt": "Write a C function that computes the dot product of two floa", "ts": "2026-11-01T01:30:56", "prompt_tokens": 24, "gen_tokens": 256, "ttft_ms": 321.83154206722975, "prompt_tps": 75.0366976534093, "gen_tps": 50.18351287297188, "decode_tps_wall": 49.98757009104001, "itl_ms_p50": 20.094042061828077, "itl_ms_p95": 25.694333016872406, "itl_ms_p99": 27.389249997213483, "itl_ms_mean": 20.00497319991244, "total_s": 5.4230997080449015, "peak_mem_gb": 1.937415632, "text": "#include <arm_neon.h>\n\nfloat dot_product_neon(const float *a, const float *b, int len) {\n // TODO: Implement the dot product computation using NEON intrinsics\n // Start by loading the arrays int", "t_start_epoch": 1793514651.3075972, "t_end_epoch": 1793514656.731461, "t_first_epoch": 1793514651.6294286, "cache_hit_rate": 0.838486889239146, "cache_misses": 5636, "cache_hits": 29259, "stall_s": 1.4255401014816016, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 10451, "installed": 10451, "late": 112, "dup": 21485, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 3.4393598578171805, "prefetch": 0.2789632437052205, "ensure": 1.4602325750747696, "build": 0.04396384267602116}, "ssd_bytes": 56930992128, "ssd_read_s": 5.710928951739334} 56 {"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 0, "family": "code", "prompt": "Write a C function that computes the dot product of two floa", "ts": "2026-11-01T01:30:56", "prompt_tokens": 24, "gen_tokens": 256, "ttft_ms": 321.83154206722975, "prompt_tps": 75.0366976534093, "gen_tps": 50.18351287297188, "decode_tps_wall": 49.98757009104001, "itl_ms_p50": 20.094042061828077, "itl_ms_p95": 25.694333016872406, "itl_ms_p99": 27.389249997213483, "itl_ms_mean": 20.00497319991244, "total_s": 5.4230997080449015, "peak_mem_gb": 1.937415632, "text": "#include <arm_neon.h>\n\nfloat dot_product_neon(const float *a, const float *b, int len) {\n // TODO: Implement the dot product computation using NEON intrinsics\n // Start by loading the arrays int", "t_start_epoch": 1793514651.3075972, "t_end_epoch": 1793514656.731461, "t_first_epoch": 1793514651.6294286, "cache_hit_rate": 0.838486889239146, "cache_misses": 5636, "cache_hits": 29259, "stall_s": 1.4255401014816016, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 10451, "installed": 10451, "late": 112, "dup": 21485, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 3.4393598578171805, "prefetch": 0.2789632437052205, "ensure": 1.4602325750747696, "build": 0.04396384267602116}, "ssd_bytes": 56930992128, "ssd_read_s": 5.710928951739334}
57 {"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 1, "family": "general", "prompt": "Describe the main differences between a Mac Studio and a Mac", "ts": "2026-11-01T01:31:03", "prompt_tokens": 18, "gen_tokens": 256, "ttft_ms": 280.00575001351535, "prompt_tps": 64.36067721757628, "gen_tps": 40.35307071785748, "decode_tps_wall": 40.195500143293714, "itl_ms_p50": 24.73545796237886, "itl_ms_p95": 28.866332955658436, "itl_ms_p99": 31.44495899323374, "itl_ms_mean": 24.87840669813986, "total_s": 6.6239994580391794, "peak_mem_gb": 1.83841756, "text": "\n\nMac Studio:\n- More powerful hardware options, including multiple GPUs and more RAM.\n- Higher-end CPU options, often with more cores and higher clock speeds.\n- Larger display with a higher resolution", "t_start_epoch": 1793514656.731574, "t_end_epoch": 1793514663.356687, "t_first_epoch": 1793514657.0115798, "cache_hit_rate": 0.8177448311808653, "cache_misses": 6294, "cache_hits": 28240, "stall_s": 1.6402923869900405, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 15938, "installed": 15938, "late": 98, "dup": 15814, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.341446908423677, "prefetch": 0.333583117229864, "ensure": 1.6837690656539053, "build": 0.04841878020670265}, "ssd_bytes": 78677803008, "ssd_read_s": 7.641431345953606} 57 {"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 1, "family": "general", "prompt": "Describe the main differences between a Mac Studio and a Mac", "ts": "2026-11-01T01:31:03", "prompt_tokens": 18, "gen_tokens": 256, "ttft_ms": 280.00575001351535, "prompt_tps": 64.36067721757628, "gen_tps": 40.35307071785748, "decode_tps_wall": 40.195500143293714, "itl_ms_p50": 24.73545796237886, "itl_ms_p95": 28.866332955658436, "itl_ms_p99": 31.44495899323374, "itl_ms_mean": 24.87840669813986, "total_s": 6.6239994580391794, "peak_mem_gb": 1.83841756, "text": "\n\nMac Studio:\n- More powerful hardware options, including multiple GPUs and more RAM.\n- Higher-end CPU options, often with more cores and higher clock speeds.\n- Larger display with a higher resolution", "t_start_epoch": 1793514656.731574, "t_end_epoch": 1793514663.356687, "t_first_epoch": 1793514657.0115798, "cache_hit_rate": 0.8177448311808653, "cache_misses": 6294, "cache_hits": 28240, "stall_s": 1.6402923869900405, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 15938, "installed": 15938, "late": 98, "dup": 15814, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.341446908423677, "prefetch": 0.333583117229864, "ensure": 1.6837690656539053, "build": 0.04841878020670265}, "ssd_bytes": 78677803008, "ssd_read_s": 7.641431345953606}
58 {"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 1, "family": "code", "prompt": "Write a C function that computes the dot product of two floa", "ts": "2026-11-01T01:31:09", "prompt_tokens": 24, "gen_tokens": 256, "ttft_ms": 317.7586660021916, "prompt_tps": 75.61694756174724, "gen_tps": 44.943455296321034, "decode_tps_wall": 44.767957139778446, "itl_ms_p50": 22.643874981440604, "itl_ms_p95": 26.98620897717774, "itl_ms_p99": 28.52170797996223, "itl_ms_mean": 22.337405231105638, "total_s": 6.013796999934129, "peak_mem_gb": 1.944690112, "text": "#include <arm_neon.h>\n\nfloat dot_product_neon(const float *a, const float *b, int len) {\n // TODO: Implement the dot product computation using NEON intrinsics\n // Start by loading the arrays int", "t_start_epoch": 1793514663.356802, "t_end_epoch": 1793514669.371687, "t_first_epoch": 1793514663.6745605, "cache_hit_rate": 0.838486889239146, "cache_misses": 5636, "cache_hits": 29259, "stall_s": 1.4071811041794717, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 10474, "installed": 10474, "late": 16, "dup": 21462, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.0537837136071175, "prefetch": 0.262417831341736, "ensure": 1.4553386754123494, "build": 0.04409997153561562}, "ssd_bytes": 57012387840, "ssd_read_s": 5.6420947627630085} 58 {"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 1, "family": "code", "prompt": "Write a C function that computes the dot product of two floa", "ts": "2026-11-01T01:31:09", "prompt_tokens": 24, "gen_tokens": 256, "ttft_ms": 317.7586660021916, "prompt_tps": 75.61694756174724, "gen_tps": 44.943455296321034, "decode_tps_wall": 44.767957139778446, "itl_ms_p50": 22.643874981440604, "itl_ms_p95": 26.98620897717774, "itl_ms_p99": 28.52170797996223, "itl_ms_mean": 22.337405231105638, "total_s": 6.013796999934129, "peak_mem_gb": 1.944690112, "text": "#include <arm_neon.h>\n\nfloat dot_product_neon(const float *a, const float *b, int len) {\n // TODO: Implement the dot product computation using NEON intrinsics\n // Start by loading the arrays int", "t_start_epoch": 1793514663.356802, "t_end_epoch": 1793514669.371687, "t_first_epoch": 1793514663.6745605, "cache_hit_rate": 0.838486889239146, "cache_misses": 5636, "cache_hits": 29259, "stall_s": 1.4071811041794717, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 10474, "installed": 10474, "late": 16, "dup": 21462, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.0537837136071175, "prefetch": 0.262417831341736, "ensure": 1.4553386754123494, "build": 0.04409997153561562}, "ssd_bytes": 57012387840, "ssd_read_s": 5.6420947627630085}
59+{"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 1, "family": "general", "prompt": "Summarize the history of the Rideau Canal in one paragraph.", "ts": "2026-11-01T01:31:16", "prompt_tokens": 14, "gen_tokens": 256, "ttft_ms": 275.0973749207333, "prompt_tps": 50.94533918050652, "gen_tps": 39.16630216954697, "decode_tps_wall": 39.01336425693576, "itl_ms_p50": 25.779457995668054, "itl_ms_p95": 30.430624959990382, "itl_ms_p99": 32.827000017277896, "itl_ms_mean": 25.632242157178766, "total_s": 6.811319125001319, "peak_mem_gb": 1.76630474, "text": "\n\nThe Rideau Canal, officially opened in 1832, was constructed by the British to connect Ottawa to Montreal via the Ottawa River. It was designed by Colonel John By and took approximately three years ", "t_start_epoch": 1793514669.3718011, "t_end_epoch": 1793514676.184185, "t_first_epoch": 1793514669.6468985, "cache_hit_rate": 0.8085907843251766, "cache_misses": 6555, "cache_hits": 27691, "stall_s": 1.7380136590218171, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 16304, "installed": 16304, "late": 75, "dup": 15288, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.410167610272765, "prefetch": 0.33935969846788794, "ensure": 1.787551395012997, "build": 0.050091319368220866}, "ssd_bytes": 80896720896, "ssd_read_s": 7.967664900003001}
60+{"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 1, "family": "code", "prompt": "Write a bash script that lists the ten largest files under a", "ts": "2026-11-01T01:31:22", "prompt_tokens": 19, "gen_tokens": 256, "ttft_ms": 278.2995420275256, "prompt_tps": 68.34146221024587, "gen_tps": 45.059955480675804, "decode_tps_wall": 44.884005538929884, "itl_ms_p50": 22.38995803054422, "itl_ms_p95": 26.075958041474223, "itl_ms_p99": 27.813332970254123, "itl_ms_mean": 22.27965147033626, "total_s": 5.959610666963272, "peak_mem_gb": 1.784851132, "text": "#!/bin/bash\n\n# Specify the directory\ndir=\"/path/to/directory\"\n\n# Get the size of each file and store it in an array\nfiles=( $(ls -l \"$dir\" | awk '{print $5, $9}') )\n\n# Sort the array in descending ord", "t_start_epoch": 1793514676.1842968, "t_end_epoch": 1793514682.144971, "t_first_epoch": 1793514676.4625964, "cache_hit_rate": 0.8483211339607296, "cache_misses": 5222, "cache_hits": 29206, "stall_s": 1.3389855737332255, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 9792, "installed": 9792, "late": 15, "dup": 21912, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.072873308439739, "prefetch": 0.2606140315765515, "ensure": 1.384154133265838, "build": 0.04386682098265737}, "ssd_bytes": 53133705216, "ssd_read_s": 5.306377995759249}
61+{"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 2, "family": "general", "prompt": "Summarize the history of the Rideau Canal in one paragraph.", "ts": "2026-11-01T01:31:29", "prompt_tokens": 14, "gen_tokens": 256, "ttft_ms": 317.9883330594748, "prompt_tps": 44.06201413203467, "gen_tps": 39.11574727799949, "decode_tps_wall": 38.96302208706078, "itl_ms_p50": 25.811459054239094, "itl_ms_p95": 30.3548329975456, "itl_ms_p99": 33.19758293218911, "itl_ms_mean": 25.665360293807645, "total_s": 6.862655207980424, "peak_mem_gb": 1.76522954, "text": "\n\nThe Rideau Canal, officially opened in 1832, was constructed by the British to connect Ottawa to Montreal via the Ottawa River. It was designed by Colonel John By and took approximately three years ", "t_start_epoch": 1793514682.145089, "t_end_epoch": 1793514689.008797, "t_first_epoch": 1793514682.4630773, "cache_hit_rate": 0.8068679553816505, "cache_misses": 6614, "cache_hits": 27632, "stall_s": 1.7886029259534553, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 16280, "installed": 16280, "late": 82, "dup": 15312, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.4105687430128455, "prefetch": 0.3390109332976863, "ensure": 1.8378166460897774, "build": 0.05021236022002995}, "ssd_bytes": 81020583936, "ssd_read_s": 8.117628464358859}
62+{"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 2, "family": "general", "prompt": "Describe the main differences between a Mac Studio and a Mac", "ts": "2026-11-01T01:31:35", "prompt_tokens": 18, "gen_tokens": 256, "ttft_ms": 359.8532499745488, "prompt_tps": 50.05781566528224, "gen_tps": 40.107058956812956, "decode_tps_wall": 39.95045178277525, "itl_ms_p50": 24.853499955497682, "itl_ms_p95": 29.331583995372057, "itl_ms_p99": 31.180959078483284, "itl_ms_mean": 25.031006043119465, "total_s": 6.7427597909700125, "peak_mem_gb": 1.835140832, "text": "\n\nMac Studio:\n- More powerful hardware options, including multiple GPUs and more RAM.\n- Higher-end CPU options, often with more cores and higher clock speeds.\n- Larger display with a higher resolution", "t_start_epoch": 1793514689.0089102, "t_end_epoch": 1793514695.752853, "t_first_epoch": 1793514689.3687634, "cache_hit_rate": 0.8164128105635027, "cache_misses": 6340, "cache_hits": 28194, "stall_s": 1.6916083676042035, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 15914, "installed": 15914, "late": 146, "dup": 15838, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.384531343355775, "prefetch": 0.3517630967544392, "ensure": 1.7302835832815617, "build": 0.05091829574666917}, "ssd_bytes": 78755659776, "ssd_read_s": 7.83193309570197}
63+{"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 2, "family": "code", "prompt": "Write a bash script that lists the ten largest files under a", "ts": "2026-11-01T01:31:41", "prompt_tokens": 19, "gen_tokens": 256, "ttft_ms": 336.7267919238657, "prompt_tps": 56.48868554059407, "gen_tps": 45.075961799729455, "decode_tps_wall": 44.89996288257666, "itl_ms_p50": 22.388083045370877, "itl_ms_p95": 26.39979193918407, "itl_ms_p99": 27.83529192674905, "itl_ms_mean": 22.2717333333932, "total_s": 6.016018791939132, "peak_mem_gb": 1.776482388, "text": "#!/bin/bash\n\n# Specify the directory\ndir=\"/path/to/directory\"\n\n# Get the size of each file and store it in an array\nfiles=( $(ls -l \"$dir\" | awk '{print $5, $9}') )\n\n# Sort the array in descending ord", "t_start_epoch": 1793514695.7529988, "t_end_epoch": 1793514701.770095, "t_first_epoch": 1793514696.0897257, "cache_hit_rate": 0.8481759033344952, "cache_misses": 5227, "cache_hits": 29201, "stall_s": 1.3470651340903714, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 9777, "installed": 9777, "late": 11, "dup": 21927, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.121528778923675, "prefetch": 0.25852280447725207, "ensure": 1.39380456705112, "build": 0.04398937046062201}, "ssd_bytes": 53098315776, "ssd_read_s": 5.333780522574671}
64+{"backend": "titan", "capacity": 16, "policy": "lru", "predictor": "probe", "m": 8, "prefetch_workers": 2, "fused_upgate": false, "nocache": true, "max_tokens": 256, "split": "heldout", "tag": "energy", "model": "/Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b", "cmd": "benchmarks/scripts/bench_decode.py --model /Users/simon-pierreboucher/.cache/huggingface/hub/models--mlx-community--OLMoE-1B-7B-0125-Instruct-4bit/snapshots/e23844197887b031e7ddddbb0b8959c5a6853a7b --backend titan --capacity 16 --nocache --predictor probe --m 8 --traces benchmarks/raw/gateC/traces_olmoe_v2_laptop --families general,code --split heldout --repeats 3 --max-tokens 256 --tag energy --out benchmarks/raw/gateG/energy_laptop/bench.jsonl", "env": {"host": "MacBookPro-de-simon-pierre-2.local", "chip": "Apple M5 Max", "ram_gb": 48, "macos": "27.0", "python": "3.12.13", "mlx": "0.32.4", "mlx_lm": "0.32.2", "numpy": "2.5.4", "git": "e0179f6"}, "seed": 0, "warmup": false, "repeat": 2, "family": "code", "prompt": "Write a C function that computes the dot product of two floa", "ts": "2026-11-01T01:31:48", "prompt_tokens": 24, "gen_tokens": 256, "ttft_ms": 421.94374999962747, "prompt_tps": 56.92244085918925, "gen_tps": 43.64088765893074, "decode_tps_wall": 43.47065411961759, "itl_ms_p50": 22.84520899411291, "itl_ms_p95": 27.44949993211776, "itl_ms_p99": 28.66212499793619, "itl_ms_mean": 23.004024674860286, "total_s": 6.287970042089, "peak_mem_gb": 1.937612228, "text": "#include <arm_neon.h>\n\nfloat dot_product_neon(const float *a, const float *b, int len) {\n // TODO: Implement the dot product computation using NEON intrinsics\n // Start by loading the arrays int", "t_start_epoch": 1793514701.7702122, "t_end_epoch": 1793514708.059204, "t_first_epoch": 1793514702.1921558, "cache_hit_rate": 0.8384295744375985, "cache_misses": 5638, "cache_hits": 29257, "stall_s": 1.489676682278514, "hits_device": 0, "layers_complete": 0, "prefetch": {"issued": 10458, "installed": 10458, "late": 22, "dup": 21478, "predictor": "probe", "m": 8}, "host_time_s": {"sync": 4.200149417156354, "prefetch": 0.2844661573180929, "ensure": 1.5394541963469237, "build": 0.04770598409231752}, "ssd_bytes": 56962842624, "ssd_read_s": 5.887374298530631}
modified benchmarks/raw/gateG/energy_laptop/power.jsonl +44 −0
@@ -365,3 +365,47 @@
365 {"t": 1793514668.483244, "elapsed_ns": 1021877041, "cpu_mW": 14014.4, "gpu_mW": 1470.82, "ane_mW": 0.0, "combined_mW": 15485.2, "thermal_pressure": "Nominal"} 365 {"t": 1793514668.483244, "elapsed_ns": 1021877041, "cpu_mW": 14014.4, "gpu_mW": 1470.82, "ane_mW": 0.0, "combined_mW": 15485.2, "thermal_pressure": "Nominal"}
366 {"t": 1793514669.5031161, "elapsed_ns": 1021871875, "cpu_mW": 14131.9, "gpu_mW": 9.78596, "ane_mW": 0.0, "combined_mW": 14141.7, "thermal_pressure": "Nominal"} 366 {"t": 1793514669.5031161, "elapsed_ns": 1021871875, "cpu_mW": 14131.9, "gpu_mW": 9.78596, "ane_mW": 0.0, "combined_mW": 14141.7, "thermal_pressure": "Nominal"}
367 {"t": 1793514670.525273, "elapsed_ns": 1021980208, "cpu_mW": 13655.8, "gpu_mW": 2924.71, "ane_mW": 0.0, "combined_mW": 16580.6, "thermal_pressure": "Nominal"} 367 {"t": 1793514670.525273, "elapsed_ns": 1021980208, "cpu_mW": 13655.8, "gpu_mW": 2924.71, "ane_mW": 0.0, "combined_mW": 16580.6, "thermal_pressure": "Nominal"}
368+{"t": 1793514671.5472598, "elapsed_ns": 1021663583, "cpu_mW": 16719.8, "gpu_mW": 1473.09, "ane_mW": 0.0, "combined_mW": 18192.9, "thermal_pressure": "Nominal"}
369+{"t": 1793514672.5693738, "elapsed_ns": 1022497416, "cpu_mW": 17107.1, "gpu_mW": 1428.85, "ane_mW": 0.0, "combined_mW": 18536.0, "thermal_pressure": "Nominal"}
370+{"t": 1793514673.591692, "elapsed_ns": 1022039333, "cpu_mW": 14509.2, "gpu_mW": 1442.21, "ane_mW": 0.0, "combined_mW": 15951.4, "thermal_pressure": "Nominal"}
371+{"t": 1793514674.61279, "elapsed_ns": 1021492750, "cpu_mW": 16213.5, "gpu_mW": 1414.6, "ane_mW": 0.0, "combined_mW": 17628.1, "thermal_pressure": "Nominal"}
372+{"t": 1793514676.656679, "elapsed_ns": 1021875041, "cpu_mW": 16081.2, "gpu_mW": 1414.07, "ane_mW": 0.0, "combined_mW": 17495.3, "thermal_pressure": "Nominal"}
373+{"t": 1793514676.658433, "elapsed_ns": 1022096291, "cpu_mW": 16378.1, "gpu_mW": 1410.83, "ane_mW": 0.0, "combined_mW": 17788.9, "thermal_pressure": "Nominal"}
374+{"t": 1793514677.678307, "elapsed_ns": 1022144333, "cpu_mW": 16229.6, "gpu_mW": 1543.81, "ane_mW": 0.0, "combined_mW": 17773.4, "thermal_pressure": "Nominal"}
375+{"t": 1793514678.7000802, "elapsed_ns": 1021754749, "cpu_mW": 14803.9, "gpu_mW": 1483.72, "ane_mW": 0.0, "combined_mW": 16287.7, "thermal_pressure": "Nominal"}
376+{"t": 1793514679.722081, "elapsed_ns": 1021633583, "cpu_mW": 17904.7, "gpu_mW": 1449.64, "ane_mW": 0.0, "combined_mW": 19354.3, "thermal_pressure": "Nominal"}
377+{"t": 1793514680.745054, "elapsed_ns": 1021737583, "cpu_mW": 17822.6, "gpu_mW": 1473.96, "ane_mW": 0.0, "combined_mW": 19296.5, "thermal_pressure": "Nominal"}
378+{"t": 1793514681.7677839, "elapsed_ns": 1023037958, "cpu_mW": 14721.8, "gpu_mW": 1447.65, "ane_mW": 0.0, "combined_mW": 16169.5, "thermal_pressure": "Nominal"}
379+{"t": 1793514682.789927, "elapsed_ns": 1023006166, "cpu_mW": 14083.0, "gpu_mW": 1428.14, "ane_mW": 0.0, "combined_mW": 15511.1, "thermal_pressure": "Nominal"}
380+{"t": 1793514684.8362508, "elapsed_ns": 1021466124, "cpu_mW": 16279.5, "gpu_mW": 1347.08, "ane_mW": 0.0, "combined_mW": 17626.6, "thermal_pressure": "Nominal"}
381+{"t": 1793514684.8381271, "elapsed_ns": 1023197958, "cpu_mW": 16534.4, "gpu_mW": 7.81862, "ane_mW": 0.0, "combined_mW": 16542.3, "thermal_pressure": "Nominal"}
382+{"t": 1793514685.8592598, "elapsed_ns": 1022769500, "cpu_mW": 17330.4, "gpu_mW": 2796.33, "ane_mW": 0.0, "combined_mW": 20126.7, "thermal_pressure": "Nominal"}
383+{"t": 1793514686.881587, "elapsed_ns": 1023480208, "cpu_mW": 18902.2, "gpu_mW": 1409.9, "ane_mW": 0.0, "combined_mW": 20312.1, "thermal_pressure": "Nominal"}
384+{"t": 1793514687.905268, "elapsed_ns": 1022079958, "cpu_mW": 17793.1, "gpu_mW": 1402.04, "ane_mW": 0.0, "combined_mW": 19195.2, "thermal_pressure": "Nominal"}
385+{"t": 1793514688.926822, "elapsed_ns": 1023503708, "cpu_mW": 18702.4, "gpu_mW": 1393.25, "ane_mW": 0.0, "combined_mW": 20095.7, "thermal_pressure": "Nominal"}
386+{"t": 1793514689.9482088, "elapsed_ns": 1021893958, "cpu_mW": 19423.7, "gpu_mW": 6.85003, "ane_mW": 0.0, "combined_mW": 19430.6, "thermal_pressure": "Nominal"}
387+{"t": 1793514690.971071, "elapsed_ns": 1021706791, "cpu_mW": 16673.1, "gpu_mW": 2812.94, "ane_mW": 0.0, "combined_mW": 19486.0, "thermal_pressure": "Nominal"}
388+{"t": 1793514693.017092, "elapsed_ns": 1022990499, "cpu_mW": 16469.4, "gpu_mW": 1542.54, "ane_mW": 0.0, "combined_mW": 18011.9, "thermal_pressure": "Nominal"}
389+{"t": 1793514693.018943, "elapsed_ns": 1022787500, "cpu_mW": 16587.0, "gpu_mW": 1400.1, "ane_mW": 0.0, "combined_mW": 17987.1, "thermal_pressure": "Nominal"}
390+{"t": 1793514694.040153, "elapsed_ns": 1022888541, "cpu_mW": 17325.4, "gpu_mW": 1397.02, "ane_mW": 0.0, "combined_mW": 18722.5, "thermal_pressure": "Nominal"}
391+{"t": 1793514695.061603, "elapsed_ns": 1023124624, "cpu_mW": 19059.3, "gpu_mW": 1400.61, "ane_mW": 0.0, "combined_mW": 20459.9, "thermal_pressure": "Nominal"}
392+{"t": 1793514696.084724, "elapsed_ns": 1021799125, "cpu_mW": 19261.1, "gpu_mW": 1385.79, "ane_mW": 0.0, "combined_mW": 20646.9, "thermal_pressure": "Nominal"}
393+{"t": 1793514697.107336, "elapsed_ns": 1022771541, "cpu_mW": 20242.1, "gpu_mW": 1417.72, "ane_mW": 0.0, "combined_mW": 21659.8, "thermal_pressure": "Nominal"}
394+{"t": 1793514698.130102, "elapsed_ns": 1022986208, "cpu_mW": 12229.9, "gpu_mW": 1450.65, "ane_mW": 0.0, "combined_mW": 13680.5, "thermal_pressure": "Nominal"}
395+{"t": 1793514699.1531289, "elapsed_ns": 1022858083, "cpu_mW": 10727.8, "gpu_mW": 1462.57, "ane_mW": 0.0, "combined_mW": 12190.4, "thermal_pressure": "Nominal"}
396+{"t": 1793514701.199059, "elapsed_ns": 1022711291, "cpu_mW": 10527.9, "gpu_mW": 1454.96, "ane_mW": 0.0, "combined_mW": 11982.9, "thermal_pressure": "Nominal"}
397+{"t": 1793514701.200744, "elapsed_ns": 1023011750, "cpu_mW": 16977.3, "gpu_mW": 1420.32, "ane_mW": 0.0, "combined_mW": 18397.6, "thermal_pressure": "Nominal"}
398+{"t": 1793514702.222125, "elapsed_ns": 1022614625, "cpu_mW": 18696.2, "gpu_mW": 1391.53, "ane_mW": 0.0, "combined_mW": 20087.7, "thermal_pressure": "Nominal"}
399+{"t": 1793514703.244915, "elapsed_ns": 1023305750, "cpu_mW": 18224.3, "gpu_mW": 1448.25, "ane_mW": 0.0, "combined_mW": 19672.5, "thermal_pressure": "Nominal"}
400+{"t": 1793514704.2686641, "elapsed_ns": 1022789583, "cpu_mW": 14050.8, "gpu_mW": 1416.71, "ane_mW": 0.0, "combined_mW": 15467.5, "thermal_pressure": "Nominal"}
401+{"t": 1793514705.2916422, "elapsed_ns": 1022984583, "cpu_mW": 18365.9, "gpu_mW": 1408.62, "ane_mW": 0.0, "combined_mW": 19774.5, "thermal_pressure": "Nominal"}
402+{"t": 1793514706.314353, "elapsed_ns": 1023060083, "cpu_mW": 19223.7, "gpu_mW": 1413.41, "ane_mW": 0.0, "combined_mW": 20637.1, "thermal_pressure": "Nominal"}
403+{"t": 1793514707.336481, "elapsed_ns": 1023268416, "cpu_mW": 19220.8, "gpu_mW": 1403.35, "ane_mW": 0.0, "combined_mW": 20624.1, "thermal_pressure": "Nominal"}
404+{"t": 1793514709.380501, "elapsed_ns": 1022018791, "cpu_mW": 18682.6, "gpu_mW": 1412.89, "ane_mW": 0.0, "combined_mW": 20095.5, "thermal_pressure": "Nominal"}
405+{"t": 1793514709.3820941, "elapsed_ns": 1023282333, "cpu_mW": 17280.7, "gpu_mW": 1016.34, "ane_mW": 0.0, "combined_mW": 18297.0, "thermal_pressure": "Nominal"}
406+{"t": 1793514710.403035, "elapsed_ns": 1021837000, "cpu_mW": 6981.54, "gpu_mW": 67.5254, "ane_mW": 0.0, "combined_mW": 7049.07, "thermal_pressure": "Nominal"}
407+{"t": 1793514711.424758, "elapsed_ns": 1022221083, "cpu_mW": 9551.75, "gpu_mW": 60.6522, "ane_mW": 0.0, "combined_mW": 9612.4, "thermal_pressure": "Nominal"}
408+{"t": 1793514712.4486558, "elapsed_ns": 1022228833, "cpu_mW": 10366.6, "gpu_mW": 82.1734, "ane_mW": 0.0, "combined_mW": 10448.7, "thermal_pressure": "Nominal"}
409+{"t": 1793514713.470026, "elapsed_ns": 1022034125, "cpu_mW": 10429.2, "gpu_mW": 62.6202, "ane_mW": 0.0, "combined_mW": 10491.8, "thermal_pressure": "Nominal"}
410+{"t": 1793514714.491505, "elapsed_ns": 1022779874, "cpu_mW": 11411.1, "gpu_mW": 82.1291, "ane_mW": 0.0, "combined_mW": 11493.2, "thermal_pressure": "Nominal"}
411+{"t": 1793514715.513386, "elapsed_ns": 1021616708, "cpu_mW": 12161.1, "gpu_mW": 65.5823, "ane_mW": 0.0, "combined_mW": 12226.7, "thermal_pressure": "Nominal"}
modified paper/main.pdf +0 −0

Binary file not shown.

modified paper/sections/results.tex +14 −3
@@ -156,6 +156,17 @@ says that batching tokens, not kernels, is what would change the regime.
156 156
157 \input{tables/fused} 157 \input{tables/fused}
158 158
159−\subsection{Energy frontier (H5)} 159+\subsection{Energy per token (H5, single node)}
160−\textsc{pending}: the \code{powermetrics} sampler (\code{benchmarks/scripts/power\_sampler.py}) is written; no energy run has been 160+\label{sec:results-energy}
161−logged in this version. 161+Table~\ref{tab:energy} reports package power sampled at 1~s by \code{powermetrics} while four configurations decoded 256 tokens on
162+the laptop (\code{benchmarks/raw/gateG/energy\_laptop/}). All-resident decoding costs 0.101~J per token at 47~W whether mlx-lm or
163+\titan{} runs it; bounded residency on the cold tier costs five times more per token in gross terms (0.50~J at 16~W) because the
164+machine waits on the disk most of the time; the probe prefetcher brings this to 0.44~J at 18~W. Net of the 13.2~W idle power the
165+ordering reverses between the two cold configurations (0.086 vs 0.119~J), which is the usual ambiguity of attributing idle power.
166+The same run also gives the first \emph{positive} H1 evidence: over 256-token generations the probe reaches a hit rate of 0.84 and
167+42.0~\tps{} against 31.9 for demand loading ($+10.1$ [$+7.5$, $+12.4$]~\tps{}, Table~\ref{tab:audit}), whereas the 64-token runs
168+of Section~\ref{sec:results-prefetch} showed a tie: the per-token install overhead is constant while the benefit of a warm, well-predicted
169+table grows with sequence length. H1 is therefore \emph{length-dependent} on this hardware, and the cluster-level Pareto study remains
170+pending.
171+
172+\input{tables/energy}
modified paper/tables/audit.tex +2 −0
@@ -28,6 +28,8 @@ laptop cold NVMe, 16 slots (general): transition2t50 m=8 vs no prefetch & 4/4 &
28 laptop cold NVMe, 16 slots (general): transition2t70 m=8 vs no prefetch & 4/4 & 27.8 [26.7, 29.4] & 33.0 [32.6, 33.3] & -5.2 [-6.3, -3.6] \\ 28 laptop cold NVMe, 16 slots (general): transition2t70 m=8 vs no prefetch & 4/4 & 27.8 [26.7, 29.4] & 33.0 [32.6, 33.3] & -5.2 [-6.3, -3.6] \\
29 laptop H4: fused up+gate vs two kernels, 64 slots resident & 12/12 & 475.6 [473.5, 476.2] & 476.7 [475.7, 478.2] & -1.1 [-3.6, +0.1] \\ 29 laptop H4: fused up+gate vs two kernels, 64 slots resident & 12/12 & 475.6 [473.5, 476.2] & 476.7 [475.7, 478.2] & -1.1 [-3.6, +0.1] \\
30 laptop H4: fused up+gate vs two kernels, 16 slots cold & 4/4 & 35.9 [35.7, 36.7] & 35.0 [34.1, 35.5] & +1.0 [+0.4, +2.0] \\ 30 laptop H4: fused up+gate vs two kernels, 16 slots cold & 4/4 & 35.9 [35.7, 36.7] & 35.0 [34.1, 35.5] & +1.0 [+0.4, +2.0] \\
31+laptop cold NVMe, 16 slots, 256-token generations (energy run): probe m=8 vs no prefetch & 12/12 & 42.0 [39.1, 45.1] & 31.9 [26.8, 35.2] & +10.1 [+5.2, +16.9] \\
32+laptop energy run: TITAN all-resident vs mlx-lm (256 tokens) & 12/12 & 461.9 [460.0, 463.3] & 463.0 [457.2, 467.4] & -1.1 [-6.3, +4.9] \\
31 M3U96a+M3U96b OLMoE 32 slots: odd experts remote vs local & 16/16 & 15.1 [14.8, 15.5] & 81.3 [70.5, 86.9] & -66.2 [-71.8, -55.2] \\ 33 M3U96a+M3U96b OLMoE 32 slots: odd experts remote vs local & 16/16 & 15.1 [14.8, 15.5] & 81.3 [70.5, 86.9] & -66.2 [-71.8, -55.2] \\
32 \bottomrule 34 \bottomrule
33 \end{tabular} 35 \end{tabular}
added paper/tables/energy.tex +15 −0
@@ -0,0 +1,15 @@
1+\begin{table}[t]
2+\centering\small
3+\caption{Energy per generated token on the laptop (M5 Max), OLMoE 4-bit, 256-token greedy decode, held-out general/code prompts; package power from \code{powermetrics} at 1 s; idle baseline 13.2 W. Source: \code{benchmarks/raw/gateG/energy\_laptop/}.}
4+\label{tab:energy}
5+\begin{tabular}{llrrrrr}
6+\toprule
7+Backend & residency & runs & tok/s & mean W & J/token (gross) & J/token (net of idle) \\
8+\midrule
9+mlx-lm & all resident & 12 & 463.0 & 47.2 & 0.101 & 0.073 \\
10+titan & all resident & 12 & 461.9 & 46.4 & 0.101 & 0.072 \\
11+titan & 16 slots, cold NVMe, probe & 12 & 42.0 & 18.4 & 0.441 & 0.119 \\
12+titan & 16 slots, cold NVMe & 12 & 31.9 & 15.9 & 0.498 & 0.086 \\
13+\bottomrule
14+\end{tabular}
15+\end{table}
modified research/LOG.md +7 −0
@@ -151,3 +151,10 @@ Chronological, append-only. Times are local (America/Toronto). Every entry names
151 192.168.2.85 in M3U96a's `known_hosts` (the LAN was renumbered by DHCP on 2026-09-21). Verified that the key presented on the LAN 151 192.168.2.85 in M3U96a's `known_hosts` (the LAN was renumbered by DHCP on 2026-09-21). Verified that the key presented on the LAN
152 (`SHA256:zcdc123MTDYreNavJ9lUAS1OWSFSzxvxipqaBSygHsA`) is M3U96b's actual `/etc/ssh/ssh_host_ed25519_key.pub` fingerprint before 152 (`SHA256:zcdc123MTDYreNavJ9lUAS1OWSFSzxvxipqaBSygHsA`) is M3U96b's actual `/etc/ssh/ssh_host_ed25519_key.pub` fingerprint before
153 replacing the entry (backup `~/.ssh/known_hosts.bak-20261101-wp33` on M3U96a); copy and layout on M3U96b restarted. 153 replacing the entry (backup `~/.ssh/known_hosts.bak-20261101-wp33` on M3U96a); copy and layout on M3U96b restarted.
154+- **Energy run (H5, single node)** (`benchmarks/raw/gateG/energy_laptop/`, powermetrics 1 s, 411 samples, idle 13.2 W, 256-token greedy,
155+ held-out general/code, 12 runs per configuration): mlx-lm 463 tok/s at 47.2 W → **0.101 J/token** gross (0.073 net of idle);
156+ TITAN all-resident 462 tok/s, 46.4 W, 0.101 J/token; TITAN 16 slots cold NVMe 31.9 tok/s at 15.9 W → 0.498 J/token gross (0.086 net);
157+ **16 slots cold + probe prefetch 42.0 tok/s** at 18.4 W → 0.441 J/token gross (0.119 net). New H1 evidence: with 256-token generations
158+ the probe beats demand loading by +32 % (the 64-token runs showed a tie) — see audit CIs; the hit rate reaches 0.84 over longer
159+ sequences while the per-token install overhead is unchanged. Energy favours prefetch per token in gross terms (the machine is on
160+ anyway) but not net of idle; all-resident decoding is 4–5× cheaper per token than any cold-tier configuration.
modified scripts/audit_stats.py +5 −0
@@ -57,6 +57,11 @@ if os.path.exists(fz):
57 f = load(fz) 57 f = load(fz)
58 add("laptop H4: fused up+gate vs two kernels, 64 slots resident", sel(f, capacity=64, fused_upgate=True), sel(f, capacity=64, fused_upgate=False), src="gateD/fused_upgate_laptop.jsonl") 58 add("laptop H4: fused up+gate vs two kernels, 64 slots resident", sel(f, capacity=64, fused_upgate=True), sel(f, capacity=64, fused_upgate=False), src="gateD/fused_upgate_laptop.jsonl")
59 add("laptop H4: fused up+gate vs two kernels, 16 slots cold", sel(f, capacity=16, fused_upgate=True), sel(f, capacity=16, fused_upgate=False), src="gateD/fused_upgate_laptop.jsonl") 59 add("laptop H4: fused up+gate vs two kernels, 16 slots cold", sel(f, capacity=16, fused_upgate=True), sel(f, capacity=16, fused_upgate=False), src="gateD/fused_upgate_laptop.jsonl")
60+en = f"{ROOT}/benchmarks/raw/gateG/energy_laptop/bench.jsonl"
61+if os.path.exists(en):
62+ e = load(en)
63+ add("laptop cold NVMe, 16 slots, 256-token generations (energy run): probe m=8 vs no prefetch", sel(e, capacity=16, predictor="probe"), sel(e, capacity=16, predictor="none"), src="gateG/energy_laptop/bench.jsonl")
64+ add("laptop energy run: TITAN all-resident vs mlx-lm (256 tokens)", sel(e, backend="titan", capacity=64), sel(e, backend="mlx_lm"), src="gateG/energy_laptop/bench.jsonl")
60 tn = f"{ROOT}/benchmarks/raw/gateE/two_node_m3u96a_m3u96b.jsonl" 65 tn = f"{ROOT}/benchmarks/raw/gateE/two_node_m3u96a_m3u96b.jsonl"
61 if os.path.exists(tn): 66 if os.path.exists(tn):
62 t = load(tn) 67 t = load(tn)
63 68
Menu

Theme