github Tencent/ncnn 20261020
android harmonyos ios macos linux windows webassembly watchos tvos visionos 预编译库 20261020 7e36d25

4 hours ago

编译版本,默认配置,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 打包改用显式窄化 storeu intrinsic,改善新旧编译器兼容性。

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_index NumPy 转换;自定义层工厂改为每个 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

Full Changelog: 2026052...2026102

Don't miss a new ncnn release

NewReleases is sending notifications on new releases.