-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLocalLLM.html
More file actions
236 lines (225 loc) · 34.2 KB
/
Copy pathLocalLLM.html
File metadata and controls
236 lines (225 loc) · 34.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="darkreader-lock">
<title>Local LLM Hardware Heatmap</title>
<link rel="stylesheet" href="https://dmicsa.github.io/HTMLAssets/Theme.css">
<style>
body { background-color: var(--bg-color); color: var(--fg-color); margin: 20px; transition: background-color 0.3s, color 0.3s; }
.report-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
.methodology { margin-top: 24px; padding: 18px 20px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--bg-color); max-width: 1200px; }
.methodology h2 { margin: 0 0 10px; color: var(--fg-color); font-size: 1.02rem; }
.methodology p { margin: 8px 0 0; color: var(--fg-color); line-height: 1.55; }
.methodology strong { color: var(--fg-color); }
.card { overflow-x: auto; }
/* Numeric columns 2x wider (Theme.css pins .col-num at 80px) */
#summaryTable td.col-num, #summaryTable th.col-num {
width: 160px !important;
min-width: 160px !important;
max-width: 160px !important;
}
/* Thicker separator before each model group (32B / 70B / 104B) */
#summaryTable td.col-gsep, #summaryTable th.col-gsep {
border-left: 3px solid var(--border-color) !important;
}
/* First (System) column 4x base width (Theme.css pins .col-ix at 60px) */
#summaryTable th.col-ix, #summaryTable td:first-child {
width: 320px !important;
min-width: 320px !important;
max-width: 320px !important;
text-align: left !important;
}
</style>
<script src="https://dmicsa.github.io/HTMLAssets/Standard.js"></script>
<script>
let currentSortCol = -1;
let currentSortAsc = true;
function updateNumberFormat() {
const table = document.getElementById('summaryTable');
if(!table) return;
const rows = table.querySelectorAll('tbody tr');
rows.forEach(row => {
Array.from(row.children).forEach(cell => {
const f = cell.getAttribute('data-field');
const val = parseFloat(cell.getAttribute('data-val'));
if (isNaN(val)) return;
if (f === 'System Cost (k$)') {
cell.textContent = val.toFixed(1);
} else if (f.startsWith('t/k$')) {
cell.textContent = val.toFixed(2);
} else if (f.startsWith('t/kW')) {
cell.textContent = val.toFixed(1);
} else if (f === 'Bandwidth (GB/s)' || f === 'Power (W)') {
cell.textContent = val.toLocaleString('en-US');
} else {
cell.textContent = String(val);
}
});
});
}
function setSortArrow(colIndex) {
const table = document.getElementById('summaryTable');
if (!table) return;
const tbody = table.querySelector('tbody');
const ths = Array.from(table.querySelectorAll('thead th'));
const trs = Array.from(tbody.querySelectorAll('tr'));
if (currentSortCol === colIndex) {
currentSortAsc = !currentSortAsc;
} else {
currentSortCol = colIndex;
currentSortAsc = true;
if (colIndex > 0) currentSortAsc = false;
}
ths.forEach(th => th.classList.remove('sort-asc', 'sort-desc'));
const th = ths[colIndex];
if (th) th.classList.add(currentSortAsc ? 'sort-asc' : 'sort-desc');
const ascMult = currentSortAsc ? 1 : -1;
trs.sort((a, b) => {
let cellA = a.children[colIndex];
let cellB = b.children[colIndex];
if (!cellA || !cellB) return 0;
let valA = cellA.getAttribute('data-val');
if (!valA) valA = cellA.innerText.trim();
let valB = cellB.getAttribute('data-val');
if (!valB) valB = cellB.innerText.trim();
let fA = parseFloat(valA);
let fB = parseFloat(valB);
if (!isNaN(fA) && !isNaN(fB)) return (fA - fB) * ascMult;
return valA.localeCompare(valB) * ascMult;
});
trs.forEach(tr => tbody.appendChild(tr));
if (typeof updateTableColors === 'function') updateTableColors();
}
const renderTable = updateTableColors;
document.addEventListener('DOMContentLoaded', () => {
try { initStandard(); } catch (e) {}
setSortArrow(0);
updateNumberFormat();
try { refreshMetaChips(document); } catch (e) {}
updateTableColors();
});
</script></head><body class="solarized-light">
<div class="report-header">
<h1>Local LLM Hardware Heatmap</h1>
<div class="controls-group">
<div class="palette-dropdown">
<input type="checkbox" id="palette-toggle">
<label for="palette-toggle" class="palette-button" id="palette-btn-label">
<span id="current-palette-name">Loading...</span>
</label>
<div class="palette-menu" id="palette-menu"></div>
</div>
<select id="themeSelect" onchange="setTheme(this.value)" title="Select Theme">
<option value="solarized-light" selected>Solarized Light (default)</option>
<option value="dark">Dark</option>
<option value="kiwi-dark">Kiwi Dark</option>
<option value="kiwi-light">Kiwi Light</option>
<option value="light">Light</option>
<option value="mint-haze">Mint Haze</option>
<option value="mint-haze-dark">Mint Haze Dark</option>
<option value="oil">Oil</option>
<option value="petal-blush">Petal Blush</option>
<option value="petal-blush-dark">Petal Blush Dark</option>
<option value="rose-linen">Rose Linen</option>
<option value="rose-linen-dark">Rose Linen Dark</option>
<option value="rust-brown">Rust Brown</option>
<option value="sage-sea">Sage Sea</option>
<option value="sage-sea-dark">Sage Sea Dark</option>
<option value="warm-sand">Warm Sand</option>
<option value="warm-sand-dark">Warm Sand Dark</option>
</select>
</div> </div>
<p style="color: var(--fg-color); margin-bottom: 20px;">Green = best | Red = worst | Per-column OKLCH palette gradient | Click any header to sort | Budget cap: $20,000</p>
<div class="card">
<table id="summaryTable" class="grid-table">
<thead>
<tr><th class="col-ix" onclick="setSortArrow(0)">System</th><th class="col-num" onclick="setSortArrow(1)">System Cost (k$)</th><th class="col-num" onclick="setSortArrow(2)">Memory (GB)</th><th class="col-num" onclick="setSortArrow(3)">Bandwidth (GB/s)</th><th class="col-num" onclick="setSortArrow(4)">Power (W)</th><th class="col-num col-gsep" onclick="setSortArrow(5)">t/s (32B)</th><th class="col-num" onclick="setSortArrow(6)">t/k$ (32B)</th><th class="col-num" onclick="setSortArrow(7)">t/kW (32B)</th><th class="col-num col-gsep" onclick="setSortArrow(8)">t/s (70B)</th><th class="col-num" onclick="setSortArrow(9)">t/k$ (70B)</th><th class="col-num" onclick="setSortArrow(10)">t/kW (70B)</th><th class="col-num col-gsep" onclick="setSortArrow(11)">t/s (104B)</th><th class="col-num" onclick="setSortArrow(12)">t/k$ (104B)</th><th class="col-num" onclick="setSortArrow(13)">t/kW (104B)</th></tr>
</thead>
<tbody>
<tr><td data-field="System" data-val="Mac Studio M5 Ultra 96GB">Mac Studio M5 Ultra 96GB</td><td class="col-num" data-field="System Cost (k$)" data-val="5.5">5.5</td><td class="col-num" data-field="Memory (GB)" data-val="96">96</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="1200">1,200</td><td class="col-num" data-field="Power (W)" data-val="300">300</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="44">44</td><td class="col-num" data-field="t/k$ (32B)" data-val="8.0">8.00</td><td class="col-num" data-field="t/kW (32B)" data-val="146.7">146.7</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="25">25</td><td class="col-num" data-field="t/k$ (70B)" data-val="4.55">4.55</td><td class="col-num" data-field="t/kW (70B)" data-val="83.3">83.3</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="16">16</td><td class="col-num" data-field="t/k$ (104B)" data-val="2.91">2.91</td><td class="col-num" data-field="t/kW (104B)" data-val="53.3">53.3</td></tr>
<tr><td data-field="System" data-val="Mac Studio M5 Ultra 256GB">Mac Studio M5 Ultra 256GB</td><td class="col-num" data-field="System Cost (k$)" data-val="9.5">9.5</td><td class="col-num" data-field="Memory (GB)" data-val="256">256</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="1200">1,200</td><td class="col-num" data-field="Power (W)" data-val="300">300</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="44">44</td><td class="col-num" data-field="t/k$ (32B)" data-val="4.63">4.63</td><td class="col-num" data-field="t/kW (32B)" data-val="146.7">146.7</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="25">25</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.63">2.63</td><td class="col-num" data-field="t/kW (70B)" data-val="83.3">83.3</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="16">16</td><td class="col-num" data-field="t/k$ (104B)" data-val="1.68">1.68</td><td class="col-num" data-field="t/kW (104B)" data-val="53.3">53.3</td></tr>
<tr><td data-field="System" data-val="Mac Studio M5 Max 128GB">Mac Studio M5 Max 128GB</td><td class="col-num" data-field="System Cost (k$)" data-val="4.0">4.0</td><td class="col-num" data-field="Memory (GB)" data-val="128">128</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="614">614</td><td class="col-num" data-field="Power (W)" data-val="160">160</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="35">35</td><td class="col-num" data-field="t/k$ (32B)" data-val="8.75">8.75</td><td class="col-num" data-field="t/kW (32B)" data-val="218.8">218.8</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="20">20</td><td class="col-num" data-field="t/k$ (70B)" data-val="5.0">5.00</td><td class="col-num" data-field="t/kW (70B)" data-val="125.0">125.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="7">7</td><td class="col-num" data-field="t/k$ (104B)" data-val="1.75">1.75</td><td class="col-num" data-field="t/kW (104B)" data-val="43.8">43.8</td></tr>
<tr><td data-field="System" data-val="Mac Studio M3 Ultra 96GB">Mac Studio M3 Ultra 96GB</td><td class="col-num" data-field="System Cost (k$)" data-val="5.3">5.3</td><td class="col-num" data-field="Memory (GB)" data-val="96">96</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="819">819</td><td class="col-num" data-field="Power (W)" data-val="280">280</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="30">30</td><td class="col-num" data-field="t/k$ (32B)" data-val="5.66">5.66</td><td class="col-num" data-field="t/kW (32B)" data-val="107.1">107.1</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="17">17</td><td class="col-num" data-field="t/k$ (70B)" data-val="3.21">3.21</td><td class="col-num" data-field="t/kW (70B)" data-val="60.7">60.7</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="11">11</td><td class="col-num" data-field="t/k$ (104B)" data-val="2.08">2.08</td><td class="col-num" data-field="t/kW (104B)" data-val="39.3">39.3</td></tr>
<tr><td data-field="System" data-val="Mac Studio M4 Max 128GB">Mac Studio M4 Max 128GB</td><td class="col-num" data-field="System Cost (k$)" data-val="3.5">3.5</td><td class="col-num" data-field="Memory (GB)" data-val="128">128</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="546">546</td><td class="col-num" data-field="Power (W)" data-val="180">180</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="20">20</td><td class="col-num" data-field="t/k$ (32B)" data-val="5.72">5.72</td><td class="col-num" data-field="t/kW (32B)" data-val="111.1">111.1</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="9">9</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.57">2.57</td><td class="col-num" data-field="t/kW (70B)" data-val="50.0">50.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="6">6</td><td class="col-num" data-field="t/k$ (104B)" data-val="1.71">1.71</td><td class="col-num" data-field="t/kW (104B)" data-val="33.3">33.3</td></tr>
<tr><td data-field="System" data-val="Mac Mini Pro">Mac Mini Pro</td><td class="col-num" data-field="System Cost (k$)" data-val="2.0">2.0</td><td class="col-num" data-field="Memory (GB)" data-val="64">64</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="200">200</td><td class="col-num" data-field="Power (W)" data-val="85">85</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="12">12</td><td class="col-num" data-field="t/k$ (32B)" data-val="6.0">6.00</td><td class="col-num" data-field="t/kW (32B)" data-val="141.2">141.2</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="4">4</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.0">2.00</td><td class="col-num" data-field="t/kW (70B)" data-val="47.1">47.1</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="2">2</td><td class="col-num" data-field="t/k$ (104B)" data-val="1.0">1.00</td><td class="col-num" data-field="t/kW (104B)" data-val="23.5">23.5</td></tr>
<tr><td data-field="System" data-val="Dual RTX 4090">Dual RTX 4090</td><td class="col-num" data-field="System Cost (k$)" data-val="6.4">6.4</td><td class="col-num" data-field="Memory (GB)" data-val="48">48</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="1008">1,008</td><td class="col-num" data-field="Power (W)" data-val="1200">1,200</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="65">65</td><td class="col-num" data-field="t/k$ (32B)" data-val="10.16">10.16</td><td class="col-num" data-field="t/kW (32B)" data-val="54.2">54.2</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="26">26</td><td class="col-num" data-field="t/k$ (70B)" data-val="4.06">4.06</td><td class="col-num" data-field="t/kW (70B)" data-val="21.7">21.7</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="1.5">1.5</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.23">0.23</td><td class="col-num" data-field="t/kW (104B)" data-val="1.2">1.2</td></tr>
<tr><td data-field="System" data-val="Triple RTX 3090">Triple RTX 3090</td><td class="col-num" data-field="System Cost (k$)" data-val="5.5">5.5</td><td class="col-num" data-field="Memory (GB)" data-val="72">72</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="936">936</td><td class="col-num" data-field="Power (W)" data-val="1400">1,400</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="40">40</td><td class="col-num" data-field="t/k$ (32B)" data-val="7.27">7.27</td><td class="col-num" data-field="t/kW (32B)" data-val="28.6">28.6</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="20">20</td><td class="col-num" data-field="t/k$ (70B)" data-val="3.64">3.64</td><td class="col-num" data-field="t/kW (70B)" data-val="14.3">14.3</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="12">12</td><td class="col-num" data-field="t/k$ (104B)" data-val="2.18">2.18</td><td class="col-num" data-field="t/kW (104B)" data-val="8.6">8.6</td></tr>
<tr><td data-field="System" data-val="Quad 4060 Ti 16GB">Quad 4060 Ti 16GB</td><td class="col-num" data-field="System Cost (k$)" data-val="3.4">3.4</td><td class="col-num" data-field="Memory (GB)" data-val="64">64</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="288">288</td><td class="col-num" data-field="Power (W)" data-val="800">800</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="18">18</td><td class="col-num" data-field="t/k$ (32B)" data-val="5.3">5.30</td><td class="col-num" data-field="t/kW (32B)" data-val="22.5">22.5</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="8">8</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.36">2.36</td><td class="col-num" data-field="t/kW (70B)" data-val="10.0">10.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="4">4</td><td class="col-num" data-field="t/k$ (104B)" data-val="1.18">1.18</td><td class="col-num" data-field="t/kW (104B)" data-val="5.0">5.0</td></tr>
<tr><td data-field="System" data-val="Dual RTX 3090">Dual RTX 3090</td><td class="col-num" data-field="System Cost (k$)" data-val="4.2">4.2</td><td class="col-num" data-field="Memory (GB)" data-val="48">48</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="936">936</td><td class="col-num" data-field="Power (W)" data-val="900">900</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="45">45</td><td class="col-num" data-field="t/k$ (32B)" data-val="10.71">10.71</td><td class="col-num" data-field="t/kW (32B)" data-val="50.0">50.0</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="18">18</td><td class="col-num" data-field="t/k$ (70B)" data-val="4.29">4.29</td><td class="col-num" data-field="t/kW (70B)" data-val="20.0">20.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="1.5">1.5</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.36">0.36</td><td class="col-num" data-field="t/kW (104B)" data-val="1.7">1.7</td></tr>
<tr><td data-field="System" data-val="Single RTX 5090">Single RTX 5090</td><td class="col-num" data-field="System Cost (k$)" data-val="6.6">6.6</td><td class="col-num" data-field="Memory (GB)" data-val="32">32</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="1792">1,792</td><td class="col-num" data-field="Power (W)" data-val="750">750</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="55">55</td><td class="col-num" data-field="t/k$ (32B)" data-val="8.33">8.33</td><td class="col-num" data-field="t/kW (32B)" data-val="73.3">73.3</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="30">30</td><td class="col-num" data-field="t/k$ (70B)" data-val="4.55">4.55</td><td class="col-num" data-field="t/kW (70B)" data-val="40.0">40.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="1.5">1.5</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.23">0.23</td><td class="col-num" data-field="t/kW (104B)" data-val="2.0">2.0</td></tr>
<tr><td data-field="System" data-val="Dual RTX 5090">Dual RTX 5090</td><td class="col-num" data-field="System Cost (k$)" data-val="11.6">11.6</td><td class="col-num" data-field="Memory (GB)" data-val="64">64</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="3584">3,584</td><td class="col-num" data-field="Power (W)" data-val="1350">1,350</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="90">90</td><td class="col-num" data-field="t/k$ (32B)" data-val="7.76">7.76</td><td class="col-num" data-field="t/kW (32B)" data-val="66.7">66.7</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="33">33</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.84">2.84</td><td class="col-num" data-field="t/kW (70B)" data-val="24.4">24.4</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="8">8</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.69">0.69</td><td class="col-num" data-field="t/kW (104B)" data-val="5.9">5.9</td></tr>
<tr><td data-field="System" data-val="Ryzen AI Max+ 395">Ryzen AI Max+ 395</td><td class="col-num" data-field="System Cost (k$)" data-val="3.65">3.6</td><td class="col-num" data-field="Memory (GB)" data-val="128">128</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="270">270</td><td class="col-num" data-field="Power (W)" data-val="120">120</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="15">15</td><td class="col-num" data-field="t/k$ (32B)" data-val="4.11">4.11</td><td class="col-num" data-field="t/kW (32B)" data-val="125.0">125.0</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="5">5</td><td class="col-num" data-field="t/k$ (70B)" data-val="1.37">1.37</td><td class="col-num" data-field="t/kW (70B)" data-val="41.7">41.7</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="3.5">3.5</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.96">0.96</td><td class="col-num" data-field="t/kW (104B)" data-val="29.2">29.2</td></tr>
<tr><td data-field="System" data-val="Single RTX 4090">Single RTX 4090</td><td class="col-num" data-field="System Cost (k$)" data-val="4.0">4.0</td><td class="col-num" data-field="Memory (GB)" data-val="24">24</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="1008">1,008</td><td class="col-num" data-field="Power (W)" data-val="750">750</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="50">50</td><td class="col-num" data-field="t/k$ (32B)" data-val="12.5">12.50</td><td class="col-num" data-field="t/kW (32B)" data-val="66.7">66.7</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="4">4</td><td class="col-num" data-field="t/k$ (70B)" data-val="1.0">1.00</td><td class="col-num" data-field="t/kW (70B)" data-val="5.3">5.3</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="1">1</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.25">0.25</td><td class="col-num" data-field="t/kW (104B)" data-val="1.3">1.3</td></tr>
<tr><td data-field="System" data-val="Tiiny AI Pocket Lab">Tiiny AI Pocket Lab</td><td class="col-num" data-field="System Cost (k$)" data-val="2.0">2.0</td><td class="col-num" data-field="Memory (GB)" data-val="80">80</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="205">205</td><td class="col-num" data-field="Power (W)" data-val="65">65</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="14">14</td><td class="col-num" data-field="t/k$ (32B)" data-val="7.0">7.00</td><td class="col-num" data-field="t/kW (32B)" data-val="215.4">215.4</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="6">6</td><td class="col-num" data-field="t/k$ (70B)" data-val="3.0">3.00</td><td class="col-num" data-field="t/kW (70B)" data-val="92.3">92.3</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="4.5">4.5</td><td class="col-num" data-field="t/k$ (104B)" data-val="2.25">2.25</td><td class="col-num" data-field="t/kW (104B)" data-val="69.2">69.2</td></tr>
<tr><td data-field="System" data-val="NVIDIA DGX Spark">NVIDIA DGX Spark</td><td class="col-num" data-field="System Cost (k$)" data-val="4.7">4.7</td><td class="col-num" data-field="Memory (GB)" data-val="128">128</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="273">273</td><td class="col-num" data-field="Power (W)" data-val="170">170</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="18">18</td><td class="col-num" data-field="t/k$ (32B)" data-val="3.83">3.83</td><td class="col-num" data-field="t/kW (32B)" data-val="105.9">105.9</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="5">5</td><td class="col-num" data-field="t/k$ (70B)" data-val="1.06">1.06</td><td class="col-num" data-field="t/kW (70B)" data-val="29.4">29.4</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="3.5">3.5</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.74">0.74</td><td class="col-num" data-field="t/kW (104B)" data-val="20.6">20.6</td></tr>
<tr><td data-field="System" data-val="Quadro RTX 8000 48GB">Quadro RTX 8000 48GB</td><td class="col-num" data-field="System Cost (k$)" data-val="11.6">11.6</td><td class="col-num" data-field="Memory (GB)" data-val="48">48</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="672">672</td><td class="col-num" data-field="Power (W)" data-val="260">260</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="28">28</td><td class="col-num" data-field="t/k$ (32B)" data-val="2.41">2.41</td><td class="col-num" data-field="t/kW (32B)" data-val="107.7">107.7</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="11">11</td><td class="col-num" data-field="t/k$ (70B)" data-val="0.95">0.95</td><td class="col-num" data-field="t/kW (70B)" data-val="42.3">42.3</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="1.8">1.8</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.16">0.16</td><td class="col-num" data-field="t/kW (104B)" data-val="6.9">6.9</td></tr>
<tr><td data-field="System" data-val="RTX PRO 6000 Blackwell 96GB">RTX PRO 6000 Blackwell 96GB</td><td class="col-num" data-field="System Cost (k$)" data-val="14.1">14.1</td><td class="col-num" data-field="Memory (GB)" data-val="96">96</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="1790">1,790</td><td class="col-num" data-field="Power (W)" data-val="800">800</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="55">55</td><td class="col-num" data-field="t/k$ (32B)" data-val="3.9">3.90</td><td class="col-num" data-field="t/kW (32B)" data-val="68.8">68.8</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="32">32</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.27">2.27</td><td class="col-num" data-field="t/kW (70B)" data-val="40.0">40.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="10">10</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.71">0.71</td><td class="col-num" data-field="t/kW (104B)" data-val="12.5">12.5</td></tr>
<tr><td data-field="System" data-val="AMD Radeon Pro W7900">AMD Radeon Pro W7900</td><td class="col-num" data-field="System Cost (k$)" data-val="5.1">5.1</td><td class="col-num" data-field="Memory (GB)" data-val="48">48</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="864">864</td><td class="col-num" data-field="Power (W)" data-val="295">295</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="31">31</td><td class="col-num" data-field="t/k$ (32B)" data-val="6.08">6.08</td><td class="col-num" data-field="t/kW (32B)" data-val="105.1">105.1</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="12.5">12.5</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.45">2.45</td><td class="col-num" data-field="t/kW (70B)" data-val="42.4">42.4</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="2.0">2.0</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.39">0.39</td><td class="col-num" data-field="t/kW (104B)" data-val="6.8">6.8</td></tr>
<tr><td data-field="System" data-val="AMD Instinct MI210 64GB">AMD Instinct MI210 64GB</td><td class="col-num" data-field="System Cost (k$)" data-val="7.3">7.3</td><td class="col-num" data-field="Memory (GB)" data-val="64">64</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="1600">1,600</td><td class="col-num" data-field="Power (W)" data-val="300">300</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="44">44</td><td class="col-num" data-field="t/k$ (32B)" data-val="6.03">6.03</td><td class="col-num" data-field="t/kW (32B)" data-val="146.7">146.7</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="21">21</td><td class="col-num" data-field="t/k$ (70B)" data-val="2.88">2.88</td><td class="col-num" data-field="t/kW (70B)" data-val="70.0">70.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="5.0">5.0</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.69">0.69</td><td class="col-num" data-field="t/kW (104B)" data-val="16.7">16.7</td></tr>
<tr><td data-field="System" data-val="AMD Radeon Pro W7800">AMD Radeon Pro W7800</td><td class="col-num" data-field="System Cost (k$)" data-val="4.83">4.8</td><td class="col-num" data-field="Memory (GB)" data-val="32">32</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="576">576</td><td class="col-num" data-field="Power (W)" data-val="260">260</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="22">22</td><td class="col-num" data-field="t/k$ (32B)" data-val="4.56">4.56</td><td class="col-num" data-field="t/kW (32B)" data-val="84.6">84.6</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="4">4</td><td class="col-num" data-field="t/k$ (70B)" data-val="0.83">0.83</td><td class="col-num" data-field="t/kW (70B)" data-val="15.4">15.4</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="0.8">0.8</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.17">0.17</td><td class="col-num" data-field="t/kW (104B)" data-val="3.1">3.1</td></tr>
<tr><td data-field="System" data-val="AMD Radeon Pro Duo 32GB">AMD Radeon Pro Duo 32GB</td><td class="col-num" data-field="System Cost (k$)" data-val="2.6">2.6</td><td class="col-num" data-field="Memory (GB)" data-val="32">32</td><td class="col-num" data-field="Bandwidth (GB/s)" data-val="448">448</td><td class="col-num" data-field="Power (W)" data-val="250">250</td><td class="col-num col-gsep" data-field="t/s (32B)" data-val="6">6</td><td class="col-num" data-field="t/k$ (32B)" data-val="2.31">2.31</td><td class="col-num" data-field="t/kW (32B)" data-val="24.0">24.0</td><td class="col-num col-gsep" data-field="t/s (70B)" data-val="1">1</td><td class="col-num" data-field="t/k$ (70B)" data-val="0.38">0.38</td><td class="col-num" data-field="t/kW (70B)" data-val="4.0">4.0</td><td class="col-num col-gsep" data-field="t/s (104B)" data-val="0.2">0.2</td><td class="col-num" data-field="t/k$ (104B)" data-val="0.08">0.08</td><td class="col-num" data-field="t/kW (104B)" data-val="0.8">0.8</td></tr>
</tbody>
</table>
</div>
<div class="methodology">
<h2>Methodology</h2>
<p><strong>Budget cap:</strong> All systems are normalized to complete acquisition cost under a $20,000 ceiling (September 2026 pricing), shown in k$ (thousands USD). The system cost (k$) column is normalized to full local-build/system cost, not raw add-in card MSRP. Discrete workstation GPUs were converted to system pricing with a fixed $1,600 host allowance, while passive datacenter accelerators use a $3,000 server-platform allowance.</p>
<p><strong>September 2026 market refresh (verified street/used pricing):</strong> RTX 5090 32GB new street ~$5,000 (Sep 1, 2026: cheapest US listings $4,930–$5,170, 2.5× the $1,999 MSRP amid the GDDR7 shortage; Tom's Hardware tracker low $4,799), so Single = $5,000 + $1,600 host = $6,600 and Dual = $10,000 + $1,600 = $11,600. Used RTX 4090 ~$2,400 (eBay sold-listing average $2,362 on Sep 5, 2026, range $2,000–$2,541). Used RTX 3090 ~$1,300 (Aug 2026 eBay median $1,275, up ~50% since January on local-AI demand). RTX 4060 Ti 16GB new ~$449. AMD Radeon PRO W7900 ~$3,500 (Sep 2026 lowest-average $3,157); W7800 ~$3,229; used MI210 ~$4,299 + $3,000 server platform. Strix Halo 128GB boxes (Ryzen AI Max+ 395, GMKtec EVO-X2) ~$3,649 — DRAM shortage roughly doubled 128GB mini-PC prices since launch. Apple announced the Mac Studio M5 Max ($2,499 base; 128GB config ~$3,999) and M5 Ultra ($5,499 base with 96GB, +$4,000 for 256GB; 1.2 TB/s bandwidth, shipping Sept 22) on Aug 25, 2026, discontinuing the M4 Max and M3 Ultra; the M5 Ultra 512GB (late October, expected well above $10k) is not yet priced. M5 Max/M5 Ultra throughput is estimated from the 614 GB/s / 1.2 TB/s bandwidth (M5 Max: ~110 t/s 8B, ~20 t/s 70B; M5 Ultra: ~90 t/s 8B at Q4). RTX PRO 6000 Blackwell Workstation 96GB card ~$12,500 (NVIDIA marketplace $13,250 after the Aug 13 raise toward $16,000; street spans $10,499 B&H to $16,999 Newegg, used $9,500–$11,000), so system = $12,500 + $1,600 = $14,100. NVIDIA DGX Spark $4,699. Quadro RTX 8000 48GB reflects new-old-stock pricing.</p>
<p><strong>Vendor-sourced fields:</strong> VRAM, memory bandwidth, and board power use vendor-published specs where available: RTX 5090 (32GB, 1,792 GB/s, 575W), RTX PRO 6000 Blackwell (96GB ECC GDDR7, 1,790 GB/s, 600W), Mac Studio M3 Ultra (96GB unified, 819 GB/s), and AMD product pages for W7800, W7900, and MI210.</p>
<p><strong>Estimated fields:</strong> LLM throughput and ratio values are model-side inference estimates (Q4_K_M llama.cpp class) based on memory capacity, memory bandwidth, architecture class, and software maturity — anchored to community 2026 benchmarks (RTX 5090: ~145 t/s 8B, ~55 t/s 32B, ~38 t/s 70B tight-fit; Dual RTX 5090: ~33 t/s 70B Q4 tensor-parallel; RTX PRO 6000: ~32 t/s 70B, 96GB holds 120B-class) rather than direct apples-to-apples runs on identical hosts. The 70B figure on the Single RTX 5090 reflects a near-full 32GB fit with minimal context headroom.</p>
<p><strong>Ratio columns (grouped at the end):</strong> The nine t/* columns are the cross product of the three reference models {32B, 70B, 104B} and the three units {t/s, t/k$, t/kW}. t/s = raw throughput; t/k$ = t/s per $1,000 of system cost; t/kW = t/s per kilowatt of total system power.</p>
</div>
<div class="footer">
<p>Local LLM Hardware Heatmap v2.0.0 © 2026 Dan Micsa, PhD (dmicsa@gmail.com)</p>
<p>Data vintage: September 11, 2026 · Generated on 2026-09-11</p>
</div>
<script>
const COLUMN_RANGES = {
'System Cost (k$)': { min: 1.5, max: 20.0, reverse: true },
'Memory (GB)': { min: 24, max: 256, reverse: false },
'Bandwidth (GB/s)': { min: 200, max: 3584, reverse: false },
'Power (W)': { min: 65, max: 1400, reverse: true },
't/s (32B)': { min: 6, max: 90, reverse: false },
't/k$ (32B)': { min: 2.31, max: 12.5, reverse: false },
't/kW (32B)': { min: 22.5, max: 218.8, reverse: false },
't/s (70B)': { min: 1, max: 33, reverse: false },
't/k$ (70B)': { min: 0.38, max: 5.0, reverse: false },
't/kW (70B)': { min: 4.0, max: 125.0, reverse: false },
't/s (104B)': { min: 0.2, max: 16, reverse: false },
't/k$ (104B)': { min: 0.08, max: 2.91, reverse: false },
't/kW (104B)': { min: 0.8, max: 69.2, reverse: false }
};
function updateTableColors() {
const table = document.getElementById('summaryTable');
if (!table) return;
if (typeof getPaletteColor !== 'function' || typeof applyBackgroundWithContrast !== 'function') return;
const cells = table.querySelectorAll('tbody td[data-field][data-val]');
cells.forEach(cell => {
const field = cell.getAttribute('data-field');
const rawVal = parseFloat(cell.getAttribute('data-val'));
const range = COLUMN_RANGES[field];
if (!field || Number.isNaN(rawVal) || !range) return;
const rgb = getPaletteColor(rawVal, range.min, range.max, range.reverse);
applyBackgroundWithContrast(cell, rgb);
});
}
(function() {
const previousSetPalette = window.setPalette;
if (typeof previousSetPalette === 'function') {
window.setPalette = function(name) {
previousSetPalette(name);
updateTableColors();
};
}
const previousRenderTable = window.renderTable;
window.renderTable = function() {
if (typeof previousRenderTable === 'function') {
previousRenderTable();
}
updateTableColors();
};
})();
</script>
</body>
</html>