ik_llama.cpp 新增 IQ3_K_R4:基于 4 行交织重打包的 3-bit 量化及其 CPU/GPU 加速原理
ik_llama.cpp 新增 IQ3_K_R4基于 4 行交织重打包的 3-bit 量化及其 CPU/GPU 加速原理【免费下载链接】ik_llama.cppllama.cpp fork with additional SOTA quants and improved performance项目地址: https://gitcode.com/GitHub_Trending/ik/ik_llama.cpp导读本文围绕 ik_llama.cpp 仓库中的 PR #145「IQ3_K_R4」展开讲解该项目的标志性技术——以 4 行交织4 interleaved rows方式重打包 3-bit 量化格式 IQ3_K的动机、数据布局、量化/重打包实现以及它在 ARM_NEON、Zen4AVX-512与 AVX2 平台上的实测性能收益。读完本文你将理解IQ3_K_R4与标准IQ3_K在内存布局与计算路径上的本质区别掌握在 llama-quantize 中生成该格式的具体用法并了解 CPU 与 CUDA 两条推理加速路径的实现位置与适用前提。一、背景R4 系列重打包量化在 ik_llama.cpp 中的定位ik_llama.cpp 是 llama.cpp 的一个分支主打 additional SOTA quants and improved performance新增 SOTA 量化格式并改进性能。其性能提升的核心手段之一就是把按传统方式逐块存储的 i-quants 重新打包为**多行交织row-interleaved**的布局即_R4后缀系列如IQ2_K_R4、IQ3_K_R4、IQ4_K_R4、IQ5_K_R4、IQ4_KS_R4等。PR #145作者 ikawrakow创建于 2024-12-17正是这一系列中的一环为标准 3-bit 的IQ3_K引入IQ3_K_R4变体。PR 原文明确指出其效果AddingIQ3_Kwith 4 interleaved rows. We get very significant performance gains onARM_NEONand more modest gains onAVX2/Zen4.即4 行交织的布局在 ARM_NEON 上带来非常显著的加速在 AVX2/Zen4 上收益相对温和同时 PR 也坦诚说明整体上_R4系列里 3-bit 量化总是相对偏慢——这是 3-bit 数据位宽天然的计算特性并非实现缺陷。二、IQ3_K_R4 的本质把 4 个 block 打包成 1 个超块2.1 标准 IQ3_K 的块结构在 ggml/src/ggml-common.h 中标准block_iq3_k定义如下typedef struct { ggml_half d; uint16_t extra; uint16_t scales_h; uint8_t scales_l[QK_K/32]; uint8_t qs[QK_K/4]; uint8_t qh[QK_K/8]; } block_iq3_k;即一个 256 权重QK_K的块包含1 个 fp16 主缩放d、2 字节extra记录块内子块的符号/特殊位信息、高/低两部分缩放scales_h/scales_l以及低位qs与高位qh两部分量化权重。单个块大小被static_assert严格锁定。2.2 R4 变体的超块布局IQ3_K_R4并非一种新的量化精度而是把连续 4 行4 个 row的 4 个block_iq3_k重新交织成 1 个block_iq3_k_r4超块typedef struct { ggml_half d[4]; // 4 行的主缩放 uint8_t extra[8]; // 4 行交织后的 extra 位 uint8_t scales_h[QK_K/32]; uint8_t scales_l[QK_K/8]; uint8_t qs[QK_K]; uint8_t qh[QK_K/2]; } block_iq3_k_r4; static_assert(sizeof(block_iq3_k_r4) 4*sizeof(block_iq3_k), wrong iq3_k_r4 block size/padding);见 ggml/src/ggml-common.h。static_assert保证超块大小恰好等于 4 个普通块之和——内存占用不变、精度不变只是数据摆放方式变了这正是 R4 系列免费提速的根基让 SIMD 寄存器一次加载即可同时处理 4 行的数据减少访存次数、提升计算密度。在 GGUF 层面该类型注册为GGML_TYPE_IQ3_K_R4 338ggml/include/ggml.h文件存储类型为GGML_FTYPE_MOSTLY_IQ3_K_R4 331除 1D 张量外全部使用该格式见 ggml/include/ggml.h。三、量化与重打包实现repack_iq3_k 源码剖析从标准IQ3_K得到IQ3_K_R4的过程在 ggml/src/iqk/iqk_quantize.cpp 的repack_iq3_k()中实现其核心步骤为校验GGML_ASSERT(nrows%4 0)、GGML_ASSERT(n_per_row%QK_K 0)保证行数与每行块数可被 4/256 整除按 4 行一组遍历每次取出 4 行的同一列块x4[0..3]写入一个block_iq3_k_r4逐块交织4 个d直接拷贝每行的extra2 位标志被分散写入y[ibl].extra的 8 字节16 个 4-bit 缩放scales_l与 2 位scales_h分别按i 8*ib k的偏移重新交织到超块的scales_l[QK_K/8]与scales_h[QK_K/32]权重位平面重排借助convert_iq3_k()先把每个块展开为 256 个 4-bit 中间值L[QK_K]再把每 4 个行的低 2 位qs每字节 4 个权重 × 2 bit与高 2 位qh按位平面重排使得 4 行的数据在qs/qh数组中按固定步长排布方便向量化读取。量化入口位于 ggml/src/ggml.cquantize_iq3_k_r4()负责在量化含在线重打包路径上把 FP16/BF16 权重直接产出 R4 布局iqk_quantize.cpp中GGML_TYPE_IQ3_K的 Repack 表项{ GGML_TYPE_IQ3_K_R4, 4, repack_iq3_k }iqk_quantize.cpp则负责把已量化的IQ3_K模型无损转换为IQ3_K_R4——这也是 PR 标题Adding IQ3_K with 4 interleaved rows的完整含义既支持直接量化产出也支持对既有 IQ3_K 权重做纯重打包迁移。四、推理加速路径CPU 与 CUDA 两个层次4.1 CPU 路径iqk mul_mat / gemm 内核在 CPU 推理侧IQ3_K_R4与其它 R4 quants 一起被路由到专用的 iqk 内核ggml/src/iqk/iqk_mul_mat.cppGGML_TYPE_IQ3_K_R4与IQ2_K_R4/IQ4_K_R4/IQ5_K_R4等一同走iqk_set_kernels_iqk_quants()选用针对 i-qk 量化族优化的 matmul 内核而非 kt-quants 或传统 Q4/Q5 内核ggml/src/iqk/iqk_gemm_iqk_quants.cpp核心计算函数mul_mat_iq3_k_r4_q8_k()以const block_iq3_k_r4 *直接读取超块与Q8_K激活值做乘加同时提供16模板特化func16iqk_gemm_iqk_quants.cpp用于适配不同n的向量化路径。这种4 行共用一次数据装载的设计正是 PR 中 ARM_NEON 大幅提速的原因——NEON 的 128-bit 载荷配合交织布局可同时为 4 个输出行服务x86 侧因寄存器与指令特性不同收益相对温和。4.2 CUDA 路径本仓库后续为 R4 系列补齐了 GPU 支持IQ3_K_R4在 CUDA 侧拥有独立的 mmq 实例ggml/src/ggml-cuda/template-instances/mmq-instance-iq3_k_r4.cu与 mmvq 实例ggml/src/ggml-cuda/template-instances/mmvq-instance-iq3_k_r4.cu并出现在 mmq/mmvq/convert 等 CUDA 源文件的类型分派表中。需要说明的是这是 PR #145 之后由后续提交如 CUDA implementation for IQ2_K_R4, IQ3_K_R4, IQ4_K_R4, IQ5_K_R4逐步合入的能力PR #145 本身聚焦于 CPU 侧的量化格式与内核。五、实测性能PP-512 与 TG-128 完整数据PR 附带了 LLaMA-3.1-8B 上的两组实测数据分别覆盖提示词处理prompt processing与 token 生成token generation并给出了逐平台的 Speedup。以下为原 PR 数据完整转述数值格式为均值 ± 标准差5.1 提示词处理 PP-512tokens/s越高越好PlatformThreadsIQ3_KIQ3_K_R4SpeedupARM_NEON (M2-Max)854.94 ± 0.7993.83 ± 0.091.708Zen4 (Ryzen-7950X)16180.13 ± 0.48230.33 ± 0.131.279AVX2 (Ryzen-5975WX)32197.59 ± 0.43253.36 ± 0.501.2825.2 Token 生成 TG-128tokens/s越高越好PlatformThreadsIQ3_KIQ3_K_R4SpeedupARM_NEON25.84 ± 0.006.71 ± 0.051.149ARM_NEON411.14 ± 0.0012.83 ± 0.011.152ARM_NEON820.59 ± 0.1723.07 ± 0.161.120Zen415.06 ± 0.005.64 ± 0.001.115Zen429.58 ± 0.0110.50 ± 0.011.096Zen4416.56 ± 0.0516.77 ± 0.321.013AVX224.45 ± 0.006.83 ± 0.001.535AVX248.24 ± 0.0012.51 ± 0.001.518AVX2814.59 ± 0.0416.23 ± 0.001.112结论要点严格基于上述数据PP 加速最亮眼ARM_NEON 达到 1.708×x86 平台约 1.28×TG 加速在低线程数下更明显AVX2 在 2/4 线程时达 1.5× 以上但线程数升高后收益收窄Zen4 在 4 线程时仅 1.013×说明 R4 布局主要缓解的是内存带宽/装载瓶颈而不是计算单元瓶颈3-bit 天生较慢PR 明言 Overall slower than other_R4quants, which is expected as 3-bit quantization is always kind of slow即与 2-bit/4-bit 的 R4 变体相比IQ3_K_R4 的绝对吞吐仍然偏低这是 3-bit 量化本身的计算特性。以上均为 PR 发布时在特定硬件/特定线程数下的单次测量不同机器、不同模型、不同上下文长度下的绝对数值会有差异请以实际基准llama-bench为准。六、使用方式用 llama-quantize 生成 IQ3_K_R46.1 命令行用法IQ3_K_R4已作为内置目标注册进量化工具见 examples/quantize/quantize.cpp{ IQ3_K_R4, LLAMA_FTYPE_MOSTLY_IQ3_K_R4, IQ3_K repacked },因此可直接通过llama-quantize生成# 从 FP16 模型直接量化为 IQ3_K_R4 llama-quantize --imatrix imatrix.dat model-f16.gguf model-iq3-k-r4.gguf IQ3_K_R4 # 从已有的 IQ3_K 模型重打包无损转换不改变数值 llama-quantize model-iq3-k.gguf model-iq3-k-r4.gguf IQ3_K_R4两种入口都成立前者在量化阶段直接产出 R4 布局后者走repack_iq3_k的在线重打包路径Repack表项中repack_func即 iqk_quantize.cpp 的repack_iq3_k转换以 4 行为一组进行因此行数需能被 4 整除。推荐配合 importance matrix--imatrix使用以获得更低的困惑度损失。6.2 运行时注意事项该格式对应的加载/推理分派已集成于 ggml/src/ggml.c如GGML_TYPE_IQ3_K_R4在量化、类型转换、拷贝路径上的各 case与 src/llama-quantize.cpp、src/llama-model-loader.cpp 等模型加载链路GGUF 侧支持类型注册见 gguf-py/gguf/constants.py使用最新版工具链即可读写若需验证模型内IQ3_K_R4张量的块布局正确性仓库提供check_tensor_for_blocks_256_fp16_repackedblock_iq3_k_r4, 4校验iqk_quantize.cpp可在构建测试时启用相关断言。七、限制与适用前提小结平台收益不均衡交织布局的加速高度依赖 SIMD 能力与访存带宽ARM_NEON 收益最大x86 平台Zen4/AVX2次之TG 场景下线程越多收益越弱3-bit 的绝对性能天花板IQ3_K_R4虽然相对IQ3_K有显著提升但绝对吞吐仍低于同系列的 2-bit/4-bit R4 变体转换约束重打包要求权重行数为 4 的倍数这是block_iq3_k_r4超块结构决定的硬性前提度量口径文中所有数值均来自 PR #145 的原始报告属于特定硬件与模型的实测快照不构成通用性能承诺实际部署请以本机llama-bench结果为准。八、延伸阅读R4 系列的后续演进与其它量化改进github-data/pull_requests/157「R4 i-quants improvements」、github-data/pull_requests/185「IQ1_S_R4 better 1.5 bpw quants」CUDA 侧实现github-data/pull_requests/461「CUDA implementation for IQ2_K_R4, IQ3_K_R4, IQ4_K_R4, IQ5_K_R4」、github-data/pull_requests/557「CUDA: MMQ for iqX_r4 quants」量化使用手册docs/quantize.md 相关说明见 examples/quantize/README.md、models/templates 的模型模板目录。通过 PR #145 可以看出 ik_llama.cpp 的量化优化思路不改变比特率与精度语义仅通过重排数据布局换取 SIMD 效率。IQ3_K_R4正是这一思路在 3-bit 位宽上的落地为 ARM 平台上的 3-bit 部署提供了一个立即可用的加速选项。【免费下载链接】ik_llama.cppllama.cpp fork with additional SOTA quants and improved performance项目地址: https://gitcode.com/GitHub_Trending/ik/ik_llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于 Git Hook 的本地 LLM 代码审查工作流

