code wiki / (root) / nx_f32_llm_diag_test.nx

nx_f32_llm_diag_test.nx source

↩ module page · 137 lines · 5658 B

1// nx_f32_llm_diag_test.nx -- enumerate all tensor ggml_types in 2// the real Qwen2.5 GGUF. Writes counts to /tmp/nx_gguf_types.tsv. 3 4import "nx_syscalls.nx" 5import "nx_tier.nx" 6import "nx_le.nx" 7import "nx_strconv.nx" 8import "nx_gguf.nx" 9import "nx_gguf_load.nx" 10 11func _emit_kv(fd: i64, key: *u8, key_len: nx_int, value: i64) -> i64 { 12 let line: *u8 = sys_mmap(128) 13 var lo: i64 = 0 14 var ki: nx_int = 0 15 while ki < key_len { line[lo] = key[ki]; lo = lo + 1; ki = ki + 1 } 16 line[lo] = 0x09 as u8; lo = lo + 1 17 let dec: *u8 = sys_mmap(32) 18 let n_dec: i64 = nx_strconv_format_i64(value, dec) 19 var k: i64 = 0 20 while k < n_dec { line[lo] = dec[k]; lo = lo + 1; k = k + 1 } 21 line[lo] = 0x0A as u8; lo = lo + 1 22 return sys_write(fd, line, lo) 23} 24 25func main() -> i64 { 26 let path: *u8 = sys_mmap(64) 27 path[0]=0x2F as u8; path[1]=0x74 as u8; path[2]=0x6D as u8; path[3]=0x70 as u8 28 path[4]=0x2F as u8; path[5]=0x6E as u8; path[6]=0x78 as u8; path[7]=0x5F as u8 29 path[8]=0x72 as u8; path[9]=0x65 as u8; path[10]=0x61 as u8; path[11]=0x6C as u8 30 path[12]=0x5F as u8; path[13]=0x6D as u8; path[14]=0x6F as u8; path[15]=0x64 as u8 31 path[16]=0x65 as u8; path[17]=0x6C as u8; path[18]=0x2E as u8 32 path[19]=0x67 as u8; path[20]=0x67 as u8; path[21]=0x75 as u8; path[22]=0x66 as u8 33 path[23]=0 as u8 34 35 let len_out: *i64 = sys_mmap(8) as *i64 36 let buf: *u8 = sys_read_file(path, len_out) 37 if buf == (0 as *u8) { return 10 } 38 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 { return 20 } 41 42 // Tally counts per type (indices 0..30). 43 let counts: *i64 = sys_mmap(32 * 8) as *i64 44 var ci: nx_int = 0 45 while ci < 32 { counts[ci] = 0; ci = ci + 1 } 46 47 var i: nx_int = 0 48 while i < hdr.n_tensors { 49 let ti: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, i) 50 let t: nx_int = ti.ggml_type as nx_int 51 if t >= 0 { 52 if t < 32 { counts[t] = counts[t] + 1 } 53 } 54 i = i + 1 55 } 56 57 // Get embed type specifically. 58 let n_te: *u8 = sys_mmap(17) 59 n_te[0]=0x74 as u8; n_te[1]=0x6f as u8; n_te[2]=0x6b as u8; n_te[3]=0x65 as u8 60 n_te[4]=0x6e as u8; n_te[5]=0x5f as u8; n_te[6]=0x65 as u8; n_te[7]=0x6d as u8 61 n_te[8]=0x62 as u8; n_te[9]=0x64 as u8; n_te[10]=0x2e as u8; n_te[11]=0x77 as u8 62 n_te[12]=0x65 as u8; n_te[13]=0x69 as u8; n_te[14]=0x67 as u8; n_te[15]=0x68 as u8 63 n_te[16]=0x74 as u8 64 let idx_te: nx_int = nx_gguf_find_tensor(hdr, n_te, 17) 65 var embed_type: i64 = -1 66 if idx_te >= 0 { 67 let ti_te: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, idx_te) 68 embed_type = ti_te.ggml_type 69 } 70 71 // Get blk.0.attn_q.weight type. 72 let n_q: *u8 = sys_mmap(20) 73 n_q[0]=0x62 as u8; n_q[1]=0x6c as u8; n_q[2]=0x6b as u8; n_q[3]=0x2e as u8 74 n_q[4]=0x30 as u8; n_q[5]=0x2e as u8; n_q[6]=0x61 as u8; n_q[7]=0x74 as u8 75 n_q[8]=0x74 as u8; n_q[9]=0x6e as u8; n_q[10]=0x5f as u8; n_q[11]=0x71 as u8 76 n_q[12]=0x2e as u8; n_q[13]=0x77 as u8; n_q[14]=0x65 as u8; n_q[15]=0x69 as u8 77 n_q[16]=0x67 as u8; n_q[17]=0x68 as u8; n_q[18]=0x74 as u8 78 let idx_q: nx_int = nx_gguf_find_tensor(hdr, n_q, 19) 79 var wq_type: i64 = -1 80 if idx_q >= 0 { 81 let ti_q: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, idx_q) 82 wq_type = ti_q.ggml_type 83 } 84 85 // Write TSV to /tmp/nx_gguf_types.tsv. 86 let tsv_path: *u8 = sys_mmap(64) 87 tsv_path[0]=0x2F as u8; tsv_path[1]=0x74 as u8; tsv_path[2]=0x6D as u8; tsv_path[3]=0x70 as u8 88 tsv_path[4]=0x2F as u8; tsv_path[5]=0x6E as u8; tsv_path[6]=0x78 as u8; tsv_path[7]=0x5F as u8 89 tsv_path[8]=0x67 as u8; tsv_path[9]=0x67 as u8; tsv_path[10]=0x75 as u8; tsv_path[11]=0x66 as u8 90 tsv_path[12]=0x5F as u8; tsv_path[13]=0x74 as u8; tsv_path[14]=0x79 as u8; tsv_path[15]=0x70 as u8 91 tsv_path[16]=0x65 as u8; tsv_path[17]=0x73 as u8; tsv_path[18]=0x2E as u8 92 tsv_path[19]=0x74 as u8; tsv_path[20]=0x73 as u8; tsv_path[21]=0x76 as u8 93 tsv_path[22]=0 as u8 94 95 let fd: i64 = sys_openat_wr(tsv_path, 0x1A4) 96 if fd < 0 { return 30 } 97 98 let k_n: *u8 = sys_mmap(9) 99 k_n[0]=0x6E as u8; k_n[1]=0x5F as u8; k_n[2]=0x74 as u8; k_n[3]=0x65 as u8 100 k_n[4]=0x6E as u8; k_n[5]=0x73 as u8; k_n[6]=0x6F as u8; k_n[7]=0x72 as u8 101 k_n[8]=0x73 as u8 102 _emit_kv(fd, k_n, 9, hdr.n_tensors as i64) 103 104 let k_e: *u8 = sys_mmap(10) 105 k_e[0]=0x65 as u8; k_e[1]=0x6D as u8; k_e[2]=0x62 as u8; k_e[3]=0x65 as u8 106 k_e[4]=0x64 as u8; k_e[5]=0x5F as u8; k_e[6]=0x74 as u8; k_e[7]=0x79 as u8 107 k_e[8]=0x70 as u8; k_e[9]=0x65 as u8 108 _emit_kv(fd, k_e, 10, embed_type) 109 110 let k_q: *u8 = sys_mmap(7) 111 k_q[0]=0x77 as u8; k_q[1]=0x71 as u8; k_q[2]=0x5F as u8; k_q[3]=0x74 as u8 112 k_q[4]=0x79 as u8; k_q[5]=0x70 as u8; k_q[6]=0x65 as u8 113 _emit_kv(fd, k_q, 7, wq_type) 114 115 // Emit counts for each type 0..30. 116 let prefix_t: *u8 = sys_mmap(7) 117 prefix_t[0]=0x74 as u8; prefix_t[1]=0x79 as u8; prefix_t[2]=0x70 as u8 118 prefix_t[3]=0x65 as u8; prefix_t[4]=0x5F as u8 119 let dec_buf: *u8 = sys_mmap(8) 120 var t: nx_int = 0 121 while t < 31 { 122 if counts[t] > 0 { 123 // emit "type_<n>\t<count>\n" 124 let key: *u8 = sys_mmap(16) 125 key[0]=0x74 as u8; key[1]=0x79 as u8; key[2]=0x70 as u8 126 key[3]=0x65 as u8; key[4]=0x5F as u8 127 let n_dec: i64 = nx_strconv_format_i64(t as i64, dec_buf) 128 var dd: i64 = 0 129 while dd < n_dec { key[5 + dd] = dec_buf[dd]; dd = dd + 1 } 130 _emit_kv(fd, key, (5 + n_dec) as nx_int, counts[t]) 131 } 132 t = t + 1 133 } 134 135 sys_close(fd) 136 return 0 137}