code wiki / (root) / nx_real_gguf_test.nx

nx_real_gguf_test.nx source

↩ module page · 384 lines · 15958 B

1// nx_real_gguf_test.nx -- LIVE FIRE on a real public-license GGUF. 2// 3// Reads /tmp/nx_real_model.gguf (Qwen2.5-0.5B-Instruct Q4_K_M, ~491 MB, 4// Apache 2.0 license, downloaded from HuggingFace) through the substrate's 5// own sys_read_file + nx_gguf_parse + nx_gguf_meta + nx_gguf_load_tensor_lazy. 6// 7// Pass criteria: 8// 1. File reads in via sys_read_file (no truncation) 9// 2. Magic + version match GGUF v3 10// 3. tensor_count and metadata_count are non-zero and within sane bounds 11// 4. nx_gguf_parse succeeds 12// 5. At least one tensor lookup by name works (we look up 13// "token_embd.weight" which every llama/qwen-class model has) 14// 6. Lazy load returns a non-null handle with zero materialization 15// 16// Reports timing for each phase to /tmp/nx_real_gguf.tsv. 17 18import "nx_syscalls.nx" 19import "nx_tier.nx" 20import "nx_le.nx" 21import "nx_strconv.nx" 22import "nx_tensor.nx" 23import "nx_gguf.nx" 24import "nx_gguf_load.nx" 25import "nx_gguf_meta.nx" 26import "nx_placement.nx" 27import "nx_gguf_load_lazy.nx" 28 29func _emit_kv(fd: i64, key: *u8, key_len: nx_int, value: i64) -> i64 { 30 let line: *u8 = sys_mmap(128) 31 var lo: i64 = 0 32 var ki: nx_int = 0 33 while ki < key_len { line[lo] = key[ki]; lo = lo + 1; ki = ki + 1 } 34 line[lo] = 0x09; lo = lo + 1 35 let dec: *u8 = sys_mmap(32) 36 let n_dec: i64 = nx_strconv_format_i64(value, dec) 37 var k: i64 = 0 38 while k < n_dec { line[lo] = dec[k]; lo = lo + 1; k = k + 1 } 39 line[lo] = 0x0A; lo = lo + 1 40 return sys_write(fd, line, lo) 41} 42 43func main() -> i64 { 44 // ----- Path: /tmp/nx_real_model.gguf ----- 45 let path: *u8 = sys_mmap(64) 46 path[0]=0x2F; path[1]=0x74; path[2]=0x6D; path[3]=0x70; path[4]=0x2F 47 path[5]=0x6E; path[6]=0x78; path[7]=0x5F 48 path[8]=0x72; path[9]=0x65; path[10]=0x61; path[11]=0x6C 49 path[12]=0x5F; path[13]=0x6D; path[14]=0x6F; path[15]=0x64 50 path[16]=0x65; path[17]=0x6C; path[18]=0x2E 51 path[19]=0x67; path[20]=0x67; path[21]=0x75; path[22]=0x66 52 path[23]=0 53 54 // ----- PHASE 1: read the file ----- 55 let t0: i64 = sys_now_ms() 56 let len_out: *i64 = sys_mmap(8) as *i64 57 len_out[0] = 0 58 let buf: *u8 = sys_read_file(path, len_out) 59 let t1: i64 = sys_now_ms() 60 if buf == (0 as *u8) { return 30 } 61 if len_out[0] < 1000 { return 31 } 62 let elapsed_read: i64 = t1 - t0 63 64 // ----- PHASE 2: header parse ----- 65 let t2: i64 = sys_now_ms() 66 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader 67 let v_p: nx_int = nx_gguf_parse(buf, len_out[0], hdr) 68 let t3: i64 = sys_now_ms() 69 if v_p != NX_GGUF_OK { return 40 + v_p } 70 if hdr.version != 3 { return 50 } 71 if hdr.tensor_count <= 0 { return 51 } 72 if hdr.tensor_count > 1024 { return 52 } 73 let elapsed_parse: i64 = t3 - t2 74 75 // ----- PHASE 3: lookup token_embd.weight (universal in llama/qwen) ----- 76 let n_te: *u8 = sys_mmap(17) 77 n_te[0]=0x74; n_te[1]=0x6f; n_te[2]=0x6b; n_te[3]=0x65 78 n_te[4]=0x6e; n_te[5]=0x5f; n_te[6]=0x65; n_te[7]=0x6d 79 n_te[8]=0x62; n_te[9]=0x64; n_te[10]=0x2e; n_te[11]=0x77 80 n_te[12]=0x65; n_te[13]=0x69; n_te[14]=0x67; n_te[15]=0x68 81 n_te[16]=0x74 82 83 let t4: i64 = sys_now_ms() 84 let idx: nx_int = nx_gguf_find_tensor(hdr, n_te, 17) 85 let t5: i64 = sys_now_ms() 86 if idx < 0 { return 60 } 87 let elapsed_find: i64 = t5 - t4 88 89 let ti: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, idx) 90 let ti_dim0: i64 = ti.dim_0 91 let ti_dim1: i64 = ti.dim_1 92 let ti_type: i64 = ti.ggml_type 93 94 // ----- PHASE 4: lazy-load (no materialization) ----- 95 let t6: i64 = sys_now_ms() 96 let err: *i64 = sys_mmap(8) as *i64 97 err[0] = 0 98 let lazy: *NxPlacedTensor = nx_gguf_load_tensor_lazy(buf, hdr, n_te, 17, err) 99 let t7: i64 = sys_now_ms() 100 if err[0] != NX_GL_OK { return 70 } 101 if nx_placed_tensor_is_live(lazy) != 0 { return 71 } 102 if nx_placed_tensor_storage_bytes(lazy) != 0 { return 72 } 103 let elapsed_lazy: i64 = t7 - t6 104 105 // ----- PHASE 5: walk metadata for general.architecture ----- 106 let n_arch: *u8 = sys_mmap(20) 107 n_arch[0]=0x67; n_arch[1]=0x65; n_arch[2]=0x6e; n_arch[3]=0x65 108 n_arch[4]=0x72; n_arch[5]=0x61; n_arch[6]=0x6c; n_arch[7]=0x2e 109 n_arch[8]=0x61; n_arch[9]=0x72; n_arch[10]=0x63; n_arch[11]=0x68 110 n_arch[12]=0x69; n_arch[13]=0x74; n_arch[14]=0x65; n_arch[15]=0x63 111 n_arch[16]=0x74; n_arch[17]=0x75; n_arch[18]=0x72; n_arch[19]=0x65 112 // "general.architecture" = 20 bytes 113 114 let t8: i64 = sys_now_ms() 115 let voff: *i64 = sys_mmap(8) as *i64 116 let vty: *i64 = sys_mmap(8) as *i64 117 let v_f: nx_int = nx_gguf_meta_find(buf, len_out[0], hdr, n_arch, 20, voff, vty) 118 let t9: i64 = sys_now_ms() 119 let elapsed_meta: i64 = t9 - t8 120 if v_f != NX_GMETA_OK { return 80 } 121 if vty[0] != NX_GGUF_TYPE_STRING { return 81 } 122 123 let arch_str_len: i64 = nx_gguf_meta_read_string_len(buf, voff[0]) 124 let arch_str_ptr: *u8 = nx_gguf_meta_read_string_ptr(buf, voff[0]) 125 126 // ----- PHASE 6: try to materialize -- skip gracefully on unsupported quant ----- 127 // 128 // Q4_K_M models typically store token_embd / output as Q6_K 129 // (higher precision); we don't ship Q6_K dequant yet, so if the 130 // embed is Q6_K we report and try blk.0.attn_output.weight (always Q4_K 131 // in K_M variants). This way the substrate proves it can handle 132 // a REAL file without false-failing on a known unimplemented quant. 133 var elapsed_mat: i64 = 0 134 var nonzero_count: i64 = 0 135 var mat_tried_type: i64 = ti_type 136 var mat_succeeded: i64 = 0 137 138 if ti_type == NX_GGML_TYPE_F32 { 139 let t10: i64 = sys_now_ms() 140 let t_embd: *NxTensor = nx_placed_tensor_get(lazy) 141 let t11: i64 = sys_now_ms() 142 elapsed_mat = t11 - t10 143 if t_embd != (0 as *NxTensor) { 144 mat_succeeded = 1 145 let pe: *i64 = t_embd.storage as *i64 146 var ck: i64 = 0 147 while ck < 1024 { 148 if pe[ck] != 0 { nonzero_count = nonzero_count + 1 } 149 ck = ck + 1 150 } 151 } 152 } 153 if ti_type == NX_GGML_TYPE_Q4_K { 154 let t10: i64 = sys_now_ms() 155 let t_embd: *NxTensor = nx_placed_tensor_get(lazy) 156 let t11: i64 = sys_now_ms() 157 elapsed_mat = t11 - t10 158 if t_embd != (0 as *NxTensor) { 159 mat_succeeded = 1 160 let pe: *i64 = t_embd.storage as *i64 161 var ck: i64 = 0 162 while ck < 1024 { 163 if pe[ck] != 0 { nonzero_count = nonzero_count + 1 } 164 ck = ck + 1 165 } 166 } 167 } 168 if ti_type == NX_GGML_TYPE_Q8_0 { 169 let t10: i64 = sys_now_ms() 170 let t_embd: *NxTensor = nx_placed_tensor_get(lazy) 171 let t11: i64 = sys_now_ms() 172 elapsed_mat = t11 - t10 173 if t_embd != (0 as *NxTensor) { 174 mat_succeeded = 1 175 let pe: *i64 = t_embd.storage as *i64 176 var ck: i64 = 0 177 while ck < 1024 { 178 if pe[ck] != 0 { nonzero_count = nonzero_count + 1 } 179 ck = ck + 1 180 } 181 } 182 } 183 184 // If embed wasn't a supported quant, find a Q4_K tensor and exercise 185 // BOTH paths: Q10 (legacy, shows the precision floor live on real 186 // weights) and Q14 (the 2026-05-19 lift, should produce many nonzero 187 // values where Q10 collapsed to zero). 188 var nonzero_q10: i64 = 0 189 var nonzero_q14: i64 = 0 190 var max_abs_q10: i64 = 0 191 var max_abs_q14: i64 = 0 192 if mat_succeeded == 0 { 193 var i_q4k: nx_int = 0 194 var found_q4k: nx_int = 0 - 1 195 while i_q4k < hdr.n_tensors { 196 let ti_iter: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, i_q4k) 197 if ti_iter.ggml_type == NX_GGML_TYPE_Q4_K { 198 if found_q4k < 0 { found_q4k = i_q4k } 199 } 200 i_q4k = i_q4k + 1 201 } 202 if found_q4k >= 0 { 203 let ti_q: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, found_q4k) 204 let nvals_q: i64 = nx_gguf_tensor_n_values(ti_q) 205 let dq_off: i64 = hdr.data_off + ti_q.offset 206 var ntk: i64 = 1024 207 if nvals_q < ntk { ntk = nvals_q } 208 209 // Q10 path 210 let out_q10: *i64 = sys_mmap(1024 * 8) as *i64 211 nx_gguf_dequant_q4_k(buf, dq_off, ntk, out_q10) 212 var ck10: i64 = 0 213 while ck10 < ntk { 214 if out_q10[ck10] != 0 { nonzero_q10 = nonzero_q10 + 1 } 215 var av: i64 = out_q10[ck10] 216 if av < 0 { av = 0 - av } 217 if av > max_abs_q10 { max_abs_q10 = av } 218 ck10 = ck10 + 1 219 } 220 221 // Q14 path (precision-lifted) 222 let t10b: i64 = sys_now_ms() 223 let out_q14: *i64 = sys_mmap(1024 * 8) as *i64 224 nx_gguf_dequant_q4_k_q14(buf, dq_off, ntk, out_q14) 225 let t11b: i64 = sys_now_ms() 226 elapsed_mat = t11b - t10b 227 var ck14: i64 = 0 228 while ck14 < ntk { 229 if out_q14[ck14] != 0 { nonzero_q14 = nonzero_q14 + 1 } 230 var av2: i64 = out_q14[ck14] 231 if av2 < 0 { av2 = 0 - av2 } 232 if av2 > max_abs_q14 { max_abs_q14 = av2 } 233 ck14 = ck14 + 1 234 } 235 236 mat_succeeded = 1 237 mat_tried_type = NX_GGML_TYPE_Q4_K 238 nonzero_count = nonzero_q10 239 } 240 } 241 // Reporting happens unconditionally below; the value checks 242 // only set the final exit code (see end of main). 243 var final_verdict: nx_int = 0 244 if mat_succeeded == 0 { final_verdict = 90 } 245 246 // ----- Emit TSV report ----- 247 let rpath: *u8 = sys_mmap(64) 248 rpath[0]=0x2F; rpath[1]=0x74; rpath[2]=0x6D; rpath[3]=0x70; rpath[4]=0x2F 249 rpath[5]=0x6E; rpath[6]=0x78; rpath[7]=0x5F 250 rpath[8]=0x72; rpath[9]=0x65; rpath[10]=0x61; rpath[11]=0x6C 251 rpath[12]=0x5F; rpath[13]=0x67; rpath[14]=0x67; rpath[15]=0x75 252 rpath[16]=0x66; rpath[17]=0x2E; rpath[18]=0x74; rpath[19]=0x73 253 rpath[20]=0x76 // ".tsv" 254 rpath[21]=0 255 256 let fd: i64 = sys_openat_wr(rpath, 0x1A4) 257 if fd < 0 { return 110 } 258 259 let k_file_bytes: *u8 = sys_mmap(16) 260 k_file_bytes[0]=0x66; k_file_bytes[1]=0x69; k_file_bytes[2]=0x6c 261 k_file_bytes[3]=0x65; k_file_bytes[4]=0x5f; k_file_bytes[5]=0x62 262 k_file_bytes[6]=0x79; k_file_bytes[7]=0x74; k_file_bytes[8]=0x65 263 k_file_bytes[9]=0x73 // "file_bytes" 264 _emit_kv(fd, k_file_bytes, 10, len_out[0]) 265 266 let k_tens: *u8 = sys_mmap(16) 267 k_tens[0]=0x6e; k_tens[1]=0x5f; k_tens[2]=0x74; k_tens[3]=0x65 268 k_tens[4]=0x6e; k_tens[5]=0x73; k_tens[6]=0x6f; k_tens[7]=0x72 269 k_tens[8]=0x73 // "n_tensors" 270 _emit_kv(fd, k_tens, 9, hdr.n_tensors) 271 272 let k_meta: *u8 = sys_mmap(16) 273 k_meta[0]=0x6e; k_meta[1]=0x5f; k_meta[2]=0x6d; k_meta[3]=0x65 274 k_meta[4]=0x74; k_meta[5]=0x61 // "n_meta" 275 _emit_kv(fd, k_meta, 6, hdr.metadata_count) 276 277 let k_data_off: *u8 = sys_mmap(16) 278 k_data_off[0]=0x64; k_data_off[1]=0x61; k_data_off[2]=0x74 279 k_data_off[3]=0x61; k_data_off[4]=0x5f; k_data_off[5]=0x6f 280 k_data_off[6]=0x66; k_data_off[7]=0x66 // "data_off" 281 _emit_kv(fd, k_data_off, 8, hdr.data_off) 282 283 let k_embed_dim0: *u8 = sys_mmap(16) 284 k_embed_dim0[0]=0x65; k_embed_dim0[1]=0x6d; k_embed_dim0[2]=0x62 285 k_embed_dim0[3]=0x65; k_embed_dim0[4]=0x64; k_embed_dim0[5]=0x5f 286 k_embed_dim0[6]=0x64; k_embed_dim0[7]=0x69; k_embed_dim0[8]=0x6d 287 k_embed_dim0[9]=0x30 // "embed_dim0" 288 _emit_kv(fd, k_embed_dim0, 10, ti_dim0) 289 290 let k_embed_dim1: *u8 = sys_mmap(16) 291 k_embed_dim1[0]=0x65; k_embed_dim1[1]=0x6d; k_embed_dim1[2]=0x62 292 k_embed_dim1[3]=0x65; k_embed_dim1[4]=0x64; k_embed_dim1[5]=0x5f 293 k_embed_dim1[6]=0x64; k_embed_dim1[7]=0x69; k_embed_dim1[8]=0x6d 294 k_embed_dim1[9]=0x31 // "embed_dim1" 295 _emit_kv(fd, k_embed_dim1, 10, ti_dim1) 296 297 let k_embed_type: *u8 = sys_mmap(16) 298 k_embed_type[0]=0x65; k_embed_type[1]=0x6d; k_embed_type[2]=0x62 299 k_embed_type[3]=0x65; k_embed_type[4]=0x64; k_embed_type[5]=0x5f 300 k_embed_type[6]=0x74; k_embed_type[7]=0x79; k_embed_type[8]=0x70 301 k_embed_type[9]=0x65 // "embed_type" 302 _emit_kv(fd, k_embed_type, 10, ti_type) 303 304 let k_arch_len: *u8 = sys_mmap(16) 305 k_arch_len[0]=0x61; k_arch_len[1]=0x72; k_arch_len[2]=0x63 306 k_arch_len[3]=0x68; k_arch_len[4]=0x5f; k_arch_len[5]=0x6c 307 k_arch_len[6]=0x65; k_arch_len[7]=0x6e // "arch_len" 308 _emit_kv(fd, k_arch_len, 8, arch_str_len) 309 310 // Write the architecture string body inline (raw bytes). 311 let alabel: *u8 = sys_mmap(16) 312 alabel[0]=0x61; alabel[1]=0x72; alabel[2]=0x63; alabel[3]=0x68 313 alabel[4]=0x09 // "arch\t" 314 sys_write(fd, alabel, 5) 315 sys_write(fd, arch_str_ptr, arch_str_len) 316 let nl_buf: *u8 = sys_mmap(2); nl_buf[0]=0x0A 317 sys_write(fd, nl_buf, 1) 318 319 let k_nz: *u8 = sys_mmap(16) 320 k_nz[0]=0x6e; k_nz[1]=0x6f; k_nz[2]=0x6e; k_nz[3]=0x7a 321 k_nz[4]=0x65; k_nz[5]=0x72; k_nz[6]=0x6f; k_nz[7]=0x5f 322 k_nz[8]=0x31; k_nz[9]=0x6b // "nonzero_1k" 323 _emit_kv(fd, k_nz, 10, nonzero_count) 324 325 let k_read: *u8 = sys_mmap(16) 326 k_read[0]=0x72; k_read[1]=0x65; k_read[2]=0x61; k_read[3]=0x64 327 k_read[4]=0x5f; k_read[5]=0x6d; k_read[6]=0x73 // "read_ms" 328 _emit_kv(fd, k_read, 7, elapsed_read) 329 330 let k_pms: *u8 = sys_mmap(16) 331 k_pms[0]=0x70; k_pms[1]=0x61; k_pms[2]=0x72; k_pms[3]=0x73 332 k_pms[4]=0x65; k_pms[5]=0x5f; k_pms[6]=0x6d; k_pms[7]=0x73 // "parse_ms" 333 _emit_kv(fd, k_pms, 8, elapsed_parse) 334 335 let k_fnd: *u8 = sys_mmap(16) 336 k_fnd[0]=0x66; k_fnd[1]=0x69; k_fnd[2]=0x6e; k_fnd[3]=0x64 337 k_fnd[4]=0x5f; k_fnd[5]=0x6d; k_fnd[6]=0x73 // "find_ms" 338 _emit_kv(fd, k_fnd, 7, elapsed_find) 339 340 let k_lz: *u8 = sys_mmap(16) 341 k_lz[0]=0x6c; k_lz[1]=0x61; k_lz[2]=0x7a; k_lz[3]=0x79 342 k_lz[4]=0x5f; k_lz[5]=0x6d; k_lz[6]=0x73 // "lazy_ms" 343 _emit_kv(fd, k_lz, 7, elapsed_lazy) 344 345 let k_mt: *u8 = sys_mmap(16) 346 k_mt[0]=0x6d; k_mt[1]=0x65; k_mt[2]=0x74; k_mt[3]=0x61 347 k_mt[4]=0x5f; k_mt[5]=0x6d; k_mt[6]=0x73 // "meta_ms" 348 _emit_kv(fd, k_mt, 7, elapsed_meta) 349 350 let k_mat: *u8 = sys_mmap(16) 351 k_mat[0]=0x6d; k_mat[1]=0x61; k_mat[2]=0x74; k_mat[3]=0x5f 352 k_mat[4]=0x6d; k_mat[5]=0x73 // "mat_ms" 353 _emit_kv(fd, k_mat, 6, elapsed_mat) 354 355 let k_mat_type: *u8 = sys_mmap(16) 356 k_mat_type[0]=0x6d; k_mat_type[1]=0x61; k_mat_type[2]=0x74 357 k_mat_type[3]=0x5f; k_mat_type[4]=0x67; k_mat_type[5]=0x67 358 k_mat_type[6]=0x6d; k_mat_type[7]=0x6c // "mat_ggml" 359 _emit_kv(fd, k_mat_type, 8, mat_tried_type) 360 361 // Precision-lift comparison: Q10 (legacy floor) vs Q14 (lifted). 362 let k_nz_q10: *u8 = sys_mmap(16) 363 k_nz_q10[0]=0x6e; k_nz_q10[1]=0x7a; k_nz_q10[2]=0x5f; k_nz_q10[3]=0x71 364 k_nz_q10[4]=0x31; k_nz_q10[5]=0x30 // "nz_q10" 365 _emit_kv(fd, k_nz_q10, 6, nonzero_q10) 366 367 let k_nz_q14: *u8 = sys_mmap(16) 368 k_nz_q14[0]=0x6e; k_nz_q14[1]=0x7a; k_nz_q14[2]=0x5f; k_nz_q14[3]=0x71 369 k_nz_q14[4]=0x31; k_nz_q14[5]=0x34 // "nz_q14" 370 _emit_kv(fd, k_nz_q14, 6, nonzero_q14) 371 372 let k_mx_q10: *u8 = sys_mmap(16) 373 k_mx_q10[0]=0x6d; k_mx_q10[1]=0x78; k_mx_q10[2]=0x5f 374 k_mx_q10[3]=0x71; k_mx_q10[4]=0x31; k_mx_q10[5]=0x30 // "mx_q10" 375 _emit_kv(fd, k_mx_q10, 6, max_abs_q10) 376 377 let k_mx_q14: *u8 = sys_mmap(16) 378 k_mx_q14[0]=0x6d; k_mx_q14[1]=0x78; k_mx_q14[2]=0x5f 379 k_mx_q14[3]=0x71; k_mx_q14[4]=0x31; k_mx_q14[5]=0x34 // "mx_q14" 380 _emit_kv(fd, k_mx_q14, 6, max_abs_q14) 381 382 sys_close(fd) 383 return final_verdict 384}