编译版本,默认配置,android-ndk-r30,ohos-sdk-5.0.3,xcode 16.4,ubuntu-22.04,ubuntu-24.04,ubuntu-26.04,vs2015,vs2017,vs2019,vs2022,vs2026,emscripten-6.0.12
| file | content | arch |
|---|---|---|
| ncnn-full-source.zip | 包含全部 submodule 代码的完整源码 | |
| ncnn-android.zip | android 静态库/动态库 | armeabi-v7a + arm64-v8a + x86 + x86_64 + riscv64 |
| ncnn-android-vulkan.zip | android 静态库/动态库,支持 GPU | armeabi-v7a + arm64-v8a + x86 + x86_64 + riscv64 |
| ncnn-harmonyos.zip | harmonyos 静态库/动态库 | armeabi-v7a + arm64-v8a + x86_64 |
| ncnn-harmonyos-vulkan.zip | harmonyos 静态库/动态库,支持 GPU | armeabi-v7a + arm64-v8a + x86_64 |
| ncnn-apple.zip | apple xcframework,ios + ios-simulator + macos + mac-catalyst + watchos + watchos-simulator + tvos + tvos-simulator + visionos + visionos-simulator | arm64 + arm64e + x86_64 |
| ncnn-apple-vulkan.zip | apple xcframework,ios + ios-simulator + macos + mac-catalyst + watchos + watchos-simulator + tvos + tvos-simulator + visionos + visionos-simulator,支持 GPU | arm64 + arm64e + x86_64 |
| ncnn-ios.zip | ios 静态库 | arm64 |
| ncnn-ios-vulkan.zip | ios 静态库,支持 GPU | arm64 |
| ncnn-ios-simulator.zip | ios simulator 静态库 | x86_64 + arm64 |
| ncnn-ios-simulator-vulkan.zip | ios simulator 静态库,支持 GPU | x86_64 + arm64 |
| ncnn-macos.zip | macos 静态库 | x86_64 + arm64 |
| ncnn-macos-vulkan.zip | macos 静态库,支持 GPU | x86_64 + arm64 |
| ncnn-mac-catalyst.zip | mac catalyst 静态库 | x86_64 + arm64 |
| ncnn-mac-catalyst-vulkan.zip | mac catalyst 静态库,支持 GPU | x86_64 + arm64 |
| ncnn-watchos.zip | watchos 静态库 | armv7k + arm64_32 |
| ncnn-watchos-simulator.zip | watchos simulator 静态库 | x86_64 + arm64 |
| ncnn-tvos.zip | tvos 静态库 | x86_64 + arm64 |
| ncnn-tvos-vulkan.zip | tvos 静态库,支持 GPU | x86_64 + arm64 |
| ncnn-tvos-simulator.zip | tvos simulator 静态库 | x86_64 + arm64 |
| ncnn-tvos-simulator-vulkan.zip | tvos simulator 静态库,支持 GPU | x86_64 + arm64 |
| ncnn-visionos.zip | visionos 静态库 | arm64 |
| ncnn-visionos-vulkan.zip | visionos 静态库,支持 GPU | arm64 |
| ncnn-visionos-simulator.zip | visionos simulator 静态库 | x86_64 + arm64 |
| ncnn-visionos-simulator-vulkan.zip | visionos simulator 静态库,支持 GPU | x86_64 + arm64 |
| ncnn-ubuntu.zip | ubuntu linux 静态库/动态库,支持 GPU,模型转换工具 | x86_64 |
| ncnn-windows.zip | windows 静态库/动态库,支持 GPU,模型转换工具 | x86 + x64 + arm + arm64 |
| ncnn-webassembly.zip | webassembly 静态库 | wasm32 + simd + threads + simd-threads |
| ncnn-webassembly64.zip | webassembly64 静态库 | wasm64 + simd + threads + simd-threads |
重点概览
- 新增原生 batch 推理基础设施,Mat/VkMat、CPU/Vulkan 调度、C/Python 接口和 pnnx 转换同步扩展;Reshape 支持 batch 与普通维度之间的重组,进一步完善动态 reshape、flatten、unflatten 的 batch 语义。(@futz12)
- Vulkan 后端新增 Convolution、ConvolutionDepthWise、InnerProduct、GEMM 的 int8 推理路径,配套 integer dot product、cooperative matrix、Winograd 和 int8 packing,量化模型不再因存在 int8 层而整体关闭 GPU。
- 新增面向 LLM 的 int4/int6/int8 块量化、
ncnnllm2table/ncnnllm2int工具和五大 CPU 后端的 int8 块量化优化,并引入会话级 KV cache allocator、容量复用及 bf16 模型权重存储。 - x86 后端新增 fp32/bf16 SDPA FlashAttention prefill/decode,扩展 AVX2、AVX-NE-CONVERT、FMA/FMA4 dispatch,并补齐 CumulativeSum、Reduction、Normalize、Permute 的 SIMD 实现。(@crafcat7)
- RISC-V 补齐 packed int8 Convolution、im2col GEMM、Winograd、SDPA/MultiHeadAttention,继续优化 fp16 GEMM 和常见激活,并新增 BF16 能力检测及 Cast/Clip 转换路径。(@Deepdive543443, @futz12, @darkavatar23)
- Vulkan LayerNorm、RMSNorm、GroupNorm、InstanceNorm 新增 subgroup 归约,cooperative matrix 继续优化访存、对齐和 Adreno 兼容;同步修复 bf16 舍入、归一化系数精度及 Tanh/GELU 大输入溢出问题。(@futz12)
- 模型、参数与图加载增加系统性校验,新增默认开启的
NCNN_VALIDATION,修复负数索引、长度/数值溢出、非法层参数、循环图、截断 mmap 权重及失败加载后的资源清理问题。(@aleff-github, @professor-moody, @beilzx, @kaltsit-10, @ktz03, @Dr3ladwyn, @FluxMind-O, @lxcxjxhx) - pnnx 完善 MelSpectrogram、多前导维度 Linear、全局池化布局、ONNX fp16/bool 常量和 Transformer attention 融合,修复插值与动态 batch 转换,CI 测试矩阵扩展至 PyTorch 2.14。(@futz12, @Lfan-ke, @ktz03, @giuliocorradi, @Acture, @xy200303)
- 发布流程新增 Ubuntu 26.04、VS2026、wasm64 和 Android/iOS Python wheel,WebAssembly 更新至 Emscripten 6.0.12 并使用原生 LLVM OpenMP;Python 的 OpenCV 依赖改为可选项。
Vulkan / GPU
- 新增 Vulkan Convolution、ConvolutionDepthWise、InnerProduct、GEMM 的 int8 推理,覆盖普通卷积、depthwise/group convolution、全连接和动态矩阵量化;Net 加载量化模型时保留 Vulkan 执行能力。
- int8 Convolution 补齐 direct、1x1s1d1、GEMM、Winograd F(2,3)/F(4,3) 路径,GEMM/卷积可按设备能力使用 packed integer dot product 和 signed int8 cooperative matrix,并保留普通整数 shader 路径。
- Padding、Flatten、Packing、Quantize、Requantize 补齐 Vulkan int8 数据处理,Winograd 中间数据增加 int16 packed/storage 布局;新增
use_int16_packed/use_int16_storage选项和 C API,use_int8_arithmetic默认开启并按设备能力过滤。 - 新增 Vulkan Tile,支持 pack1/pack4、axis/tiles 和 repeats 模式,维度提升时先以 pack1 完成 gather,再转换为目标 packing,减少重复张量操作的 CPU fallback。(@losewayy)
- LayerNorm、RMSNorm 新增 subgroup 归约,在一次统计 dispatch 中完成均值/方差或平方和计算,减少多轮中间归约;支持 pack1/pack4、FP32 统计和跨 subgroup 合并,缺少 subgroup arithmetic 时保留原有路径,并跳过未使用的 fallback pipeline 创建。(@futz12)
- GroupNorm、InstanceNorm 新增 subgroup 归约,采用中心化与补偿 FP32 累加改善长序列和大离群值场景的均值/方差精度;同时处理 packed group 边界、cstep 和跨 subgroup 合并,并拆分 group/channel 调度以避免 dispatch 数量超限。(@futz12)
- LayerNorm、RMSNorm 的归一化系数改用 FP32 workspace,归一化及 affine 运算也在 FP32 中完成后再转换为目标 storage,减少 fp16/bf16 路径的系数舍入误差。(@futz12)
- MultiHeadAttention、SDPA 的 Vulkan KV cache 改用后端私有布局,新增 copy/append shader;配置专用
kvcache_vkallocator时可预留序列容量、原位追加并按需扩容,使 cache 在多个 Extractor 之间持续驻留 GPU。 - 重新启用支持相应扩展的 Adreno cooperative matrix 路径,GEMM、Convolution、Convolution1D、Deconvolution、SDPA 根据 shared memory、workgroup 和 subgroup 限制收缩 tile unroll,资源不足时回退;增加静态矩阵布局分支、GEMM pack1/pack4 输出 pipeline 和 int8 unroll 限制。
- 在满足 Vulkan 1.3 / maintenance4 条件时使用 SPIR-V 1.6 和
LocalSizeId,修正 workgroup size specialization 注入与反射,规避 Adreno subgroup shuffle 编译问题;pipeline cache 格式版本同步更新。 - 修复 GEMM、int8 Convolution、SDPA/FlashAttention cooperative matrix load/store 的行步长对齐;AMD 原生 bf16 转换前增加显式舍入,使其与 bf16 packed 软件路径保持一致,规避驱动 RTZ 转换带来的精度差异。
- 修复 Adreno 上 GEMM 普通/subgroup 路径的 fp16 packed bias 读取和 SDPA mask 读取,先计算完整元素索引,避免奇数行步长下的 packed-half 地址错误。
- 优化 GEMM、SDPA cooperative matrix shader,移除浮点路径的 shared memory padding 并重新计算资源需求;GEMM pack4 加载改用交错 K 索引,改善展开 tile 的访存顺序。
- Adreno 的 int8 Convolution cooperative matrix 路径取消 shared memory 行 padding,同步调整权重打包与资源估算,并为 Winograd 预留 2 KiB 驱动共享内存开销;修复 1x1 和 im2col 路径中的边界判断及强制循环展开问题,避免输出错误或漏写。
- 修复 Adreno 的 packed int16 解码和 Winograd F(4,3) 输出边界分支,解决部分驱动下高 16 位取值错误及输出漏写问题。
- 新增
VK_EXT_cooperative_matrix_maintenance1和VK_EXT_shader_ocp_microscaling_types的扩展/feature 查询,cooperative matrix tile 选择纳入按 subgroup size 枚举的 Properties2 结果,并补齐旧 Vulkan 头文件兼容定义。 - Apple Silicon 纳入优先使用 shader local memory 的设备范围,Net 通过新的
GpuInfo::prefer_shader_local_memory()保留适用的 local-memory 优化。 - 适配 Vulkan over WebGPU/OpenCL,Emscripten 的 simplevk 支持静态 Vulkan bootstrap;设备初始化增加 storage image 支持查询,在不支持时跳过 dummy image、sampler 和相关 image 测试。
- simplevk 在适用的系统、厂商及 MoltenVK 驱动库加载路径均失败后,尝试加载
momoten.dll/libmomoten.dylib/libmomoten.so,为已安装 momoten 的设备提供额外驱动入口。 - Vulkan 下载增加
HOST_CACHED判断,可映射但未缓存的 blob memory 改经 staging buffer 读取;贡献者在 Radeon 8060S / RADV 的 128 MB 下载测试中报告带宽由 0.32 GB/s 提升至 4.19 GB/s。(@giuliocorradi) - VkTransfer 的 compute/transfer command pool 增加 command-buffer reset 标志,使逐层权重上传过程中的 reset 满足 Vulkan 约定。
- 完善 subgroup 能力过滤,GEMM/SDPA 检查所需功能位,fp16 subgroup 路径要求
shaderSubgroupExtendedTypes;小 subgroup 设备的激活、Packing、量化等层同步调整候选 local size。 - Vulkan 创建管线时同时检查 subgroup size control 与
requiredSubgroupSizeStages的 compute 位,避免为不支持的计算阶段指定 subgroup size;VkWeightAllocator补齐TRANSFER_SRC用途,使 MemoryData 权重 buffer 可作为vkCmdCopyBuffer的源,修复 MoltenVK 上发现的两处校验错误。(@kongxinjun) - GLSL 公共类型、buffer 访问和精度转换宏集中到
ncnn_glsl_ext.comp,修复缺少 shaderInt64 时的 fp16 shader 编译,以及缺少 shaderInt16 时的 bf16 packed 编译和 packing;ERF、CELU 修正 fp16 arithmetic 向量常量类型。(@aadpnde, @futz12) - Reduction 修复 shared accumulator 精度和小 subgroup 多阶段归约的 shared memory 读写,4D depth stride 改按
w*h寻址,避免 channel padding 干扰。 - 修复 Vulkan Tanh/GELU 大输入在部分驱动上的溢出;UnaryOp round 改用
roundEven,修复 MoltenVK 半整数舍入与 CPU 不一致的问题。(@kongxinjun) - 为 llvmpipe/v3dv 的 packed BinaryOp 补齐
atan2(0,0)workaround,并修复 descriptor pool 的零计数项和 sampler 数量统计,改善严格 Vulkan 驱动上的兼容性。(@LEKKO2310, @ktz03) - 修复 Deconvolution/DeconvolutionDepthWise 输出裁剪参数 buffer 过小导致的越界写;BinaryOp 的广播 shape hint 比较纳入 elempack,避免物理尺寸相同但 packing 不同的输入选错 pipeline。(@ktz03)
- 修复 Vulkan/CPU 混合执行时空 optional input 的传输判断,初次 decode 的空 KV cache 可正确进入 fallback 层;MultiHeadAttention 同步修正 3D mask 的 pack1 转换、cstep 和 query 行寻址。(@futz12)
- Shader 编译诊断与
#version解析改为按显式源码长度扫描,修复无结尾 NUL 的 shader buffer 越界读取和诊断乱码,并新增回归测试。(@lazypool, @marcin-sochacki)
x86 CPU 后端
- SDPA 新增专用 FlashAttention prefill/decode,覆盖 fp32/bf16 storage、GQA、attention mask 和 KV cache,通过分块计算、online softmax、向量化矩阵乘及 packed cache 复用,减少完整 attention score 中间张量和 decode 重复打包。
- 重构 FMA dispatch,新增 FMA4 编译/运行时检测和
NCNN_FMA4选项;卷积、GEMM、InnerProduct、SDPA、归一化、激活、逐元素、GridSample、ROIAlign、LSTM 等共享 kernel 并使用独立 FMA/FMA4 调度。 - AVX512BF16 使用
vcvtne2ps2bf16合并转换,AVX2/AVX512 优化 bf16 到 fp32 的扩展,并为更多 bf16 层增加 AVX2 dispatch。 - 新增 AVX-NE-CONVERT bf16 GEMM、加载/广播/转换优化,扩展到卷积、InnerProduct、Deconvolution、Pooling、Interp、SDPA、归一化、激活和逐元素等路径,减少相应 CPU 上的 bf16 转换开销。
- GEMM int8 块量化新增 SSE/AVX2、XOP、AVX-VNNI、AVX-VNNI-INT8、AVX512-VNNI 等优化,覆盖动态激活量化、权重预打包、逐块 descale 和 bf16 storage;MultiHeadAttention 的 q/k/v/out projection 复用持久化 GEMM pipeline。
- 新增 CumulativeSum SIMD,实现 SSE/AVX/AVX2/AVX512 前缀扫描和外轴向量累加,覆盖 1D 至 4D 的全部有效 axis,并补齐尾块及运行时/固定 ISA 调度。(@crafcat7)
- 新增 Reduction x86 实现,覆盖 fp32 pack1 的 SUM、ASUM、SUMSQ、MEAN、MAX、MIN、PROD、L1、L2、LogSum、LogSumExp,支持 1D 至 4D 连续/跨步和多轴归约,并加入 FMA/FMA4 调度。(@crafcat7)
- Normalize 新增 packed SIMD,支持 pack1/4/8/16、跨空间/跨通道组合和各
eps_mode;SIMD 宽度与输入 packing 分离,并细化 rsqrt/reciprocal 计算。(@crafcat7) - Permute 新增原生 packed SIMD,直接处理 fp32/fp16/bf16 的 pack1/4/8/16 数据,覆盖 2D/3D/4D 排列、矩形尾块和跨步 transpose,保留 16-bit storage 与特殊浮点位模式。(@crafcat7)
- 优化非重叠 Deconvolution Col2im:在 dilation=1、stride 等于 kernel 大小的矩形核场景,pack1/4/8 直接写出输入贡献和 bias,并对少输出通道场景增加行并行,减少输出预填充和反复读改写。(@Hosi121)
- LayerNorm/RMSNorm 的 fp32/bf16 rsqrt 增加两次 Newton–Raphson 细化,UnaryOp rsqrt 增加一次细化,并收紧归一化测试精度要求。(@futz12)
- 修复旧 GCC 缺少
_mm512_set_epi16、VS2017 的 AVX512 abs / bf16 masked load 误编译、块量化 GEMM 非法指令及 MinGW 的atan2栈对齐问题;AVX512 int8/bf16 打包改用显式窄化storeuintrinsic,改善新旧编译器兼容性。
ARM CPU 后端
- 新增 RotaryEmbed NEON,实现 interleaved/non-interleaved 布局及 fp32/fp16/bf16 storage;fp16 storage 可保持 FP32 运算,满足 asimdhp 与 arithmetic 选项时使用 fp16 向量算术,16-bit 读取/写回扩展为 8-lane。(@devin-lai)
- GEMM int8 块量化增加 NEON、dotprod 和 i8mm 优化,支持 fp32/fp16/bf16 storage,MultiHeadAttention 的 q/k/v/out projection 同步复用优化 GEMM。
- 重新拟合 fp16 tanh 近似系数,大输入显式饱和到 ±1 并限制区间内过冲,修复原先约 ±1.044 的饱和值及其导致的 fast GELU 大负输入错误。(@LintonCode)
- 调整 fp16 标准/fast GELU 的乘法顺序,避免有限半精度输入因中间
2*x溢出产生 inf,并补充极值、signed zero 和 SIMD 尾块测试。(@ktz03) - 修复 int8 Convolution 的 fp16 输出预分配 packing,使其与实际反量化结果一致。(@Deepdive543443)
- 增加 Apple A19/A19 Pro、M5 系列、A20 Pro 和 M6 的 CPU family 定义及特征识别分支。
RISC-V / MIPS / LoongArch 后端
- 重构 RISC-V fp32/fp16 GEMM micro-kernel、打包和调度,区分 fp16 storage + FP32 累加与 fp16 arithmetic 路径,并继续优化 int8 块量化 GEMM。
- RISC-V 新增 fp32 storage 的 SDPA 后端并完善 MultiHeadAttention,复用 GEMM + Softmax,覆盖 mask、GQA、KV cache 和量化 projection。
- RISC-V 新增 RVV 1.0 packed int8 Convolution,使用双位置展开和 packed 权重;同步优化 packed fp16 Dequantize/Requantize,修复输出转换、packing 预分配及分配失败处理。(@Deepdive543443)
- RISC-V 新增 int8 Convolution im2col GEMM,按 L2 cache 与线程数划分 M/N/K tile,包含 1x1 快捷路径、RVV widening accumulation、标量尾块和 XTheadVector 兼容;复用输入 panels 并保留 split-K 部分和。
- RISC-V 新增 int8 Winograd F(2,3)/F(4,3),采用 int16 输入/权重变换和 int32 widening GEMM,融合输入变换与打包,覆盖空间块尾部、split-K 和 XTheadVector 输出转换。
- RISC-V fp32 packn 5x5s1 Depthwise Convolution 增加四输出行复用,共享输入与权重加载并保持逐输出 FMA 顺序,保留两行/单行尾部处理,减少向量访存。(@luke-opus)
- RISC-V 补齐 ELU、ERF、标准/fast GELU、SELU 的 RVV fp32/fp16 storage,完善标量 fallback,并降低 Erf/标准 GELU 的向量寄存器压力。(@futz12)
- RISC-V 新增 Scale RVV fp32 实现,覆盖 packed 输入、bias 和各维度,并保留无向量扩展时的一维多线程标量路径。(@darkavatar23)
- 修复 RISC-V fp16 tanh 系数下溢及约 ±1.044 的饱和值,改善 TanH、Mish、UnaryOp;fast GELU 同步规避有限 fp16 大输入的中间溢出。(@songxiaoyuwyze, @ktz03)
- 新增 RISC-V BF16 编译/运行时能力检测,分别探测 Zvfbfmin 与 Zvfbfwma;Cast/Clip 提供 scalar、普通 RVV、原生 Zvfbfmin 和 XTheadVector 转换路径,Clip 保持 FP32 运算,XTheadVector 路径保存/恢复 FXCR 模式并保留累计异常标志。
- MIPS MSA、LoongArch LSX/LASX 优化 bf16/int8 GEMM 和 im2col convolution 的转置打包,删除无效分支与重复代码,并增加不同线程数的 int8 GEMM 回归。
- MIPS/LoongArch 新增 int8 块量化 GEMM 的 MSA/LSX/LASX kernel 与 bf16 storage 适配;LayerNorm、RMSNorm、UnaryOp rsqrt 同步增加 Newton–Raphson 细化。(@futz12)
- 修复 MIPS/LoongArch packed8 int8 im2col 的全局 K tile 偏移,并统一修复 SSE2、ARM32 NEON、MSA、LSX int8 Winograd 的 pack8 K tile 对齐。
通用算子与模型能力
- Mat/VkMat 增加
n/nstep、batch 构造和子视图,Net 在 CPU/Vulkan 上调度多 batch,upload/download、cast、packing 和 C API 同步扩展;NCNN_BATCH默认开启。 - Reshape 支持 batch 与普通维度之间的折叠、拆分和重排,表达式可引用
0n等 batch 大小;修复 batch 轴不变但分区变化、独立输入 shape 引用及错误 fast path,CPU 各后端与 Vulkan 同步处理。(@futz12) - MultiHeadAttention/SDPA 新增会话级
kvcache_allocator、kvcache_vkallocator和kvcache_max_seqlen_hint,配合后端私有 cache 布局减少逐 token 分配与历史数据拷贝;C++ Extractor、C API 和 Python 绑定同步扩展。 - Mat 形式的 KV cache 通过
type=1提取并保留底层存储,Vulkan cache 通过 VkMat 提取,均按后端原始布局回灌;当前 KV cache 支持 batch=1,新布局不兼容旧的手工构造或持久化 cache,升级后应从空 cache 开始新会话。 - Convolution 的 1D 输入、1x1 kernel 兼容路径增加弃用提示,建议改用 InnerProduct;相关 benchmark 模型同步使用明确的全连接层表示。
- RotaryEmbed 支持非交错模式的完整宽度 cos/sin cache,两个半区可使用不同频率,修复 2D / vision RoPE 输出;保留半宽 cache,CPU/Vulkan 的 fp32/fp16/bf16 路径同步更新。(@Acture)
- 修复 Interp 非整数 scale factor 的 linear/bilinear/bicubic 采样,保留原始缩放比例并分别钳制短轴采样点,覆盖输出尺寸不变但仍需重采样及长度为 1 的边界,CPU/Vulkan 同步修复。(@Acture, @xy200303)
- 修复 CPU LRN 在偶数
local_size下跨通道多累计一个通道的问题,统一 generic、x86、ARM、MIPS、LoongArch 与现有 Vulkan 的窗口约定。(@ktz03) - 修复通用 MultiHeadAttention KV history 拷贝越界和持久缓存的分配生命周期问题;单通道 3D mask 可跨 heads 广播,CPU/Vulkan、普通/KV cache 路径及量化校准统计同步修正。(@futz12)
- BF16 转换由截断改为最近值舍入,各 CPU 与 Vulkan packed 路径同步调整;软件 fp32→fp16、fp16→fp8/bf8 转换也改进舍入,pnnx 的 fp16 常量转换保持同步。
- 混合 storage 图按目标元素位宽选择 packing,并调整 repack 与升降精度转换顺序,修复 RISC-V bf16/fp16 输入进入 fp32-only 层时的布局处理。
- 加强 ParamDict 文本/二进制解析,检查负数 ID、数组/字符串长度、整数/浮点边界、畸形数字及引号,补充 getter 类型检查、重载隔离和分配失败处理;
ncnn2mem同步解析和失败返回,保留整数标量到 float getter 的数值转换。(@aleff-github, @professor-moody, @beilzx) - 加强 Net 文本/二进制图加载校验,覆盖 layer/blob 数量、连接索引、shape hint、feature mask、自定义层和连接数;拒绝二进制循环图,并修复失败重载、creator/destroyer 和 CPU 替换路径的资源清理。(@kaltsit-10, @beilzx, @ktz03)
- 多个层补充参数类型、数组长度、维度、卷积核、窗口、operation/mode、激活参数和 Einsum 表达式校验;新增默认开启的
NCNN_VALIDATION,已验证的固定模型可关闭附加校验以减小体积。(@beilzx, @FluxMind-O, @lxcxjxhx, @ktz03) DataReaderFromMemory新增带长度构造,对 read/reference/scan 实施边界限制;mmap 加载使用有界 reader 并传递实际错误,避免截断或损坏的权重文件在加载途中越界崩溃。(@Dr3ladwyn)- 统一对齐内存分配/释放的条件分支,修复头文件包含顺序改变 allocator 方案导致的堆损坏;卷积、InnerProduct、Padding、DeconvolutionDepthWise 等补齐空 Mat、OOM 和子层错误传递。(@ktz03)
- 初始化 YoloDetectionOutput 的 softmax 成员,修复仅加载 param 后销毁可能访问未初始化指针的问题;CPU 拓扑或共享 cache 信息不完整时使用有效核数兜底,避免初始化除零/SIGFPE。(@kaltsit-10)
- 运行时与 pnnx 常量表达式的
logaddexp改用稳定计算,避免大数指数溢出,并保留 NaN 和相同正负无穷的处理语义。(@primorLee) - 修复 GNU/Clang SIMPLEOMP 串行内层 parallel region 返回后未恢复外层 thread ID/team size 的问题,并在 Clang 路径中分离待生效线程数请求与当前 team 状态。
pnnx / 转换工具
- pnnx 新增原生 batch 布局分析,reshape、permute、slice/select、concat/split、reduce、pooling、norm 等转换同步扩展;生成的 Python 包装使用显式 batch 轴输入并还原输出。
- reshape、reshape_as、flatten、unflatten 与动态 shape 表达式统一按逻辑维度生成参数,修复 batch 折叠/拆分、同轴 batch 大小改变、外部 shape 引用和相邻 reshape 融合。(@futz12)
- 普通 reshape 只在需要时写出 batch 布局参数,改善对旧 ncnn 的兼容;修复 ONNX Flatten 的 axis / 两侧展平转换,以及 batch-aware layer 的独立 shape 输入检查。
- 重新整理全局池化输出布局,在适用逐元素与广播路径中传递紧凑布局,按需恢复输出形状;符合条件的池化后 1x1 Conv2d 转为 Linear,并清理多余广播 Reshape。
- 完善 STFT/Spectrogram reshape 模式识别,支持
torchaudio.transforms.MelSpectrogram;通过 batch pack/unpack 保留多前导维度及动态 waveform 长度,补齐 padding、complex/power 输出回归。(@futz12) - 修复 Linear 多前导维度的展平与恢复,以及 native batch 轴参与 F.pad / spectrogram padding 时的布局转换,覆盖相关 rank-3/4/5 输入。(@futz12)
- ONNX 导入补齐 fp16 标量常量,从
raw_data/int32_data位模式读取,修复后续表达式优化缺少常量值的问题;bool 常量按 raw int8 MemoryData 写出并保持字节布局。(@Lfan-ke, @ktz03, @giuliocorradi) - 补充 ALBERT、CLIP、ProphetNet、Flaubert、XLM attention 融合变体,修复 query/key 长度和 mask shape 匹配,并在消除死代码时保留图输入。
- 插值转换保留
recompute_scale_factor=True,为 F.interpolate / nn.Upsample 生成运行时尺寸表达式,避免仅因输入输出 shape 相同而删除仍需重采样的操作。(@Acture, @xy200303)
量化与模型写出
- 新增 GEMM/MultiHeadAttention 的 int4/int6/int8 块量化,支持 32/64/128 元素块及可选输入 scale,
NCNN_WEIGHT_QUANT默认开启;int4/int6 为权重量化,int8 CPU 路径采用动态逐行/逐块激活量化、int32 点积和逐块反量化累加。 - 新增
ncnnllm2table/ncnnllm2int,支持 minmax、mseclip、AWQ、GPTQ,生成/消费 GEMM 及 MHA q/k/v/out 的块 scale、输入 scale 和 GPTQ packed qweight;minmax/mseclip 也可直接指定参数量化,AWQ/GPTQ 使用校准 table。 - ModelBin/ModelWriter 补齐 int4/int6/int8 块量化 raw-byte 读写和 4 字节对齐,支持 DataReader reference;MultiHeadAttention 的块量化范围为 q/k/v/out projection,注意力及 KV cache 保持浮点计算/存储。
ncnn2table新增method=percentile,支持固定分位数及候选分位数自动选择,并将零值纳入激活直方图,覆盖 Convolution、ConvolutionDepthWise、InnerProduct 的输入激活校准。(@Roundaboutt)- GEMM 静态权重 scale 可由
ncnn2table生成,ncnn2int8优先消费并检查完整性,同时保留旧 table / 未提供 GEMM scale 时的 absmax 回退;修复 B 权重矩阵 absmax 统计遗漏数据。(@Roundaboutt) - 模型格式新增 bf16 权重标签
0x01348B83,ModelBin 支持读取,ncnnoptimize的flag=2可写出 bf16 权重,并新增Mat::from_bfloat16;ModelWriter 同时修复大端平台相关权重标签及数据的小端写出。 - bool 常量以每元素 1 字节写入
MemoryData load_type=3,补齐 4 字节 padding 和 raw int8 加载;ModelWriter/ncnnoptimize 保留其字节表示及 load_type,避免权重错位或按 fp32 错误融合。(@ktz03, @giuliocorradi)
Benchmark / Perf
benchncnn开启 GPU int8 benchmark,相关量化模型参数及旧式 Convolution 线性层同步调整。benchncnn_llm的 CPU benchmark 为 Hunyuan 0.5B、MiniCPM4 0.5B、Qwen2.5 0.5B、Qwen3 0.6B、Llama3.2 1B、TinyLlama 1.1B、Youtu LLM 2B 增加 int8g32/int8g128 变体;输入、mask、RoPE 构造移出计时范围,按最小耗时报告最高 prefill/decode TPS。- LLM benchmark 的适用 decoder param 启用 GQA,使用专用 KV cache allocator,Vulkan 侧以 VkMat 保留缓存;默认关闭 fp16 packed/storage/arithmetic,保留 bf16 选项并按设备能力回退。
- 新增/扩展 Reduction、Normalize、Permute、LayerNorm、RMSNorm、GroupNorm、InstanceNorm 和 SDPA KV cache 的算子级 perf,覆盖 SIMD、subgroup 归约及连续 decode 缓存复用。(@crafcat7, @futz12)
- 补充 OOM、batch fp16/bf16 cast、GEMM 多线程、卷积 split-K/packing 和低精度极值回归;精简冗余 GPU 测试组合,调整 fp16 arithmetic / denormal 测试,并修复 SimpleSTL/SimpleMath 测试构建。(@ktz03)
构建 / 发布 / CI
- 新增 Ubuntu 26.04 静态/动态发布包,保留 22.04/24.04;新增 VS2026 v145 + Windows SDK 26100 的 x86/x64/arm64 静态/动态发布包,并为 Windows release 的旧 Protobuf 构建补充 CMake 4 policy 兼容设置。
- WebAssembly 更新到 Emscripten 6.0.12,新增真正以
-m64编译和链接的 wasm64 CI/发布包;wasm32/wasm64 均提供 basic、SIMD、threads、SIMD+threads 四种产物。 - WebAssembly 多线程 CI 和发布配置改用 Emscripten 自带 LLVM OpenMP,保留 SimpleOMP 可选;ncnn 与 glslang 等依赖统一启用 pthread,安装目标向应用传递
-pthread,允许应用控制 worker pool。 - Python 发布新增 CPython 3.13/3.14/3.15 的 Android API 24+、iOS 14+ CPU wheel,覆盖 Android arm64/x86_64、iOS arm64 设备与 arm64/x86_64 模拟器,Vulkan/OpenMP 关闭;基础 smoke test 在可用模拟器运行,设备架构另做构建和产物校验。
- Python 基础包移除强制 OpenCV 依赖,改为
ncnn[opencv]可选 extra 和按需导入,核心推理、模型导入及print_topk可在没有 cv2 时使用;移动端 NumPy 等依赖仍需相应平台的可用构建。 - Python Mat 增加 batch 构造、
batch子视图和batch_indexNumPy 转换;自定义层工厂改为每个 Net 保存稳定 userdata,移除进程级十槽回调表,修复多 Net、clear/reload 和被替换回调的生命周期。(@ktz03) - Python
Extractor.extract的按名称/索引及传入 Mat/返回 tuple 四个重载在原生推理期间释放 GIL,允许其他 Python 线程继续运行,并补充线程进度回归测试。(@RaHehl) - Python riscv64 manylinux/musllinux QEMU wheel 增加 CPython 3.15 并移除过时的 3.8 组合;cibuildwheel 更新到 4.3.1。(@dependabot[bot])
- pnnx CI 扩展至 PyTorch 2.12/2.13/2.14,更新相关 TorchVision、Transformers、ONNX Runtime、Protobuf 并固定 NumPy 矩阵;PyTorch 2.13+ 构建使用 C++20,启用 Protobuf 时不再降回 C++17。
- 新增 VS2026 与原生 Windows ARM64 测试,移除 Linux/Wine 上的 Windows ARM64 job,并在原生 ARM64 测试中使用默认 ARM 特征检测;macOS 增加原生 ARM CPU/Vulkan 测试。(@mingshi2333, @MollySophia)
- 更新 Intel SDE 并增加
-dmr测试,修复 MSVC v141_xp 组件安装和 Windows XP Clang 下载;更新 SwiftShader,headless NVIDIA T4 CI 显式选择libEGL_nvidia.so.0。 - 修复 Emscripten executable linker flags 变量拼写,并在 XTheadVector 编译探测中检查
__riscv_xtheadvector,避免仅接受-march参数的工具链被误判为支持。(@yuefdev, @ihb2032) NCNN_COVERAGE新增内置 Vulkan shader 行覆盖率,通过 SPIR-V 插桩输出 LCOV,支持多进程/多设备汇总和独立 shader cache;合并直线代码段中的覆盖率 atomic-or 探针,减少插桩开销。- 重写二进制大小 PR 评论工作流,通过源仓库、分支和精确 SHA 关联 fork PR,使用内置 token 下载并校验报告,持续更新已有 bot 评论,并跳过过时或已关闭 PR 的结果。
- glslang 更新到 20260810 修订,shader 构建同步适配公共 GLSL 宏拆分。
文档
- 更新 README 的 20261020 发布下载链接,补齐 Ubuntu 26.04、VS2026 和 wasm64 的预编译包入口。
- 更新 Reshape 表达式的 batch 维度、独立 shape 引用及 helper API 说明;KV cache 文档补充 allocator 生命周期、私有布局、
type=1提取与升级后的会话重建约定。(@futz12) - 补充 LLM 块量化工具链、percentile 校准、bf16 模型格式和 raw int8 MemoryData,明确 scale table、权重类型和模型写出方式。(@Roundaboutt, @ktz03, @giuliocorradi)
- 更新参数类型、数组编码、
ncnn2mem、模型/层校验及自定义层生命周期文档,补充NCNN_VALIDATION最小化构建选项。(@professor-moody, @beilzx, @kaltsit-10, @ktz03, @FluxMind-O, @lxcxjxhx) - 新增 Vulkan shader coverage 开发文档,更新中英文 GLSL 扩展与公共宏说明。
- Python 文档补充 OpenCV 可选依赖、Android/iOS wheel 架构、最低系统版本及移动端依赖条件。
自动化依赖更新:
- 更新 actions/checkout v7、actions/cache v6、actions/labeler v7、actions/setup-python v7,以及 cibuildwheel 4.3.1。(@dependabot[bot])
New Contributors
- @devin-lai made their first contribution in #6760
- @kaltsit-10 made their first contribution in #6921
- @ktz03 made their first contribution in #6906
- @LintonCode made their first contribution in #6979
- @songxiaoyuwyze made their first contribution in #6982
- @mingshi2333 made their first contribution in #6984
- @lazypool made their first contribution in #6882
- @yuefdev made their first contribution in #7000
- @LEKKO2310 made their first contribution in #6930
- @primorLee made their first contribution in #6924
- @Lfan-ke made their first contribution in #6852
- @darkavatar23 made their first contribution in #6931
- @losewayy made their first contribution in #7027
- @Acture made their first contribution in #6834
- @giuliocorradi made their first contribution in #6864
- @Hosi121 made their first contribution in #7015
- @Dr3ladwyn made their first contribution in #7021
- @luke-opus made their first contribution in #7091
- @kongxinjun made their first contribution in #7119
- @RaHehl made their first contribution in #7147
Full Changelog: 2026052...2026102