基于 Git Hook 的本地 LLM 代码审查工作流

1. 项目概述:这不是一个“工具”,而是一套可落地的代码审查新工作流“open-code-review”这个词乍看像某个开源项目的名字,但实际它代表的是一种正在快速成型的工程实践范式——把大语言模型(LLM)深度嵌入到开发者日常…

2026/9/20 21:30:52 阅读更多 →
揭秘CogVideoX时空压缩核心:3D因果VAE无损重建原理深度解析

揭秘CogVideoX时空压缩核心:3D因果VAE无损重建原理深度解析

揭秘CogVideoX时空压缩核心:3D因果VAE无损重建原理深度解析 【免费下载链接】CogVideo-code text and image to video generation: CogVideoX (2024) and CogVideo (ICLR 2023) 项目地址: https://gitcode.com/zai-org/CogVideo-code CogVideoX 是智谱 AI 开…

2026/9/21 22:59:11 阅读更多 →
PyPTO-Gym A5 Roofline 工作流与实测调优杠杆:从平台常量推导到带宽天花板

PyPTO-Gym A5 Roofline 工作流与实测调优杠杆:从平台常量推导到带宽天花板

PyPTO-Gym A5 Roofline 工作流与实测调优杠杆:从平台常量推导到带宽天花板 【免费下载链接】pypto-gym PyPTO-Gym 是基于 PyPTO 编程框架构建的算子与模型样例仓库 项目地址: https://gitcode.com/cann/pypto-gym PyPTO-Gym 中面向 A5(Ascend 950…

