Repository navigation
v2.3.0
v2.3.0:arm64 多档指令集 + FlashAttention + KV 量化
1. 多档指令集:让新芯片跑更快的量化内核
以前是单一构建,固定 armv8.2-a+dotprod+fp16,所有 arm64 机型只能跑同一档,且缺 dotprod 的老机被直接拒绝。
现在改用 GGML_CPU_ALL_VARIANTS,为 Android arm64 编出多份 CPU 后端,运行时由 ggml_backend_score() 按 HWCAP 打分,只加载分数最高的那一档:
| 后端 | 指令集 | 典型芯片 |
|---|---|---|
| android_armv8.0_1 | 基线 armv8-a | 所有 arm64(兜底) |
| android_armv8.2_1/2 | dotprod / +fp16 | 2018 年后的处理器 |
| android_armv8.6_1 | +i8mm | 骁龙 8 Gen 1+ / 天玑 9000+ 等 |
| android_armv9.0_1 | +SVE2 | 天玑 9200+ 等 |
| android_armv9.2_1/2 | +SVE/+SME | 最新旗舰 |
产物反汇编核对:armv8.0 档 0 条 sdot/smmla,armv8.2 档 747 条 sdot,armv8.6 档额外 174 条 smmla(i8mm),armv9.0 档 308 条 smmla。
兼容性反而更好:基线改回 armv8-a 后,移除了原先 dotprod+fp16 的硬门槛,老 arm64 也能跑了。
2. FlashAttention + KV 缓存量化
- 上下文开启
flash_attn_type = AUTO(模型支持时减少注意力读写) - KV 缓存量化为 q8_0:注意力读写量减半,KV 内存约为原来的 1/2
3. 输出上限进一步放开
- 单次最长输出默认 1024 → 4096(可调至 8192)
- 默认上下文 4096 → 8192(可调至 32768)
- 输出必须挤在上下文里(上下文 = 提示词/历史 + 本次输出),设置时会自动收敛到 3/4 以内
- 新增「继续生成」:长按回复即可接着往下写
说明
- 本次为纯 CPU 推理:Vulkan/OpenCL 卸载所需工具链(glslc / Vulkan SDK)在构建环境不具备,未启用
- 因此提速幅度与芯片强相关:支持 i8mm/SVE 的新机型收益最大(量化矩阵乘走
smmla),老机型与之前持平 - 由于多了几份后端
.so,安装包由 12 MB 增至约 17 MB - 安装包为 CI 正式签名(与仓库
dist/同一签名),可直接覆盖安装
Full Changelog: v2.2.0...v2.3.0