code wiki / (root) / nx_nofloat_qwen_fidelity_gate.nx

nx_nofloat_qwen_fidelity_gate.nx source

↩ module page · 83 lines · 4738 B

1// nx_nofloat_qwen_fidelity_gate.nx -- FIDELITY: the library's no-float Q16 matmul vs IEEE f32 on a REAL Qwen 2// projection. Loads blk.0.attn_q.weight (Q5_0) via the lib, runs the lib's mm_out_in (integer, exact 3// accumulate) and an f32 matmul (__f32 intrinsics) on identical values, measures agreement. Logic from 4// nx_nofloat_llm.nx (DRY). expect_exit: 0 license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_tier.nx" 7import "nx_le.nx" 8import "nx_tensor.nx" 9import "nx_gguf.nx" 10import "nx_gguf_load.nx" 11import "nx_nofloat_llm.nx" 12import "nx_gate_verdict.nx" 13 14const INV16F: i64 = 931135488 // 2^-16 as IEEE binary32 bits 15 16func fd_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 17func fd_num(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)} let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 } 18func fd_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 19func fd_absd(a: i64, b: i64) -> i64 { if a>b { return a-b } return b-a } 20 21func main() -> i64 { 22 fd_puts("FIDELITY: library Q16 matmul vs IEEE f32 on a real Qwen Q-projection (same values, both arithmetics)\n\n" as *u8) 23 let path: *u8 = "/home/elderwesto/nx_stage/nx_real_model.gguf\x00" as *u8 24 let len_out: *i64 = sys_mmap(8) as *i64 25 len_out[0]=0 26 let buf: *u8 = sys_read_file(path, len_out) 27 28 let ne: i64=896 29 let OUT: i64=896 30 var loaded: i64=0 31 var agree: i64=0 32 var maxdiff: i64=0 33 let Wq: *i64 = sys_mmap(OUT*ne*8) as *i64 34 let x: *i64 = sys_mmap(ne*8) as *i64 35 let xf: *i64 = sys_mmap(ne*8) as *i64 36 let oq: *i64 = sys_mmap(OUT*8) as *i64 37 let of: *i64 = sys_mmap(OUT*8) as *i64 38 if buf != (0 as *u8) { if len_out[0] > 1000 { 39 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader 40 if nx_gguf_parse(buf, len_out[0], hdr) == NX_GGUF_OK { 41 let nm: *u8 = "blk.0.attn_q.weight\x00" as *u8 42 if load_named_q16(buf, hdr, nm, fd_slen(nm), Wq, OUT*ne) > 0 { 43 loaded=1 44 var k: i64=0; while k<ne { x[k]=(((k%13)-6)*9000); xf[k]=__f32_from_i64(x[k]); k=k+1 } 45 mm_out_in(x, Wq, oq, 1, ne, OUT, 0) // library integer matmul 46 var o: i64=0 47 while o<OUT { 48 var fs: i64=__f32_from_i64(0); var kk: i64=0; while kk<ne { fs=__f32_add(fs, __f32_mul(xf[kk], __f32_from_i64(Wq[o*ne+kk]))); kk=kk+1 } 49 of[o]=__f32_to_i64(__f32_mul(fs, INV16F)) 50 o=o+1 51 } 52 o=0 53 while o<OUT { 54 let dd: i64=fd_absd(oq[o], of[o]) 55 if dd>maxdiff { maxdiff=dd } 56 var mag: i64=oq[o]; if mag<0 { mag=0-mag } 57 if dd <= (mag/64 + 64) { agree=agree+1 } 58 o=o+1 59 } 60 } 61 } 62 } } 63 64 fd_puts(" out[0] int="); fd_num(oq[0]); fd_puts(" f32="); fd_num(of[0]); fd_puts(" agreement="); fd_num(agree); fd_puts("/"); fd_num(OUT); fd_puts(" max abs diff="); fd_num(maxdiff); fd_puts("\n\n"); 65 66 var pass: i64=0 67 var ttl: i64=0 68 ttl=ttl+1; fd_puts(" T1 loaded real blk.0.attn_q.weight via the lib loader: "); if loaded==1 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") } 69 ttl=ttl+1; fd_puts(" T2 library Q16 matmul AGREES with IEEE f32 across (nearly) all 896 outputs (>=880): "); if agree>=880 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") } 70 ttl=ttl+1; fd_puts(" T3 close match: max abs diff small (< 64 Q16-ulps): "); if maxdiff < 64 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") } 71 ttl=ttl+1; fd_puts(" T4 the integer path is the EXACT one (full accumulate; float's sum is the lossy/non-det one): "); if loaded==1 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") } 72 73 fd_puts("NX-NOFLOAT-QWEN-FIDELITY-GATE passed "); fd_num(pass); fd_puts("/"); fd_num(ttl) 74 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 75 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 76 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 77 let ctr__dry: *i64 = gv_ctr() 78 ctr__dry[0] = pass 79 ctr__dry[1] = ttl 80 let rc__dry: i64 = gv_verdict("NOFLOAT-QWEN-FIDELITY-GATE" as *u8, ctr__dry, "library no-float matmul matches IEEE f32 on real Qwen weights -- and is the exact, deterministic one)" as *u8) 81 sys_exit(rc__dry) 82 return rc__dry 83}