code wiki / _hdl_build / nx_nofloat_train.nx

nx_nofloat_train.nx source

↩ module page · 83 lines · 6578 B

1// nx_nofloat_train.nx -- SOVEREIGN NO-FLOAT TRAINING CORE (ledger #1, the biggest gap). Integer Q16 fixed-point 2// gradient descent: forward (pred=w*x+b), loss (sum err^2), backprop (dw=err*x, db=err), SGD update -- 100% integer, 3// no float. Learning is DEMONSTRATED: loss drops + weights converge to the true params. The training analog of the 4// no-float inference moat. 5// EXCEED vs Unsloth (eff_unsloth.raw) / MLPerf (bt_mlperf.raw): training is DETERMINISTIC/bit-exact reproducible 6// (same weights every run, on any hardware) -- float/CUDA training is NOT (nondeterministic kernels, hardware drift). 7// SOVEREIGN (no CUDA/PyTorch/GPU), runs on any CPU. BEHIND: raw speed (no GPU kernels) + scale (tiny vs billions). 8// T1 loss DECREASED (learning happened). T2 weights CONVERGED to truth (w~2.0, b~1.0 in Q16). 9// T3 (EXCEED) DETERMINISM: two training runs -> BIT-IDENTICAL weights. T4 final loss is small. 10// expect_exit: 0 Sovereign: nx_syscalls. 11import "nx_syscalls.nx" 12import "nx_g_puts_lib.nx" 13 14func g_pn(v: i64) -> i64 { let b: *u8=sys_mmap(28); var x: i64=v; if x<0{b[0]=45;sys_write(1,b,1);x=0-x} if x==0{b[0]=48;sys_write(1,b,1);return 0} var d: i64=0; var y: i64=x; while y>0{d=d+1;y=y/10} var i: i64=d-1; y=x; while i>=0{b[i]=(48+(y%10)) as u8;y=y/10;i=i-1} sys_write(1,b,d); return 0 } 15func ck(name: *u8, c: i64) -> i64 { if c==1 { g_puts(" PASS " as *u8) } else { g_puts(" FAIL " as *u8) } g_puts(name); g_puts("\n" as *u8); return c } 16func have(path: *u8) -> i64 { let fd: i64=sys_openat_rd(path); if fd<0 { return 0 } sys_close(fd); return 1 } 17 18const Q: i64 = 16 19const ONE: i64 = 65536 20func fxmul(a: i64, b: i64) -> i64 { return (a*b)>>Q } // Q16 fixed-point multiply 21func iabs(v: i64) -> i64 { if v<0 { return 0-v } return v } 22 23// train a linear model y=w*x+b by integer SGD; returns final weights via wout[0]=w, wout[1]=b, wout[2]=loss0, wout[3]=lossF. 24func train(wout: *i64, epochs: i64, lr: i64) -> i64 { 25 let N: i64 = 8 26 let xs: *i64 = sys_mmap(N*8) as *i64; let ys: *i64 = sys_mmap(N*8) as *i64 27 let w_true: i64 = 2*ONE; let b_true: i64 = 1*ONE 28 var i: i64=0; while i<N { let x: i64 = ((i+1)*ONE)/N; xs[i]=x; ys[i]=fxmul(w_true,x)+b_true; i=i+1 } // x in (0,1], y=2x+1 29 var w: i64=0; var b: i64=0 30 var ep: i64=0; var loss0: i64=0 31 while ep<epochs { 32 var sdw: i64=0; var sdb: i64=0; var loss: i64=0 33 var k: i64=0 34 while k<N { let pred: i64=fxmul(w,xs[k])+b; let err: i64=pred-ys[k]; loss=loss+fxmul(err,err); sdw=sdw+fxmul(err,xs[k]); sdb=sdb+err; k=k+1 } 35 let adw: i64=sdw/N; let adb: i64=sdb/N 36 w = w - fxmul(lr, adw); b = b - fxmul(lr, adb) 37 if ep==0 { loss0=loss } 38 if ep==(epochs-1) { wout[3]=loss } 39 ep=ep+1 40 } 41 wout[0]=w; wout[1]=b; wout[2]=loss0 42 return 0 43} 44 45func main() -> i64 { 46 g_puts("nx_nofloat_train (SOVEREIGN no-float TRAINING: integer Q16 gradient descent; deterministic; vs Unsloth/MLPerf)\n" as *u8) 47 var pass: i64=0; var total: i64=0 48 let lr: i64 = ONE/4 // 0.25 in Q16 49 let EP: i64 = 400 50 let r1: *i64 = sys_mmap(8*8) as *i64; train(r1, EP, lr) 51 g_puts(" trained linear model y=w*x+b on y=2x+1, "); g_pn(EP); g_puts(" epochs (integer Q16 SGD)\n" as *u8) 52 g_puts(" loss[epoch0]="); g_pn(r1[2]); g_puts(" loss[final]="); g_pn(r1[3]); g_puts(" (Q16; lower = learned)\n" as *u8) 53 g_puts(" final w="); g_pn(r1[0]); g_puts(" (~"); g_pn(r1[0]/ONE); g_puts(". true=131072/2.0) final b="); g_pn(r1[1]); g_puts(" (true=65536/1.0)\n" as *u8) 54 55 var t1: i64=0; if r1[3]<r1[2] { t1=1 } 56 pass=pass+ck("T1: LOSS DECREASED epoch0 -> final (learning happened via integer gradient descent)" as *u8, t1); total=total+1 57 var t2: i64=0; if iabs(r1[0]-2*ONE)<(ONE/4) { if iabs(r1[1]-1*ONE)<(ONE/4) { t2=1 } } 58 pass=pass+ck("T2: weights CONVERGED to truth (w~2.0, b~1.0 within 0.25) -- the model actually learned the function" as *u8, t2); total=total+1 59 let r2: *i64 = sys_mmap(8*8) as *i64; train(r2, EP, lr) 60 g_puts(" determinism: run1 w="); g_pn(r1[0]); g_puts(" b="); g_pn(r1[1]); g_puts(" run2 w="); g_pn(r2[0]); g_puts(" b="); g_pn(r2[1]); g_puts("\n" as *u8) 61 var t3: i64=0; if r1[0]==r2[0] { if r1[1]==r2[1] { if r1[3]==r2[3] { t3=1 } } } 62 pass=pass+ck("T3 (EXCEED): DETERMINISTIC -- two training runs give BIT-IDENTICAL weights (Unsloth/CUDA training cannot)" as *u8, t3); total=total+1 63 var t4: i64=0; if r1[3]<(ONE/4) { t4=1 } 64 pass=pass+ck("T4: final loss is small (Q16 < 0.25) -- the fit is good, not just moving" as *u8, t4); total=total+1 65 66 g_puts(" -- vs Unsloth / MLPerf (cite the incumbent's own yardstick, per the research ledger) --\n" as *u8) 67 var grounded: i64=0; if have("knowledge/fetched/eff_unsloth.raw" as *u8)==1 { grounded=grounded+1 } if have("knowledge/fetched/bt_mlperf.raw" as *u8)==1 { grounded=grounded+1 } 68 g_puts(" [EXCEED] DETERMINISM/REPRODUCIBILITY -- bit-exact training (auditable/verifiable ML); Unsloth=float+GPU=nondeterministic (grounded sources="); g_pn(grounded); g_puts("/2)\n" as *u8) 69 g_puts(" [EXCEED] SOVEREIGN -- no CUDA/PyTorch/GPU; runs on any integer CPU (incl this laptop native, no-FPU)\n" as *u8) 70 g_puts(" [BEHIND] RAW SPEED -- Unsloth's optimized GPU kernels are far faster (MEASURE: tokens/s on MLPerf-style task)\n" as *u8) 71 g_puts(" [BEHIND] SCALE -- this is a linear model = the TRAINING CORE; LLM scale (MLP->transformer, billions of params) is the climb\n" as *u8) 72 g_puts(" *** ASTERISK: Unsloth/MLPerf win on speed+scale (the mainstream). Nishi wins reproducible+sovereign training. NOT a speed claim. ***\n" as *u8) 73 g_puts(" >> CLIMB: scale the integer core MLP -> attention -> transformer; add optimized integer kernels; MEASURE tokens/s vs Unsloth + accuracy vs MLPerf.\n" as *u8) 74 75 var okall: i64=0; if pass==total { okall=1 } 76 g_puts("---- nx_nofloat_train: passed "); g_pn(pass); g_puts(" / "); g_pn(total); g_puts(" ----\n" as *u8) 77 if okall==1 { 78 let logf: i64=sys_openat_append("knowledge/status/nofloat_train.log" as *u8, 420) 79 if logf>=0 { let z: i64=sys_write(logf,"NXNOFLOATTRAIN GREEN: integer Q16 SGD training -- loss decreased + weights converged + BIT-IDENTICAL across runs (deterministic, sovereign)\n" as *u8,135); sys_close(logf) } 80 g_puts("verdict=GREEN (sovereign no-float training core: integer SGD learns + converges + is bit-exact reproducible; EXCEED determinism/sovereignty vs Unsloth, honestly behind on speed/scale)\n" as *u8); sys_exit(0); return 0 81 } 82 g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1 83}