【免费下载链接】depth-anything.cppA from-scratch C17/ggml port of Depth Anything 2 and 3 (ByteDance)项目地址https://gitcode.com/gh_mirrors/de/depth-anything.cpp点击查看免费下载depth-anything.cpp 是 Depth Anything 2/3 单目深度估计模型的 C17/ggml 原生移植一个自包含的 GGUF 文件无需 Python、无需 CUDA推理时比 PyTorch 在 CPU 上更快。它能在纯 CPU 上跑赢 PyTorch 的 oneDNN靠的是一套精心调优的 CPU 计算路径其中最狠的一招就是手写AVX-512 Winograd 卷积——把 DPT 头部 3×3 卷积的乘数直接砍掉 2.25 倍把 CPU 向量算力的每一滴都挤出来。先看成绩单CPU 深度估计的全面优势在 AMD Ryzen 9 9950X3D16 线程、DA3-BASE 模型、504×336 生产分辨率下深度推理延迟与内存表现如下引擎量化模型大小加载推理峰值内存PyTorchf32516 MB749 ms416.9 ms1328 MBC/ggmlf32393 MB112 ms346.4 ms614 MBC/ggmlq8_0142 MB40 ms319.4 ms363 MBC/ggml 在 f32 下快1.20 倍、q8_0 下快1.31 倍内存只有 PyTorch 的一半加载快约 6.7 倍且输出与参考实现 bit 级一致相关性 1.0。这些数字是 tinyBLAS 矩阵乘、直接卷积、flash attention 等一系列优化的合力而Winograd 卷积正是其中专门针对卷积 FLOPs 的那一锤。Winograd 卷积原理把 9 次乘法换成 16 次逐元素乘以最常用的 F(2×2,3×3) 变体为例它把 3×3、步长 1 的卷积拆成三步输入变换从特征图上取 4×4 的 tile用变换矩阵 B 变成 4×4 的 V只做加减法逐元素乘与变换后的滤波器 U 做 16 次逐元素乘法输出反变换用矩阵 A 把 4×4 结果变回 2×2 的输出仍然只是加减法。关键账本直接卷积算出这 4 个输出像素需要 4×936 次乘法而 Winograd 只要16 次——乘法数降到1/2.25。变换矩阵里只有 0、±1、1/2在 float32 下可精确表示所以精度损失极小。depth-anything.cpp 如何榨干 AVX-512核心实现在 src/winograd.cpp接口声明在 src/winograd.hpp。它被注册为 ggml 的自定义算子ggml_custom_4d只在「3×3、stride-1、F32」的卷积上生效——恰好覆盖 DPT 头部所有的融合/重组 3×3 卷积。① 滤波器变换只算一次跨前向缓存Winograd 的滤波器变换 U G·g·Gᵀ 与输入无关。内核用一个以「滤波器指针 形状 模式」为 key 的全局缓存g_states保证 U 只在首次调用时计算之后的每次前向直接复用省掉反复变换滤波器的开销。② AVX-512 FMA 内核算法一条指令 16 个 floatWinograd 域的核心乘法M[oc] Σ_ic U[ic][oc]·V[ic]被刻意排成 OC 最内层布局直接喂给 AVX-512zmm 寄存器一次装16 个 float用_mm512_fmadd_ps融合乘加一条指令推进 16 路OC 不是 16 整数倍时用掩码加载/存储_mm512_maskz_loadu_ps精确处理尾巴不浪费也不越界每个线程负责一片 tile通过(ith, nth)任务划分并行到所有 CPU 线程。③ f2 / f2b / f4 三种模式环境变量一键切换内核用DA_WINO环境变量选择算法变体模式算法说明f2F(2×2) 逐 tile GEMV初代 AVX-512 路径每个 tile 都要重新加载滤波器 Uf2bF(2×2)分块 GEMM默认一次批处理 TB8 个 tile8 个 zmm 累加器常驻寄存器U 行的内存流量降 ~8 倍f4F(4×4,3×3)比直接卷积少 4 倍乘法但 1/6、1/24 分数带来精度损失且实测不比分块 GEMM 快故仅保留可选项f2b的精妙在于同一个 U 行16 个 OC 通道在寄存器里被 8 个 tile 反复复用算术强度大幅提高——这正是 AVX-512「寄存器里干活、别回内存」的教科书用法。实测收益头部延迟约 15%GIANT 模型提升 22%DA3 推理在 504×336、16 线程下的 warm 头部延迟完整数据见 benchmarks/BENCHMARK.md模式BASE 头部GIANT 头部directWinograd 之前~242 ms—f2~205 ms~625 msf2b默认~194 ms~490 ms−22%f4~195 ms~494 ms一次优化让整图推理从 ~492 ms 降到 ~450 ms约 −8%对 GIANT 这种大模型分块 Winograd 直接砍掉 22% 的头部耗时。结论也验证了方向CPU 上卷积瓶颈在FLOPs 数量而不是内存带宽少做乘法就是真金白银。精度是硬门槛parity 逐位校验速度再快结果错了也白搭。tests/test_winograd.cpp 用随机 128×96、ICOC64 的张量把 Winograd 输出和ggml_conv_2d_direct逐项对比F(2×2) 变换只用一半数与整数max|d| ≈1.4e-5远小于 2e-3 的测试门限30 个组件级 parity 测试全部绿灯端到端深度相关性1.000000f4虽然单卷积误差略高~2.2e-4但经头部归一化后同样 corr1.0因此保留而非删除。这套「先实现、再测量、parity 达标才合入」的流程保证了每个 CPU 优化都是又快又对。卷积路由CPU 走 WinogradGPU 走 im2col并非所有平台都用 Winograd。路由逻辑在 src/dpt_blocks.cpp 的conv2d中CPU3×3 stride-1 F32 卷积 → Winogradf2b其他 K1 卷积 → 直接卷积1×1 卷积 → im2col tinyBLAS sgemm纯 GEMMGPUCUDA 上 cuBLAS 级 GEMM 比 ggml 的基础卷积核快约 2 倍GB10 实测 head 119 vs 253 ms而 Winograd 是 CPU-only 自定义算子会强制 GPU↔CPU 往返所以全部改走 im2col。见 src/compute_mode.hpp。也可以用环境变量 A/BDA_CONVwinograd|direct|im2col|auto、DA_WINOf2|f2b|f4。 动手试试三步在 CPU 上跑深度估计cmake -B build -DDA_BUILD_CLION -DDA_GGML_LLAMAFILEON # llamafile AVX-512 矩阵乘默认开启 cmake --build build -j# 量化到 142 MBq8_0近无损 build/examples/cli/da3-cli quantize models/depth-anything-base-f32.gguf models/depth-anything-base-q8_0.gguf q8_0 # 单图深度估计输出 PFM 可着色 PNG build/examples/cli/da3-cli depth --model models/depth-anything-base-q8_0.gguf --input photo.jpg --pfm depth.pfm --png depth.png想复现 Winograd 的 A/B 数据只需加一个环境变量DA_WINOf2 DA_CONVwinograd跑一遍再DA_WINOf2b跑一遍对比--repeat 25的中位延迟即可。用仓库自带的真实照片试跑效果如下原图 着色深度图小结快在哪、为什么快算法层Winograd F(2×2,3×3) 把 3×3 卷积的乘法数降 2.25 倍从源头减少 FLOPs内核层AVX-512 FMA 一次 16 路 float、掩码处理尾巴、TB8 分块 GEMM 让滤波器寄存器复用内存流量降 ~8 倍工程层滤波器变换全局缓存、parity 测试门限、CPU/GPU 自动路由保证又快又对。对于任何想在无 GPU 环境跑视觉深度模型的团队这套「少做乘法 榨满向量寄存器」的思路同样适用——算力就藏在卷积的形状里。赞分享【免费下载链接】depth-anything.cppA from-scratch C17/ggml port of Depth Anything 2 and 3 (ByteDance)项目地址https://gitcode.com/gh_mirrors/de/depth-anything.cpp点击查看免费下载相关推荐突破算力瓶颈XMrig CPU特征检测如何榨干每一条指令潜能突破算力瓶颈XMrig CPU特征检测如何榨干每一条指令潜能 你是否遇到过这样的困惑明明是高性能CPU计算效率却始终上不去检查配置、优化参数尝试各种方区块链高性能计算ZenTimings硬核监测AMD处理器性能 榨干每一分算力 引言你的AMD处理器真的跑满了吗 当你组装了一台搭载AMD Ryzen处理器的高性能PC是否曾疑惑为什么跑分总比评测低为什么风扇突然狂转却找不到桌面应用硬件开发MACE Winograd算法应用如何加速卷积操作实现极致性能MACE Winograd算法应用如何加速卷积操作实现极致性能 MACEMobile AI Compute Engine是一个专为移动异构计算平台优化的深推理引擎深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?