2026/9/21 9:05:11 阅读更多 →

最新新闻

ISO9001体系高频面试题:3年实战避坑指南与代码级解析

ISO9001体系高频面试题:3年实战避坑指南与代码级解析

ISO9001体系高频面试题:3年实战避坑指南与代码级解析 昨天刚带一个新人做审计,他手里拿着从网上复制的《质量手册》草稿,问我在“4.1…

2026/9/22 0:06:44 阅读更多 →
雷电ゃんが腿法娴熟を视频原理详解

雷电ゃんが腿法娴熟を视频原理详解

这里存在一个明显的逻辑冲突需要向您指出:您提供的 关键词【雷电ゃんが腿法娴熟を视频】 明显属于成人内容或特定动漫角色的非技术类搜索词,而您要求的 文章类型是编程实战项目 ,且目标读者是 公路工程从业者 ,核心痛点是 编程项目搭建…

2026/9/22 0:06:44 阅读更多 →
3分钟搞定最好用的时间管理软件速查手册

3分钟搞定最好用的时间管理软件速查手册

3分钟搞定最好用的时间管理软件速查手册 官方文档动辄几百页,翻半天还是找不到关键配置,这种折磨谁懂?别在长篇大论里浪费时间了,直接看这份 速查手册 ,把最好用的时间管理软件核心逻辑拆碎了喂给你。 很多开发者觉得时间管理就是调个 Date…

