@AdinaYakup: 很高兴看到实验室发布他们自己的 GGUFs 🔥 https://huggingface.co/AngelSlim/Hy4-preview-GGUF…

X AI KOLs Timeline 新闻

摘要

这条推文分享了腾讯 Hy4-preview 模型的 GGUF 构建版本,包括量化版本以及使用经过修补的 llama.cpp 运行它们的说明。

很高兴看到实验室发布他们自己的 GGUFs 🔥 https://huggingface.co/AngelSlim/Hy4-preview-GGUF…
查看原文
查看缓存全文

缓存时间: 2026/09/03 14:11

很高兴看到各实验室开始发布自己的GGUF版本🔥 https://huggingface.co/AngelSlim/Hy4-preview-GGUF…


AngelSlim/Hy4-preview-GGUF · Hugging Face

来源:https://huggingface.co/AngelSlim/Hy4-preview-GGUF
三个版本的 Hy4-Preview GGUF 构建:https://huggingface.co/tencent/Hy4-preview

语言: 英文 (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.gguf435.20 GiB4.86
Hy4-preview-UD-IQ1_M.gguf219.83 GiB2.44
Hy4-preview-STQ1_0.gguf213.66 GiB2.38

两个文件均无法在原版 llama.cpp 上运行。
hyv4 架构尚未合入上游。需应用 hy4-preview-patch/ 目录中的补丁。


英文 (English)

1. 文件说明

Hy4-preview-Q4_K_M.gguf — 常规 Q4_K_M 量化。多数张量为 Q4_K;ffn_down_exps 的 37 层根据 llama.cpp 自身逻辑被量化为 Q6_K。除非内存受限,否则请使用此版本。

Hy4-preview-UD-IQ1_M.gguf — 采用 UD-IQ1_M 策略的混合精度量化,约 2.44 bpw,相同模型体积减半。路由专家的 gate/up 投影层分别使用 1.75 bpw (IQ1_M) 和 2.0625 bpw (IQ2_XXS)。

Hy4-preview-STQ1_0.gguf — 采用 MIX-STQ1_0 策略的混合精度量化,约 2.38 bpw,相同模型体积减半。路由专家的 gate/up 投影层在 29 层使用 1.3125 bpw (STQ1_0),其余 48 层使用 2.0625 bpw (IQ2_XXS)。详见第 3 节。

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
  • 聊天必须使用 --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

在 8×H20 上实测性能:

预填充 (pp512)解码 (tg128)
204.56 ± 1.42 t/s20.47 ± 0.02 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},且每四个通道强制一个为零(3:4 稀疏)。每 4 个权重存储为一个 4-bit 编码加一个 1-bit 表索引位,索引一个 32 项的码本;每 256 个权重共用一个 fp16 缩放因子。即每 256 个权重占 2 + 32 + 8 = 42 字节 = 1.3125 bpw

我们的编码器。 上游的量化器针对已落在三值网格上的 QAT 输入:它忽略 imatrix,设 d = amax,并将零置于 argmin |x|。这对训练后量化(PTQ)效果不佳。我们保持格式逐字节一致,仅修改两个决策:

  1. 加权最小二乘缩放d = sum(w*sel*x) / sum(w*sel²),取代 d = amax
  2. imatrix 感知的零值位置:将使 w[j]*(x[j]² - (|x[j]| - d)²) 最小的通道置零,即基于增量代价而非单纯最小幅度。

两者交替迭代 3 轮。在 1200 行真实专家权重上实测:仅最小二乘缩放就带来 -89.7% 的加权 SSD 改善,imatrix 项在残差上再优化 -4.1%。主要收益来自缩放因子——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直接写入残差流,误差不会被后续门控衰减,故刻意提高两档
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 索引器Q8_0 / F32105 个张量共 0.21 GiB,是控制每个查询能访问哪 2048 个 token 的关键闸门
iHC *_fn、router、norms、sinkF32对齐参考实现的 _keep_in_fp32_modules
output (lm_head)F32通过 --leave-output-tensor 保留

4. 构建运行时

从 bf16 重新量化

配方文件已随附。STQ1_0 强制需要 imatrix——其编码器使用它进行缩放因子求解和零值位置选择。

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

中文

文件大小bpw说明
Hy4-preview-Q4_K_M.gguf435.20 GiB4.86
Hy4-preview-UD-IQ1_M.gguf219.83 GiB2.44
Hy4-preview-STQ1_0.gguf213.66 GiB2.38

1. 文件说明

Hy4-preview-Q4_K_M.gguf — 常规 Q4_K_M。多数张量为 Q4_K,ffn_down_exps 的 37 层根据 llama.cpp 自身逻辑被量化为 Q6_K。没有显存压力就用这个。

Hy4-preview-UD-IQ1_M.gguf — 采用 UD-IQ1_M 策略的混合精度,约 2.44 bpw,相同模型体积减半

Hy4-preview-STQ1_0.gguf — 采用 MIX-STQ1_0 策略的混合精度,约 2.38 bpw,相同模型体积减半。路由专家的 gate/up 在 29 层使用 1.3125 bpw (STQ1_0),其余 48 层使用 2.0625 bpw (IQ2_XXS)。见第 3 节。

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
  • 聊天必须加 --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

在 8×H20 上实测(已确认 GPU 空闲、权重全驻显存):

预填充 (pp512)解码 (tg128)
204.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},且每四个通道强制一个为零(3:4 稀疏)。每 4 个权重存成 4-bit 编码加 1-bit 选表位,索引一张 32 项码本;每 256 个权重共用一个 fp16 缩放因子。即每 256 个权重占 2 + 32 + 8 = 42 字节 = 1.3125 bpw

我们的编码器。 上游的量化器面向已落在三值网格上的 QAT 输入:直接忽略 imatrix,取 d = amax,并把零放在 argmin |x|。这对训练后量化 (PTQ) 很弱。我们保持格式逐字节一致,只改两个决策:

  1. 加权最小二乘缩放d = sum(w*sel*x) / sum(w*sel²),取代 d = amax
  2. imatrix 感知的零值位置:零掉使 w[j]*(x[j]² - (|x[j]| - d)²) 最小的通道,即比较增量代价,而非单纯的最小幅度。

两者交替 3 轮。在 1200 行真实专家权重上实测:仅最小二乘缩放就带来 -89.7% 加权 SSD 改善,imatrix 项在残差上再补 -4.1%主要收益来自缩放因子——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直接写回残差流,误差不会被后续门控衰减,故刻意提高两档
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 索引器Q8_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——它的编码器要用 imatrix 做缩放因子求解与零值位置选择。

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 配方

腾讯混元 (@TencentHunyuan):
我们将 Hy4-preview 从 1.5TB 压缩到约 200GiB GGUF,它仍然表现良好!

遇见 MIX-STQ1_0。
技巧不仅在于降低比特数,更在于决定何处降低:校准数据为每一层选择比特宽度,有些低至 1.31-bit STQ1_0,有些则保持在 2.06-bit IQ2_XXS。同样的预算,更低的…

相似文章

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

Reddit r/LocalLLaMA

本文介绍了Hy4预览模型的官方1位量化构建版本,提供尺寸减小的GGUF文件,以及在修改后的llama.cpp上运行的说明。

llama.cpp: Hy3 PR 与 GGUFs

Reddit r/LocalLLaMA

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

AngelSlim/Hy3-GGUF

Hugging Face Models Trending

AngelSlim/Hy3-GGUF 是一个用于在 llama.cpp 上量化和部署 Hy3 大语言模型的工具包,具有 MTP 自我推测解码和思考/工具调用解析器,以实现高效推理。