Hy4的官方1位量化版本??? 👀

Reddit r/LocalLLaMA 模型

摘要

本文介绍了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_0204.56 ± 1.42 t/s19.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)效果较弱。我们保持格式逐字节一致,只更改两个决策:

  1. 加权最小二乘 scale:d = sum(w*sel*x) / sum(w*sel^2) 代替 d = amax。
  2. 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\_expsSTQ1_0(29 层)/ IQ2_XXS(48 层)体积主体;层选择基于 imatrix 推导
ffn\_down\_expsIQ3_XXS,最后 3 层使用 IQ4_XS直接写入残差流,误差不会被后续的 gate 衰减,因此刻意提高两档
attention out / gate / q_aQ5_Kllama.cpp 仅在 n\_expert == 8 时自动提升这些层的精度,而 HY4 有 256 个专家
MLA q\_b/k\_b/v\_b/kv\_a\_mqaQ8_0HY4 的拆分命名无法匹配 llama.cpp 的子串规则,因此未获得自动提升
DSA indexerQ8_0 / F32105 个张量,共 0.21 GiB,决定每个 query 能看到哪 2048 个 token 的门控
iHC *\_fn、router、norms、sinkF32与参考实现的 \_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_0204.56 ± 1.42 t/s19.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)效果较弱。我们保持格式逐字节一致,只更改两个决策:

  1. 加权最小二乘 scale:d = sum(w*sel*x) / sum(w*sel^2) 代替 d = amax。
  2. 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\_expsSTQ1_0(29 层)/ IQ2_XXS(48 层)体积主体;层选择基于 imatrix 推导
ffn\_down\_expsIQ3_XXS,最后 3 层使用 IQ4_XS直接写入残差流,误差不会被后续的 gate 衰减,因此刻意提高两档
attention out / gate / q_aQ5_Kllama.cpp 仅在 n\_expert == 8 时自动提升这些层的精度,而 HY4 有 256 个专家
MLA q\_b/k\_b/v\_b/kv\_a\_mqaQ8_0HY4 的拆分命名无法匹配 llama.cpp 的子串规则,因此未获得自动提升
DSA indexerQ8_0 / F32105 个张量,共 0.21 GiB,决定每个 query 能看到哪 2048 个 token 的门控
iHC *\_fn、router、norms、sinkF32与参考实现的 \_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

Reddit r/LocalLLaMA

Hy3 模型现已通过拉取请求在 llama.cpp 中得到支持,并提供 GGUF 量化版本。早期测试显示,在高端硬件上,Q2_K 模型能以 10-11 t/s 的速度生成连贯输出。

Hy3 1Bit 89-93 GB

Reddit r/LocalLLaMA

Hy3 1-bit量化模型的公告,内存占用89-93 GB。

Deepseek V4 Flash 2位、3位和4位 GGUFs

Reddit r/LocalLLaMA

DeepSeek V4 Flash 的 2位、3位和4位精度 GGUF 量化版本,已在 Hugging Face 上发布,可用于 llama.cpp 和 Ollama 等工具的本地推理。

这是我的 llama.cpp NVFP4/MXFP6 GGUF 量化工具

Reddit r/LocalLLaMA

作者介绍了一款开源的 GGUF 量化工具,用于 llama.cpp,能够创建 NVFP4 和 MXFP6 量化模型,并采用 RSF、张量提升、动态量化等先进技术,质量优于现有方法(如 ModelOpt)。