gpu-mesh

JSON

rev 1  |  russell  |  1780841003135  |  JSON

empty
rev 1
tt1.. gpu-mesh.rst — public wiki page paste source; remarkbox assigns slug
2.. CC0 / public domain content; bench data from 2026-06-06/07
3.. foxhop · agent blackops
4 
53-GPU Mesh — Hardware, Benchmarks, & Coexistence
6==================================================
7 
8| **Status:** 3-node mesh live on port 8320 (BEND)
9| **Wire substrate:** lumbda's ``bend`` primitive (lumbda.com_)
10| **Coordinator pattern:** ``coordinator-mesh.py`` — cost-routed fan-out
11 
12.. _lumbda.com: https://lumbda.com/bend.html
13 
14----
15 
16.. contents::
17   :depth: 2
18   :local:
19 
20----
21 
22What this page tracks
23---------------------
24 
25Our 3-GPU foxhop pool serves dual duty: research workloads (lumbda's
26bend primitive dispatches CUDA work over our wire protocol) & LLM
27inference (qwen, hermes, speech, ollama). Both classes coexist on our
28same hardware with VRAM partitioning per node. This page documents our
29hardware, our published benchmarks, & our coexistence pattern.
30 
31For our ecdsa research context that drove our first 18-cell bench
32(refined Bernstein-Yang point-add variant sweep at p=251), see
33`foxhop secp256k1 lever sweep <https://www.foxhop.net/5243e3fe-6146-11f1-8ce9-04
 >0140774501/secp256k1-point-addition-challenge-with-lumbda-attack>`__.
34 
35----
36 
37Hardware
38--------
39 
40Three Nvidia GPUs across three hosts on our foxhop LAN:
41 
42========================  ===============  ====  =========  ====================
 >========
43host                      GPU              VRAM  arch       role
44========================  ===============  ====  =========  ====================
 >========
45``3090-ai.foxhop.net``    RTX 3090         24 GB sm_86      bend mesh + Hermes L
 >LM
46``ai.foxhop.net``         RTX 4090         24 GB sm_89      bend mesh + qwen LLM
 > + speech TTS
47``cammy.foxhop.net``      Tesla P40        24 GB sm_61      bend mesh + ollama (
 >qwen3-vl)
48========================  ===============  ====  =========  ====================
 >========
