在高通 Hexagon 上运行 BitNet:自定义 1.58 位内核实践
发布时间:2026-06-02 21:46 浏览量:1
本文最初发表于 ENERZAi 官方网站,已获授权转载。
今天,我们很高兴分享一项团队长期以来所致力于的重要里程碑。ENERZAi 已成功通过 QNN,在高通 QCS6490 Hexagon NPU 上完成了 BitNet(b1.58)2B 模型的部署!
如果上面这句话让你感觉缩写词太多,不用担心。读完这篇文章,你将清楚地理解这件事的意义所在、为何如此之难,以及我们为何认为它预示着边缘设备 AI 能力的一次重要转变。
什么是 BitNet?
在深入探讨硬件部分之前,先来统一一下对 BitNet 的理解。
BitNet 是由微软研究院推出的大语言模型架构,它从根本上重新思考了模型权重的表达方式。BitNet b1.58 将模型中的权重限定为三个可能的值:–1、0 或 +1,即所谓的三值权重(Ternary Weights)。"1.58"这一命名来源于信息论:log?(3) ≈ 1.58,这是从理论上表示三种不同状态所需的最少比特数。
这一架构具有极小的内存占用,非常适合边缘端部署。我们在此前的文章中也对自研的 1.58 位量化工作进行了深入探讨,感兴趣的读者可参考相关内容。
核心挑战:NPU 不原生支持三值运算
BitNet b1.58 是一种以三元值(–1、0、+1)表示的架构,使其异常紧凑,非常适合边缘部署。
然而,包括高通 QNN 在内的大多数 NPU SDK 仅支持标准量化格式,BitNet 的三值运算并不在其支持之列,这意味着开箱即用的情况下,NPU 上根本不存在可执行的路径。
我们的突破:自定义 1.58 位内核
ENERZAi 通过为高通 Hexagon 架构开发自定义 1.58 位内核,成功在高通 QCS6490 Hexagon NPU 上以合理的内存占用和吞吐量运行了 BitNet(b1.58)2B 模型。
这是迈向在 NPU 上运行超过 80 亿参数级别模型这一目标的早期但意义重大的概念验证,而我们认为,这一规模正是实现真正边缘智能所必须达到的。
展望未来
这一成果不仅验证了 BitNet 在 NPU 上运行的可行性,更为未来边缘设备承载更大规模大语言模型奠定了基础。随着 AI 推理逐步向终端设备迁移,对低比特、高效率架构的探索将变得愈发关键。ENERZAi 将持续深耕这一方向,推动边缘 AI 的边界不断向前延伸。
Q&A
Q1:BitNet b1.58 架构的"1.58"是什么意思?
A:BitNet b1.58 中的"1.58"来源于信息论,具体指 log?(3) ≈ 1.58,即从理论上表示三种不同状态(–1、0、+1)所需的最少比特数。BitNet b1.58 将模型权重限定为这三个三元值,极大地压缩了模型体积,使其非常适合在内存资源有限的边缘设备上部署。
Q2:高通 QNN 为什么不能直接支持 BitNet 的三值运算?
A:高通 QNN 等主流 NPU SDK 通常只支持标准量化格式(如 INT8、INT4 等),而 BitNet b1.58 使用的三值权重(–1、0、+1)并不在其原生支持范围之内。因此,开箱即用的情况下,NPU 上根本没有可直接执行 BitNet 三值运算的路径,必须通过开发自定义内核来解决这一问题。
Q3:ENERZAi 是如何解决 BitNet 在高通 Hexagon NPU 上无法运行的问题的?
A:ENERZAi 专门为高通 Hexagon 架构开发了自定义 1.58 位内核,从而绕过了 QNN 不支持三值运算的限制。通过这一方式,团队成功在高通 QCS6490 Hexagon NPU 上以合理的内存占用和吞吐量运行了 BitNet(b1.58)2B 模型,完成了一次具有重要意义的概念验证。