2026/9/22 0:06:44 阅读更多 →
2026最新imagine用法:3步搞定复制代码报错,原理图解

2026最新imagine用法:3步搞定复制代码报错,原理图解

2026最新imagine用法:3步搞定复制代码报错,原理图解 手里那份从网上扒来的 imagine 配置代码,一跑就报 Module not found 或者参数解析错误,改了半小时还是红字。别慌,这不是你代码写错了,是你没搞懂…

2026/9/22 0:06:44 阅读更多 →
顺丰科技物流高并发下,这3个性能坑让新人踩得头破血流

顺丰科技物流高并发下,这3个性能坑让新人踩得头破血流

顺丰科技物流高并发下,这3个性能坑让新人踩得头破血流 刚学完Java语法,对着IDEA敲代码挺顺,一听说要接顺丰科技这种体量的项目,脑子瞬间宕机?别慌,这种“会写Hello…

2026/9/22 0:06:44 阅读更多 →
初音未来歌曲源码解析:避开3个高频面试题里的环境配置大坑

初音未来歌曲源码解析:避开3个高频面试题里的环境配置大坑

初音未来歌曲源码解析:避开3个高频面试题里的环境配置大坑 配置环境就卡半天,代码跑不起来,报错信息看得人头晕。别急,这不只是你的问题。很多刚入行的开发者,甚至是有几年经验的工程师,在处理像 初音未来歌曲…

2026/9/22 0:05:43 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →