38 lines
1.2 KiB
Bash
Executable File
38 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Derive lighter GGUFs from the F32 source-of-truth produced by convert.py.
|
|
# Each F32 model under models/ is quantized to BF16, Q8_0 and Q4_K_M.
|
|
#
|
|
# Three target precisions cover the useful range : BF16 for max precision
|
|
# on CUDA, Q8_0 as the balanced default, Q4_K_M as the smallest variant
|
|
# that still sounds correct.
|
|
#
|
|
# Quantization policy is centralized in tools/quantize.cpp should_quantize :
|
|
# RVQ codebooks (quantizer.quantizers.*) and any embedding/projection layer
|
|
# wrapping them stay at F32 in every variant. Nearest-neighbor lookup is
|
|
# sensitive to per-row quantization noise ; even BF16 mantissa truncation
|
|
# drifts codes enough to break voice fidelity. Conv weights stay at source
|
|
# dtype and are cast to F16 at load time by gf_load_conv_f16 (ARM im2col
|
|
# strict). Same policy as omnivoice.cpp / acestep.cpp keeping audio-critical
|
|
# paths intact.
|
|
|
|
set -eu
|
|
|
|
Q="./build/quantize"
|
|
|
|
quantize() {
|
|
local src="$1" type="$2"
|
|
local out="${src/-F32.gguf/-${type}.gguf}"
|
|
if [ -f "$out" ]; then
|
|
echo "[Skip] $out"
|
|
else
|
|
$Q "$src" "$out" "$type"
|
|
fi
|
|
}
|
|
|
|
for src in models/qwen-*-F32.gguf; do
|
|
[ -f "$src" ] || continue
|
|
quantize "$src" BF16
|
|
quantize "$src" Q8_0
|
|
quantize "$src" Q4_K_M
|
|
done
|