code wiki / (root) / nx_gguf_typecensus.nx

nx_gguf_typecensus.nx source

↩ module page · 45 lines · 1562 B

1// nx_gguf_typecensus.nx -- tally the real model's tensors by ggml_type, 2// so we know what quant the weights actually are (the memory-bound decode 3// lever depends on it: Q8_0=1B/val, Q4_K=0.56B/val, F32=4B/val). 4// ggml types: 0=F32 1=F16 2=Q4_0 3=Q4_1 8=Q8_0 12=Q4_K 14=Q6_K. 5// expect_exit: 0 6 7import "nx_syscalls.nx" 8import "nx_tier.nx" 9import "nx_gguf.nx" 10import "nx_gguf_load.nx" 11import "nx_fmt.nx" 12 13func main() -> i64 { 14 let path: *u8 = "/tmp/nx_real_model.gguf" as *u8 15 let len_out: *i64 = sys_mmap(8) as *i64 16 let buf: *u8 = sys_read_file(path, len_out) 17 if buf == (0 as *u8) { fmt_puts("no model\n" as *u8); return 10 } 18 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader 19 if nx_gguf_parse(buf, len_out[0], hdr) != NX_GGUF_OK { return 20 } 20 21 let n: i64 = hdr.n_tensors 22 let counts: *i64 = sys_mmap(64 * 8) as *i64 23 let vals: *i64 = sys_mmap(64 * 8) as *i64 24 var i: i64 = 0 25 while i < n { 26 let ti: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, i) 27 let t: i64 = ti.ggml_type 28 if t >= 0 { if t < 64 { 29 counts[t] = counts[t] + 1 30 vals[t] = vals[t] + nx_gguf_tensor_n_values(ti) 31 } } 32 i = i + 1 33 } 34 35 fmt_puts("n_tensors="); fmt_putn(n); fmt_puts("\n" as *u8) 36 var t: i64 = 0 37 while t < 64 { 38 if counts[t] > 0 { 39 fmt_puts("ggml_type "); fmt_putn(t); fmt_puts(": "); fmt_putn(counts[t]) 40 fmt_puts(" tensors, "); fmt_putn(vals[t]); fmt_puts(" values\n" as *u8) 41 } 42 t = t + 1 43 } 44 return 0 45}