49 
5072 GB combined VRAM across our pool. Pascal (sm_61) P40 lacks our
51newer architectures' reduced-precision tensor units, so it runs ~2×
52slower than Ampere 3090 on identical workloads — useful as a third
53concurrent stream rather than a faster replacement for either Ampere
54card.
55 
56----
57 
58Port 8320 — BEND
59----------------
60 
61Our pool serves bend dispatches on port **8320** across every host.
62Mnemonic — 8320 spells BEND:
63 
64::
65 
66    8 ~= B (implied infinity B flattened; bake a cake; baby & me)
67    3 ~= E (backward)
68    2 ~= N (pivoted 90 degrees)
69    0 ~= D (flattened)
70 
71Each node runs ``gpu-worker.lsp`` (lumbda's reference CUDA worker)
72against demo_ops, blake3-fanout, radix-sort, & our other registered
73CUDA forms. Clients reach our mesh via lumbda's ``bend`` primitive over
74TCP, S-expression wire format, & per-form binary protocols (``BSHK``
75for shake fanout, ``BSCP`` for batched scalar mul, ``BSRT`` for radix
76sort, etc. — see lumbda.com_/bend for our form catalog).
77 
78----
79 
80Benchmark — 6 variants × 3 hosts at p=251
81------------------------------------------
82 
83Our first published benchmark dispatched 6 ecdsa point-add variants
84(Bernstein-Yang lever sweep) at p=251 to every host through our wire
85protocol. Σ Toffoli matches **byte-for-byte** across hosts on identical
86ops.bin inputs — proves our distributed mesh runs from one canonical
87lumbda environment.
88 
89GPU wall (ms/batch) at 1024 shots, lower wins:
90 
91========================  ============  =========  =========  =========
92variant                   Σ Tof / shot  3090 ms    4090 ms    P40 ms
93========================  ============  =========  =========  =========
94v-fermat-schoolbook       167 984       290.1      149.2      531.7
95v-fermat-solinas           84 208       151.4       86.3      288.6
96v-by-text-schoolbook       45 104        68.4       39.3      131.8
97v-by-text-solinas          40 176        60.6       35.6      119.3
98v-by-ref-schoolbook        29 104        32.5       25.7       85.1
99v-by-ref-solinas           24 176        26.5       22.0       64.0
100========================  ============  =========  =========  =========
101 
102Per-architecture pattern reads cleanly:
103 
104- **Ampere 4090 (sm_89)** runs 1.94× faster than 3090 (sm_86) on our
105  heaviest circuit, shrinking to 1.20× on our lightest. Larger circuits
106  amortize kernel-launch overhead; smaller circuits hit our GPU's
107  overhead floor.
108- **Pascal P40 (sm_61)** runs ~2× slower than 3090 across our entire
109  variant chain. Older arch, lower base clock, no reduced-precision
110  tensor units; still serves a third concurrent stream as our candidate
111  queue deepens.
112 
113GPU wall scales linearly with Σ Toffoli — no kernel-level surprise.
114Cross-host Σ Toffoli identity confirms bit-exact reproducibility across
115our pool.
116 
117----
118 
119Coordinator fan-out
120-------------------
121 
122``ecdsa/scripts/coordinator-mesh.py`` dispatches candidates across our
1233-node mesh concurrently. Greedy bin-pack by predicted Σ Toffoli; each
124candidate lands on whichever node's finish time after add stays lowest.
125Per-host speed factor derived from our bench above:
126 
127- 3090: factor 1.00 (baseline)
128- 4090: factor 0.51
129- P40:  factor 1.84
130 
131One ThreadPoolExecutor worker per node fires concurrently against our
132wire protocol. Each node serializes its own queue (workers do not
133multiplex requests cleanly inside one CUDA context).
134 
135First-run finding: cost model based only on (predicted Σ Toffoli ×
136host factor) misses our per-request overhead floor (~600 ms on cammy
137for demo_ops process spawn + Pascal CUDA init). Refinement options: a
138per-host startup constant plus a Σ Toffoli linear term, fit per node
139from our sweep history. Coordinator runs correctly today; schedule
140shape needs calibration, not algorithmic change.
141 
142----
143 
144Coexistence with LLM services
145------------------------------
146 
147Each host on our pool carries an LLM service alongside its bend worker
148slot. Bend workloads launch on demand; LLMs hold VRAM persistently. We
149partition VRAM per host:
150 
151================ ================ ==============================================
 >=============
152host             LLM workload     VRAM partition
153================ ================ ==============================================
 >=============
1543090-ai          Hermes vllm      Hermes-3-Llama-3.1-8B-FP8-Dynamic, KV 82 K tok
 >ens, 22.7 GB
155ai (4090)        qwen llama.cpp   Qwen3.6-27B-UD-Q4_K_XL.gguf, ``-c 32768`` KV, 
 >16.8 GB
156ai (4090)        speech F5-TTS    f5-tts (336M params), lazy load, 1.3-3.3 GB
157cammy (P40)      ollama qwen3-vl  qwen3-vl:8b, lazy load on first request
158================ ================ ==============================================
 >=============
159 
160VRAM partition decisions:
161 
162- 4090 carries both qwen LLM & speech TTS. qwen LLM eats 16.8 GB; F5-TTS
163  needs ~3 GB headroom for inference spikes. Reduced qwen context from
164  ``-c 65536`` to ``-c 32768`` (frees ~3.7 GB) so F5-TTS sees enough
165  inference room without OOM. ``tts-1-qwen`` registration in speech.py
166  stays disabled (qwen3-tts at 1.7B params claimed 6-7 GB more than
167  F5-TTS at 336M).
168- 3090 carries Hermes only — no contention since bench workloads run
169  on demand & release VRAM at request boundary.
170- P40 carries ollama for qwen3-vl vision/language requests. Lazy load
171  pattern (ollama only holds VRAM while serving a request).
172 
173When our 3-GPU pool runs a bend benchmark, LLM workloads stay live;
174bench transient memory drops slot into available headroom per host.
175Long-running bench sweeps (e.g., variant emission at production scale)
176displace an LLM cleanly when needed — ``systemctl stop llama-qwen``
177frees 16.8 GB on demand.
178 
179----
180 
181Caddy ingress
182-------------
183 
184Public access routes through ``proxy.unturf.com``. Per-service Caddy
185blocks gate behavior:
186 
187==================================  ============================================
 >=======
188ingress                             gate
189==================================  ============================================
 >=======
190``qwen.ai.unturf.com``              Bearer token (``sk-unturf-*`` or ``sk-friend
 >s-*``);
191                                    foxhop LAN egress (138.207.194.52) bypasses 
 >key.
192``hermes.ai.unturf.com``            (TBD per workload)
193``speech.ai.unturf.com``            Rate-limited reverse_proxy; foxhop LAN bypas
 >ses
194                                    rate limit.
195==================================  ============================================
 >=======
196 
197Bend wire on port 8320 stays LAN-only; we do **not** expose our bend
198mesh outside our foxhop network. External research workloads that want
199our pool's throughput route through a foxhop-egress relay.
200 
201----
202 
203Pool capacity math
204------------------
205 
206Coordinator at saturation. Three nodes scoring three different
207candidates simultaneously closes our sequential 6-variant 3090 wall
208(629 ms) into a parallel one. Refined-Solinas runs in ~25 ms on 3090
209+ 22 ms on 4090 + 64 ms on P40 — P40 lags but contributes a third
210concurrent stream as our candidate queue deepens. Per-host routing
211(heavy circuits to faster GPUs, light circuits to P40) maximizes
212aggregate dispatch.
213 
214Pool throughput grows with our candidate generation rate — see
215ecdsa.rst's "Why CPU Produces & GPU Scores" section for our
216substrate-level math on candidate-emit vs candidate-score throughput.
217 
218----
219 
220Related pages
221-------------
222 
223- `foxhop secp256k1 lever sweep <https://www.foxhop.net/5243e3fe-6146-11f1-8ce9-
 >040140774501/secp256k1-point-addition-challenge-with-lumbda-attack>`__ — researc
 >h context;
224  full 18-cell cross-scale Pareto sweep; lumbda emit pipeline lift.
225- `lumbda.com/bend <https://lumbda.com/bend.html>`__ — bend primitive
226  catalog; wire protocol; CUDA form list.
227 
228----
229 
230| *Updated 2026-06-07.*