code wiki / (root) / nx_nofloat_olmoe_forward_gate.nx

nx_nofloat_olmoe_forward_gate.nx source

↩ module page · 294 lines · 14996 B

1// nx_nofloat_olmoe_forward_gate.nx -- MoE rung 5 (2026-07-15): a COMPLETE OLMoE forward -- 16 stacked 2// real layers + token embedding + final norm + LM head -> a REAL next-token from the real 64-expert model, 3// in deterministic no-float. Lazy per-layer weight load (attn set into REUSED buffers; experts lazy) over 4// the zero-copy mmap. Composes every eaten-debt piece: full-quant dequant, exact scale, real rope base 1e4, 5// sys_map_file, nolmoe_attn/nolmoe_moe (rung 4). Teeth: 6// T1 TOKENIZER round-trip: encode(prompt) -> decode == prompt (our BPE self-consistent on OLMoE's gpt2 vocab) 7// T2 NON-DEGENERATE logits: argmax logit strictly > min logit (the head discriminates, not all-equal) 8// T3 DETERMINISM: the full forward's predicted id + top logit byte-identical on repeat 9// T4 ROUTING ALIVE AT DEPTH: >=2 distinct expert-masks seen across the 16 layers' last-token routing 10// T5 PREDICTION real: a valid non-negative vocab id, decoded + printed (honest: OUR segmentation, uniform 11// Q16 -- HF-canonical BPE + q24 precision + H2H = rung 6, deliberately not claimed here) 12// Requires the OLMoE gguf. Heavy (~1-3 min: 16 layers x lazy dequant + 50304-row head). Return from main. 13// No hw writes (Rule 26). expect_exit: 0 license_tier: ORIGINAL 14import "nx_syscalls.nx" 15import "nx_tier.nx" 16import "nx_le.nx" 17import "nx_tensor.nx" 18import "nx_gguf.nx" 19import "nx_gguf_load.nx" 20import "nx_gguf_meta.nx" 21import "nx_nofloat_llm.nx" 22import "nx_nofloat_tok.nx" 23import "nx_nofloat_arch.nx" 24import "nx_nofloat_olmoe.nx" 25import "nx_gate_verdict.nx" 26 27func of_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 28func of_n(v: i64) -> i64 { 29 var m: i64 = v 30 if m < 0 { of_w("-" as *u8); m = 0 - m } 31 let t: *u8 = sys_mmap(24) 32 var k: i64 = 0 33 if m == 0 { t[0] = 48 as u8; k = 1 } 34 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 35 let o: *u8 = sys_mmap(24) 36 var i: i64 = 0 37 while i < k { o[i] = t[k - 1 - i]; i = i + 1 } 38 sys_write(1, o, k) 39 return 0 40} 41func of_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 42// load blk.L.<suffix> (full 2-D tensor) into out (Q16) 43func of_load_blk(buf: *u8, hdr: *NxGgufHeader, L: i64, suffix: *u8, out: *i64, nvals: i64) -> i64 { 44 let nm: *u8 = sys_mmap(64) 45 build_name(nm, L, suffix) 46 let idx: nx_int = nx_gguf_find_tensor(hdr, nm, of_slen(nm)) 47 if idx < 0 { return 0 - 1 } 48 let ti: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, idx) 49 let hl: *NxGgufHeader = hdr 50 return dequant_to_q16(buf, hl.data_off + ti.offset, ti.ggml_type, nvals, out) 51} 52func of_expbase_blk(buf: *u8, hdr: *NxGgufHeader, L: i64, suffix: *u8, eb: *i64, slot: i64) -> i64 { 53 let nm: *u8 = sys_mmap(64) 54 build_name(nm, L, suffix) 55 let idx: nx_int = nx_gguf_find_tensor(hdr, nm, of_slen(nm)) 56 if idx < 0 { return 0 - 1 } 57 let ti: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, idx) 58 let hl: *NxGgufHeader = hdr 59 eb[slot] = hl.data_off + ti.offset 60 eb[slot + 1] = ti.ggml_type 61 return 0 62} 63 64func main() -> i64 { 65 of_w("=== NX-NOFLOAT-OLMOE-FORWARD -- full 16-layer OLMoE forward -> real next-token (no-float) ===\n" as *u8) 66 let ln: *i64 = sys_mmap(8) as *i64 67 ln[0] = 0 68 let buf: *u8 = sys_map_file("/home/elderwesto/nx_stage/nx_moe_model.gguf" as *u8, ln) 69 if (buf as i64) == 0 { of_w("MODEL ABSENT\n" as *u8); return 1 } 70 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader 71 if nx_gguf_parse(buf, ln[0], hdr) != NX_GGUF_OK { of_w("PARSE FAIL\n" as *u8); return 1 } 72 let hloc: *NxGgufHeader = hdr 73 let cfg: *i64 = sys_mmap(16*8) as *i64 74 let arch: *u8 = sys_mmap(48) 75 if nac_read_config(buf, ln[0], hdr, cfg, arch) != 0 { of_w("ARCH FAIL\n" as *u8); return 1 } 76 let D: i64 = cfg[0] 77 let NL: i64 = cfg[1] 78 let nh: i64 = cfg[2] 79 let hd: i64 = cfg[4] 80 let scale: i64 = cfg[8] 81 let ff: i64 = cfg[7] 82 let E: i64 = 64 83 let K: i64 = 8 84 85 // tokenizer meta 86 let voff: *i64 = sys_mmap(8) as *i64 87 let vty: *i64 = sys_mmap(8) as *i64 88 var mfirst: i64 = 0 89 var nm_c: i64 = 0 90 var vfirst: i64 = 0 91 var vocab: i64 = 0 92 let km: *u8 = "tokenizer.ggml.merges" as *u8 93 let kt: *u8 = "tokenizer.ggml.tokens" as *u8 94 if nx_gguf_meta_find(buf, ln[0], hdr, km, of_slen(km), voff, vty) == NX_GMETA_OK { nm_c = nx_gguf_meta_array_count(buf, voff[0]); mfirst = nx_gguf_meta_array_first_elt_off(buf, voff[0]) } 95 if nx_gguf_meta_find(buf, ln[0], hdr, kt, of_slen(kt), voff, vty) == NX_GMETA_OK { vocab = nx_gguf_meta_array_count(buf, voff[0]); vfirst = nx_gguf_meta_array_first_elt_off(buf, voff[0]) } 96 of_w("[cfg] olmoe D=" as *u8); of_n(D); of_w(" layers=" as *u8); of_n(NL); of_w(" heads=" as *u8); of_n(nh); of_w(" ff=" as *u8); of_n(ff); of_w(" vocab=" as *u8); of_n(vocab); of_w(" base=" as *u8); of_n(cfg[9]); of_w("\n" as *u8) 97 98 // ---- T1: tokenizer round-trip ---- 99 let prompt: *u8 = "The capital of France is" as *u8 100 let plen: i64 = of_slen(prompt) 101 let MAXT: i64 = 32 102 let ids: *i64 = sys_mmap(MAXT*8) as *i64 103 let tokp: *i64 = sys_mmap(512*8) as *i64 104 let tokl: *i64 = sys_mmap(512*8) as *i64 105 let np: i64 = tk_bpe_encode(buf, mfirst, nm_c, vfirst, vocab, prompt, plen, tokp, tokl, ids) 106 of_w("[tok] '" as *u8); of_w(prompt); of_w("' -> " as *u8); of_n(np); of_w(" ids:" as *u8) 107 var ti0: i64 = 0 108 while ti0 < np { of_w(" " as *u8); of_n(ids[ti0]); ti0 = ti0 + 1 } 109 of_w("\n" as *u8) 110 // decode concat == prompt bytes? 111 let rt: *u8 = sys_mmap(256) 112 var rn: i64 = 0 113 var di: i64 = 0 114 while di < np { 115 let off: i64 = tk_decode_off(buf, vfirst, ids[di]) 116 let pl: i64 = nx_gguf_meta_read_string_len(buf, off) 117 let pp: *u8 = nx_gguf_meta_read_string_ptr(buf, off) 118 var b: i64 = 0 119 while b < pl { rt[rn] = pp[b]; rn = rn + 1; b = b + 1 } 120 di = di + 1 121 } 122 // OLMoE gpt2 byte-level: a leading space becomes 0xC4 0xA0; compare the DECODED-BYTE-LEVEL form to the 123 // byte-level-encoded prompt for a fair self-consistency check (encode's own byte map -> decode inverts it). 124 var t1ok: i64 = 1 125 // reconstruct expected byte-level string of the prompt 126 let exp: *u8 = sys_mmap(256) 127 var en: i64 = 0 128 var pi: i64 = 0 129 while pi < plen { en = en + tk_byte_char(prompt[pi] as i64, ((exp as i64) + en) as *u8); pi = pi + 1 } 130 if rn != en { t1ok = 0 } else { var c: i64 = 0; while c < rn { if rt[c] != exp[c] { t1ok = 0 } c = c + 1 } } 131 132 // ---- embed prompt ---- 133 let te_i: nx_int = nx_gguf_find_tensor(hdr, "token_embd.weight" as *u8, 17) 134 let on_i: nx_int = nx_gguf_find_tensor(hdr, "output_norm.weight" as *u8, 18) 135 let oh_i: nx_int = nx_gguf_find_tensor(hdr, "output.weight" as *u8, 13) 136 if te_i < 0 { return 1 } if on_i < 0 { return 1 } if oh_i < 0 { return 1 } 137 let te: *NxGgufTensorInfo = nx_gguf_tensor_at(hloc, te_i) 138 let te_base: i64 = hloc.data_off + te.offset 139 let te_ty: i64 = te.ggml_type 140 let oh: *NxGgufTensorInfo = nx_gguf_tensor_at(hloc, oh_i) 141 let oh_base: i64 = hloc.data_off + oh.offset 142 let oh_ty: i64 = oh.ggml_type 143 let gOut: *i64 = sys_mmap(D*8) as *i64 144 let on: *NxGgufTensorInfo = nx_gguf_tensor_at(hloc, on_i) 145 dequant_to_q16(buf, hloc.data_off + on.offset, on.ggml_type, D, gOut) 146 147 let tmp: *i64 = sys_mmap(64*256*8) as *i64 148 let x: *i64 = sys_mmap(MAXT*D*8) as *i64 149 var ei: i64 = 0 150 while ei < np { dequant_row(buf, te_base, te_ty, ids[ei], D, ((x as i64) + ei*D*8) as *i64, tmp); ei = ei + 1 } 151 152 // ---- per-layer weight buffers (reused) + scratch ---- 153 let gA: *i64 = sys_mmap(D*8) as *i64 154 let gQ: *i64 = sys_mmap(D*8) as *i64 155 let gK: *i64 = sys_mmap(D*8) as *i64 156 let gF: *i64 = sys_mmap(D*8) as *i64 157 let Wq: *i64 = sys_mmap(D*D*8) as *i64 158 let Wk: *i64 = sys_mmap(D*D*8) as *i64 159 let Wv: *i64 = sys_mmap(D*D*8) as *i64 160 let Wo: *i64 = sys_mmap(D*D*8) as *i64 161 let Wr: *i64 = sys_mmap(E*D*8) as *i64 162 let eb: *i64 = sys_mmap(8*8) as *i64 163 let freqs: *i64 = sys_mmap((hd/2)*8) as *i64 164 rope_freqs_base(freqs, hd, cfg[11]) 165 let attnout: *i64 = sys_mmap(MAXT*D*8) as *i64 166 let xmid: *i64 = sys_mmap(MAXT*D*8) as *i64 167 let moeout: *i64 = sys_mmap(MAXT*D*8) as *i64 168 let ascr: *i64 = sys_mmap((4*MAXT*D + 2*MAXT + MAXT*D + 64)*8) as *i64 169 let mscr: *i64 = sys_mmap((D + E + 2*K + 2*ff*D + D*ff + 3*ff + D + 64)*8) as *i64 170 let cnt: *i64 = sys_mmap(E*8) as *i64 171 let ap: *i64 = sys_mmap(16*8) as *i64 172 let mp: *i64 = sys_mmap(16*8) as *i64 173 let lastmask: *i64 = sys_mmap(MAXT*8) as *i64 // per-layer last-token expert mask 174 175 let normed: *i64 = sys_mmap(D*8) as *i64 176 let hrow: *i64 = sys_mmap(D*8) as *i64 177 let pred: *i64 = sys_mmap(8) as *i64 178 let toplg: *i64 = sys_mmap(8) as *i64 179 let minlg: *i64 = sys_mmap(8) as *i64 180 181 var distinct_masks: i64 = 0 182 var run: i64 = 0 183 var predA: i64 = 0 184 var topA: i64 = 0 185 while run < 2 { 186 // fresh embed each run (x is overwritten by layers) 187 ei = 0 188 while ei < np { dequant_row(buf, te_base, te_ty, ids[ei], D, ((x as i64) + ei*D*8) as *i64, tmp); ei = ei + 1 } 189 var seenmask: i64 = 0 190 var L: i64 = 0 191 while L < NL { 192 of_load_blk(buf, hdr, L, ".attn_norm.weight\x00" as *u8, gA, D) 193 of_load_blk(buf, hdr, L, ".attn_q_norm.weight\x00" as *u8, gQ, D) 194 of_load_blk(buf, hdr, L, ".attn_k_norm.weight\x00" as *u8, gK, D) 195 of_load_blk(buf, hdr, L, ".ffn_norm.weight\x00" as *u8, gF, D) 196 of_load_blk(buf, hdr, L, ".attn_q.weight\x00" as *u8, Wq, D*D) 197 of_load_blk(buf, hdr, L, ".attn_k.weight\x00" as *u8, Wk, D*D) 198 of_load_blk(buf, hdr, L, ".attn_v.weight\x00" as *u8, Wv, D*D) 199 of_load_blk(buf, hdr, L, ".attn_output.weight\x00" as *u8, Wo, D*D) 200 of_load_blk(buf, hdr, L, ".ffn_gate_inp.weight\x00" as *u8, Wr, E*D) 201 of_expbase_blk(buf, hdr, L, ".ffn_gate_exps.weight\x00" as *u8, eb, 0) 202 of_expbase_blk(buf, hdr, L, ".ffn_up_exps.weight\x00" as *u8, eb, 2) 203 of_expbase_blk(buf, hdr, L, ".ffn_down_exps.weight\x00" as *u8, eb, 4) 204 ap[0]=x as i64; ap[1]=attnout as i64; ap[2]=np; ap[3]=D; ap[4]=nh; ap[5]=hd; ap[6]=scale 205 ap[7]=gA as i64; ap[8]=Wq as i64; ap[9]=Wk as i64; ap[10]=Wv as i64; ap[11]=Wo as i64 206 ap[12]=gQ as i64; ap[13]=gK as i64; ap[14]=freqs as i64; ap[15]=ascr as i64 207 nolmoe_attn(ap) 208 var d: i64 = 0 209 while d < np*D { xmid[d] = x[d] + attnout[d]; d = d + 1 } 210 var cz: i64 = 0 211 while cz < E { cnt[cz] = 0; cz = cz + 1 } 212 mp[0]=xmid as i64; mp[1]=moeout as i64; mp[2]=np; mp[3]=D; mp[4]=ff; mp[5]=E; mp[6]=K 213 mp[7]=gF as i64; mp[8]=Wr as i64; mp[9]=buf as i64; mp[10]=eb as i64; mp[11]=mscr as i64; mp[12]=cnt as i64 214 nolmoe_moe(mp) 215 d = 0 216 while d < np*D { x[d] = xmid[d] + moeout[d]; d = d + 1 } 217 // record last-token routing mask for this layer (re-route just the last token) 218 var cz2: i64 = 0 219 while cz2 < E { cnt[cz2] = 0; cz2 = cz2 + 1 } 220 mp[0]=((xmid as i64) + (np-1)*D*8); mp[1]=moeout as i64; mp[2]=1 221 nolmoe_moe(mp) 222 var msk: i64 = 0 223 cz2 = 0 224 while cz2 < E { if cnt[cz2] > 0 { msk = msk | (1 << cz2) } cz2 = cz2 + 1 } 225 if run == 0 { lastmask[L] = msk } 226 L = L + 1 227 } 228 // final norm on the last token + streamed head argmax 229 rmsnorm_gamma_row(x, gOut, (np-1)*D, D, normed, 0) 230 var best: i64 = 0 231 var bestv: i64 = 0 - 9223372036854775807 232 var worst: i64 = 9223372036854775807 233 var v: i64 = 0 234 while v < vocab { 235 dequant_row(buf, oh_base, oh_ty, v, D, hrow, tmp) 236 var s: i64 = 0 237 var kk: i64 = 0 238 while kk < D { s = s + (normed[kk] * hrow[kk]); kk = kk + 1 } 239 let lg: i64 = s >> 16 240 if lg > bestv { bestv = lg; best = v } 241 if lg < worst { worst = lg } 242 v = v + 1 243 } 244 if run == 0 { predA = best; topA = bestv; toplg[0] = bestv; minlg[0] = worst; pred[0] = best } 245 if run == 1 { pred[1] = best; toplg[1] = bestv } 246 run = run + 1 247 } 248 // distinct masks across layers 249 var L2: i64 = 0 250 while L2 < NL { 251 var seen: i64 = 0 252 var L3: i64 = 0 253 while L3 < L2 { if lastmask[L3] == lastmask[L2] { seen = 1 } L3 = L3 + 1 } 254 if seen == 0 { distinct_masks = distinct_masks + 1 } 255 L2 = L2 + 1 256 } 257 258 of_w("[fwd] predicted next id=" as *u8); of_n(predA); of_w(" piece='" as *u8) 259 let po: i64 = tk_decode_off(buf, vfirst, predA) 260 let ppl: i64 = nx_gguf_meta_read_string_len(buf, po) 261 if ppl > 0 { sys_write(1, nx_gguf_meta_read_string_ptr(buf, po), ppl) } 262 of_w("' top_logit=" as *u8); of_n(topA); of_w(" min_logit=" as *u8); of_n(minlg[0]); of_w(" distinct-layer-masks=" as *u8); of_n(distinct_masks); of_w("\n" as *u8) 263 264 var pass: i64 = 0 265 var ttl: i64 = 0 266 ttl = ttl + 1 267 of_w(" T1 tokenizer round-trip (encode->decode == byte-level prompt): " as *u8) 268 if t1ok == 1 { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) } 269 ttl = ttl + 1 270 of_w(" T2 non-degenerate logits (top " as *u8); of_n(topA); of_w(" > min " as *u8); of_n(minlg[0]); of_w("): " as *u8) 271 if topA > minlg[0] { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) } 272 ttl = ttl + 1 273 var detok: i64 = 0 274 if pred[0] == pred[1] { if toplg[0] == toplg[1] { detok = 1 } } 275 of_w(" T3 full-forward determinism (pred+logit identical on repeat): " as *u8) 276 if detok == 1 { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) } 277 ttl = ttl + 1 278 of_w(" T4 routing alive at depth (distinct layer masks " as *u8); of_n(distinct_masks); of_w(">=2): " as *u8) 279 if distinct_masks >= 2 { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) } 280 ttl = ttl + 1 281 of_w(" T5 prediction is a valid vocab id: " as *u8) 282 if predA >= 0 { if predA < vocab { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) } } else { of_w("FAIL\n" as *u8) } 283 284 of_w("NX-NOFLOAT-OLMOE-FORWARD-GATE passed " as *u8); of_n(pass); of_w("/" as *u8); of_n(ttl) 285 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 286 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 287 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 288 let ctr__dry: *i64 = gv_ctr() 289 ctr__dry[0] = pass 290 ctr__dry[1] = ttl 291 let rc__dry: i64 = gv_verdict("NOFLOAT-OLMOE-FORWARD-GATE" as *u8, ctr__dry, "real 16-layer OLMoE forward -> next-token, deterministic no-float integer)" as *u8) 292 sys_exit(rc__dry) 293 return rc__dry 294}