Hy4的官方1位量化版本??? 👀
摘要
本文介绍了Hy4预览模型的官方1位量化构建版本,提供尺寸减小的GGUF文件,以及在修改后的llama.cpp上运行的说明。
查看缓存全文
缓存时间: 2026/08/29 13:53
AngelSlim/Hy4-preview-GGUF · Hugging Face
来源:https://huggingface.co/AngelSlim/Hy4-preview-GGUF 两个 HY4-Preview 的 GGUF 构建:https://huggingface.co/tencent/Hy4-preview
**语言 / 语言:**English (https://huggingface.co/AngelSlim/Hy4-preview-GGUF#english)·中文 (https://huggingface.co/AngelSlim/Hy4-preview-GGUF#%E4%B8%AD%E6%96%87)
文件大小 bpw 备注
Hy4\-preview\-Q4\_K\_M\.gguf 435.20 GiB 4.86 标准 4-bit,安全默认选择
Hy4\-preview\-STQ1\_0\.gguf 213.66 GiB 2.38 混合 1-2 bit,体积减半
这两个文件均无法在官方 llama.cpp 上运行。hyv4架构尚未合并上游。需应用hy4\-preview-patch/中的补丁。
English
1. 这是什么
Hy4\-preview\-Q4\_K\_M\.gguf— 常规 Q4_K_M。多数张量为 Q4_K;ffn\_down\_exps由 llama.cpp 自身逻辑在 37 层使用 Q6_K。若显存无压力,请使用此版本。
Hy4\-preview\-STQ1\_0\.gguf— 约 2.38 bpw 的混合精度,同一模型体积减半。路由专家的gate/up投影在 29 层使用 1.3125 bpw(STQ1_0),在另外 48 层使用 2.0625 bpw(IQ2_XXS)。详见第 3 节。
类型直方图:
Q4_K_M: F32 1080 / Q4_K 901 / Q8_0 78 / Q6_K 75
STQ1_0: F32 1080 / Q8_0 354 / Q5_K 234 / Q6_K 234 / IQ2_XXS 96 / IQ3_XXS 74 / STQ1_0 58 / IQ4_XS 3 / Q4_K 1
2. 如何运行
构建一个打了补丁的 llama.cpp
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
git checkout 0cea36222
git apply hy4-preview-patch/0001-hyv4-architecture.patch
git apply hy4-preview-patch/0002-stq1_0-quant-and-cuda.patch # 如果只用 Q4_K_M,可跳过
export PATH=/usr/local/cuda-13.0/bin:$PATH CUDACXX=/usr/local/cuda-13.0/bin/nvcc
cmake -B build-cuda -DGGML_CUDA=ON -DLLAMA_CURL=OFF -DGGML_NATIVE=OFF \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_ARCHITECTURES=90 \
-DLLAMA_BUILD_UI=OFF -DLLAMA_USE_PREBUILT_UI=OFF
cmake --build build-cuda --target llama-cli llama-bench llama-quantize -j 48
根据您的 GPU 设置\-DCMAKE\_CUDA\_ARCHITECTURES(90 = H20/H100)。离线构建需要同时设置\-DLLAMA\_BUILD\_UI=OFF和\-DLLAMA\_USE\_PREBUILT\_UI=OFF,仅设置前者仍会尝试下载预构建资源。
然后
# 单条 prompt
build-cuda/bin/llama-cli -m Hy4-preview-Q4_K_M.gguf -ngl 99 -c 8192 \
--temp 0 -n 512 --no-warmup --jinja -st -f prompt.txt
# 吞吐量测试
build-cuda/bin/llama-bench -m Hy4-preview-STQ1_0.gguf -ngl 99 -p 512 -n 128 -r 3
- chat 模式必须使用
\-\-jinja。 HY4 的聊天模板不匹配 llama.cpp 的任何内置模板家族。 - GGUF 文件必须放在本地磁盘。 llama.cpp 使用 mmap 加载权重;通过 NFS 时,随机页错误速度约 12 MB/s,会使原本 1 分钟的加载时间延长至数小时。
- 单条 prompt 请使用
\-st \-f prompt\.txt。 此构建版本会忽略\-no\-cnv,且在 EOF 时会持续打印\>。 - 完整驻留显存需求:约 435 GiB(Q4_K_M)或约 214 GiB(STQ1_0)。显存不足时,请降低
\-ngl。
在 8x H20 上测量(已确认 GPU 空闲,权重全驻留显存):
| 预填充(pp512) | 解码(tg128) | |
|---|---|---|
| STQ1_0 | 204.56 ± 1.42 t/s | 19.52 ± 0.01 t/s |
读取这些文件的 Python 工具必须使用打了补丁的 gguf\-py,并使用绝对路径:sys\.path\.insert\(0, '/path/to/llama\.cpp/gguf\-py'\)。
3. STQ1_0 与混合精度策略
格式。 STQ1_0 来自 llama.cpp PR #22836。权重是三值 {\-d, 0, \+d},且每 4 个 lane 强制一个为零(3:4 稀疏度)。每 4 个权重存为一个 4-bit code 加一个 1-bit 表选择位,索引一个 32 项的码本;每 256 个权重共享一个 fp16 scale。因此每 256 个权重占 2 \+ 32 \+ 8 = 42 字节 = 1.3125 bpw。
我们的编码器。 上游量化器面向已落在三值网格上的 QAT 输入:它忽略 imatrix,设置 d = amax,并将 argmin \|x\| 置零。这对训练后量化(PTQ)效果较弱。我们保持格式逐字节一致,只更改两个决策:
- 加权最小二乘 scale:
d = sum(w*sel*x) / sum(w*sel^2)代替d = amax。 - imatrix 感知的零点放置 —— 将使
w[j]*(x[j]^2 - (\|x[j]\|-d)^2)最小的 lane 置零,即针对增量代价,而非单纯选择最小幅值。
两者交替进行 3 轮。在 1200 行真实专家权重上测量:仅最小二乘 scale 就带来 -89.7% 的加权 SSD,imatrix 项在残差上再贡献 -4.1%。主要收益来自 scale —— amax 会将 d 固定在 256 个权重中唯一的最大离群值上。
比特位分配。 三个路由专家族占所有参数的 97.7%,因此量化方案在其他张量上可以“挥霍“比特:
| 张量族 | STQ1_0 构建 | 原因 |
|---|---|---|
ffn\_gate\_exps/ffn\_up\_exps | STQ1_0(29 层)/ IQ2_XXS(48 层) | 体积主体;层选择基于 imatrix 推导 |
ffn\_down\_exps | IQ3_XXS,最后 3 层使用 IQ4_XS | 直接写入残差流,误差不会被后续的 gate 衰减,因此刻意提高两档 |
| attention out / gate / q_a | Q5_K | llama.cpp 仅在 n\_expert == 8 时自动提升这些层的精度,而 HY4 有 256 个专家 |
MLA q\_b/k\_b/v\_b/kv\_a\_mqa | Q8_0 | HY4 的拆分命名无法匹配 llama.cpp 的子串规则,因此未获得自动提升 |
| DSA indexer | Q8_0 / F32 | 105 个张量,共 0.21 GiB,决定每个 query 能看到哪 2048 个 token 的门控 |
iHC *\_fn、router、norms、sink | F32 | 与参考实现的 \_keep\_in\_fp32\_modules 一致 |
output(lm_head) | F32 | 通过 \-leave\-output\-tensor |
4. 构建运行时
从 bf16 重新量化
配方文件已包含在内。STQ1_0 强制需要 imatrix —— 其编码器需要它来进行 scale 求解和零点放置。
build-cuda/bin/llama-quantize --dry-run --imatrix imatrix.gguf \
--tensor-type-file Hy4-preview-STQ1_0.tensortypes --leave-output-tensor \
HY4.bf16.gguf out.gguf IQ1_M # Q4_K_M 构建:基础 ftype 使用 Q4_K_M
中文
1. 这是什么
Hy4\-preview\-Q4\_K\_M\.gguf—— 常规 Q4_K_M。多数张量为 Q4_K;ffn\_down\_exps由 llama.cpp 自身逻辑在 37 层使用 Q6_K。若显存无压力,请使用此版本。
Hy4\-preview\-STQ1\_0\.gguf—— 约 2.38 bpw 的混合精度,同一模型体积减半。路由专家的gate/up投影在 29 层使用 1.3125 bpw(STQ1_0),在另外 48 层使用 2.0625 bpw(IQ2_XXS)。详见第 3 节。
类型直方图:
Q4_K_M: F32 1080 / Q4_K 901 / Q8_0 78 / Q6_K 75
STQ1_0: F32 1080 / Q8_0 354 / Q5_K 234 / Q6_K 234 / IQ2_XXS 96 / IQ3_XXS 74 / STQ1_0 58 / IQ4_XS 3 / Q4_K 1
2. 如何使用
构建一个打了补丁的 llama.cpp
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
git checkout 0cea36222
git apply hy4-preview-patch/0001-hyv4-architecture.patch
git apply hy4-preview-patch/0002-stq1_0-quant-and-cuda.patch # 如果只用 Q4_K_M,可跳过
export PATH=/usr/local/cuda-13.0/bin:$PATH CUDACXX=/usr/local/cuda-13.0/bin/nvcc
cmake -B build-cuda -DGGML_CUDA=ON -DLLAMA_CURL=OFF -DGGML_NATIVE=OFF \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_ARCHITECTURES=90 \
-DLLAMA_BUILD_UI=OFF -DLLAMA_USE_PREBUILT_UI=OFF
cmake --build build-cuda --target llama-cli llama-bench llama-quantize -j 48
根据您的 GPU 设置\-DCMAKE\_CUDA\_ARCHITECTURES(90 = H20/H100)。离线构建需要同时设置\-DLLAMA\_BUILD\_UI=OFF和\-DLLAMA\_USE\_PREBUILT\_UI=OFF,仅设置前者仍会尝试下载预构建资源。
然后
# 单条 prompt
build-cuda/bin/llama-cli -m Hy4-preview-Q4_K_M.gguf -ngl 99 -c 8192 \
--temp 0 -n 512 --no-warmup --jinja -st -f prompt.txt
# 吞吐量测试
build-cuda/bin/llama-bench -m Hy4-preview-STQ1_0.gguf -ngl 99 -p 512 -n 128 -r 3
- chat 模式必须使用
\-\-jinja。 HY4 的聊天模板不匹配 llama.cpp 的任何内置模板家族。 - GGUF 文件必须放在本地磁盘。 llama.cpp 使用 mmap 加载权重;通过 NFS 时,随机页错误速度约 12 MB/s,会使原本 1 分钟的加载时间延长至数小时。
- 单条 prompt 请使用
\-st \-f prompt\.txt。 此构建版本会忽略\-no\-cnv,且在 EOF 时会持续打印\>。 - 完整驻留显存需求:约 435 GiB(Q4_K_M)或约 214 GiB(STQ1_0)。显存不足时,请降低
\-ngl。
在 8x H20 上测量(已确认 GPU 空闲,权重全驻留显存):
| 预填充(pp512) | 解码(tg128) | |
|---|---|---|
| STQ1_0 | 204.56 ± 1.42 t/s | 19.52 ± 0.01 t/s |
读取这些文件的 Python 工具必须使用打了补丁的gguf\-py,并使用绝对路径:sys\.path\.insert\(0, '/path/to/llama\.cpp/gguf\-py'\)。
3. STQ1_0 与混合精度策略
格式。 STQ1_0 来自 llama.cpp PR #22836。权重是三值 {\-d, 0, \+d},且每 4 个 lane 强制一个为零(3:4 稀疏度)。每 4 个权重存为一个 4-bit code 加一个 1-bit 表选择位,索引一个 32 项的码本;每 256 个权重共享一个 fp16 scale。因此每 256 个权重占 2 \+ 32 \+ 8 = 42 字节 = 1.3125 bpw。
我们的编码器。 上游量化器面向已落在三值网格上的 QAT 输入:它忽略 imatrix,设置 d = amax,并将 argmin \|x\| 置零。这对训练后量化(PTQ)效果较弱。我们保持格式逐字节一致,只更改两个决策:
- 加权最小二乘 scale:
d = sum(w*sel*x) / sum(w*sel^2)代替d = amax。 - imatrix 感知的零点放置 —— 将使
w[j]*(x[j]^2 - (\|x[j]\|-d)^2)最小的 lane 置零,即针对增量代价,而非单纯选择最小幅值。
两者交替进行 3 轮。在 1200 行真实专家权重上测量:仅最小二乘 scale 就带来 -89.7% 的加权 SSD,imatrix 项在残差上再贡献 -4.1%。主要收益来自 scale —— amax 会将 d 固定在 256 个权重中唯一的最大离群值上。
比特位分配。 三个路由专家族占所有参数的 97.7%,因此量化方案在其他张量上可以“挥霍“比特:
| 张量族 | STQ1_0 构建 | 原因 |
|---|---|---|
ffn\_gate\_exps/ffn\_up\_exps | STQ1_0(29 层)/ IQ2_XXS(48 层) | 体积主体;层选择基于 imatrix 推导 |
ffn\_down\_exps | IQ3_XXS,最后 3 层使用 IQ4_XS | 直接写入残差流,误差不会被后续的 gate 衰减,因此刻意提高两档 |
| attention out / gate / q_a | Q5_K | llama.cpp 仅在 n\_expert == 8 时自动提升这些层的精度,而 HY4 有 256 个专家 |
MLA q\_b/k\_b/v\_b/kv\_a\_mqa | Q8_0 | HY4 的拆分命名无法匹配 llama.cpp 的子串规则,因此未获得自动提升 |
| DSA indexer | Q8_0 / F32 | 105 个张量,共 0.21 GiB,决定每个 query 能看到哪 2048 个 token 的门控 |
iHC *\_fn、router、norms、sink | F32 | 与参考实现的 \_keep\_in\_fp32\_modules 一致 |
output(lm_head) | F32 | 通过 \-leave\-output\-tensor |
从 bf16 重新量化
配方文件已包含在内。STQ1_0 强制需要 imatrix —— 其编码器需要它来进行 scale 求解和零点放置。
build-cuda/bin/llama-quantize --dry-run --imatrix imatrix.gguf \
--tensor-type-file Hy4-preview-STQ1_0.tensortypes --leave-output-tensor \
HY4.bf16.gguf out.gguf IQ1_M # Q4_K_M 构建:基础 ftype 使用 Q4_K_M
文件
hy4-preview-patch/
0001-hyv4-architecture.patch 18 文件, +1632/-3 两个 GGUF 都需要此补丁
0002-stq1_0-quant-and-cuda.patch 25 文件, +683/-4 仅 STQ1_0 需要
Hy4-preview-STQ1_0.tensortypes STQ1_0 的配方
Hy4-preview-Q4_K_M.tensortypes Q4_K_M 的配方
相似文章
llama.cpp: Hy3 PR 与 GGUFs
Hy3 模型现已通过拉取请求在 llama.cpp 中得到支持,并提供 GGUF 量化版本。早期测试显示,在高端硬件上,Q2_K 模型能以 10-11 t/s 的速度生成连贯输出。
Hy3 1Bit 89-93 GB
Hy3 1-bit量化模型的公告,内存占用89-93 GB。
Deepseek V4 Flash 2位、3位和4位 GGUFs
DeepSeek V4 Flash 的 2位、3位和4位精度 GGUF 量化版本,已在 Hugging Face 上发布,可用于 llama.cpp 和 Ollama 等工具的本地推理。
这是我的 llama.cpp NVFP4/MXFP6 GGUF 量化工具
作者介绍了一款开源的 GGUF 量化工具,用于 llama.cpp,能够创建 NVFP4 和 MXFP6 量化模型,并采用 RSF、张量提升、动态量化等先进技术,质量优于现有方法(如 ModelOpt)。
@AdinaYakup: 很高兴看到实验室发布他们自己的 GGUFs 🔥 https://huggingface.co/AngelSlim/Hy4-preview-GGUF…
这条推文分享了腾讯 Hy4-preview 模型的 GGUF 构建版本,包括量化版本以及使用经过修补的 llama.cpp 运行它们的说明。