ANE

GitHub
6.6k 921 困难 1 次阅读 今天MIT开发框架其他
AI 解读 由 AI 自动生成,仅供参考

ANE 是一个极具探索精神的研究项目,旨在突破苹果官方限制,直接在 Apple Neural Engine (ANE) 上进行神经网络训练。通常,苹果芯片中的 ANE 仅被允许用于模型推理(如运行 CoreML 模型),而训练任务则需依赖 GPU 或 CPU。ANE 通过逆向工程苹果未公开的内部私有 API(如 _ANEClient_ANECompiler),成功绕过了这一软件层面的封锁,实现了纯 ANE 算力下的反向传播训练,无需借助 Metal 或 GPU。

该项目主要解决了“硬件具备训练能力但被软件锁死”的问题,证明了在消费级苹果设备上利用 NPU 进行模型训练的可行性。它提供了宝贵的性能基准测试数据,并展示了如何构建自定义计算图以执行完整的向前和向后传播。

ANE 非常适合对底层系统架构、编译器技术感兴趣的资深开发者、AI 研究人员以及黑客爱好者使用。对于希望快速落地生产应用的设计师或普通用户而言,目前它尚不具备替代成熟框架(如 MLX 或 PyTorch)的能力,因为其利用率仍有较大优化空间且部分运算需回退至 CPU。作为一个开源的实验性代码库,ANE 的核心价值在于为边缘 AI 优化提供了全新的研究视角和技术参考,鼓励社区在此基础上构建更强大的工具。

使用场景

一位边缘 AI 研究员试图在 MacBook Pro 上直接训练小型 Transformer 模型,以验证苹果神经网络引擎(ANE)在反向传播中的潜力,而无需依赖外部 GPU 集群。

没有 ANE 时

  • 硬件闲置浪费:尽管 M4 芯片内置了强大的 15.8 TFLOPS NPU,但受限于 CoreML 仅支持推理,训练任务只能强制调用 GPU 或 CPU,导致专用 AI 算力完全闲置。
  • 能耗与发热过高:使用 Metal 进行 GPU 训练时,笔记本电脑风扇狂转、机身发烫,电池续航急剧下降,难以在移动办公场景下长时间运行实验。
  • 技术验证受阻:由于缺乏直接访问 NPU 训练能力的途径,开发者无法低成本验证“端侧全链路训练”的可行性,必须等待官方开放接口或购买昂贵设备。
  • 依赖重型框架:为了绕过限制,往往需要配置复杂的 CUDA 环境或云端资源,增加了本地轻量级原型开发的门槛和延迟。

使用 ANE 后

  • 激活沉睡算力:ANE 通过逆向工程私有 API(_ANEClient),成功将反向传播计算图直接映射到 NPU 硬件,让原本仅用于推理的硅片开始承担训练任务。
  • 能效显著提升:利用 NPU 专用的低功耗架构,训练过程中的功耗大幅降低,设备保持冷静且安静,实现了真正的“静音训练”体验。
  • 打破软件壁垒:证明了阻碍 NPU 训练的并非硬件能力不足而是软件封锁,为探索非 GPU 架构的边缘模型训练提供了宝贵的代码参考和基准数据。
  • 纯本地化研发:无需安装 CUDA 或连接云服务器,仅凭原生 MIL 格式和自定义计算图即可在 macOS 上完成从正向到反向的完整训练循环。

ANE 的核心价值在于它是一把钥匙,打破了苹果对 NPU 训练功能的软件封锁,让开发者能在低功耗本地设备上首次实证端侧模型训练的可行性。

运行环境要求

操作系统
  • macOS
GPU
  • 不需要独立 GPU(如 NVIDIA),但项目利用 Apple Silicon 内置 GPU 进行部分预处理(如 Prefill),通过 IOSurface 与 ANE 零拷贝交互
  • 必须使用搭载 Apple Neural Engine (ANE) 的 Apple Silicon 设备(如 M4)
内存

未说明(取决于运行模型的大小,需容纳模型权重及激活值)

依赖
notes1. 这是一个研究项目而非生产框架,旨在通过逆向工程苹果私有 API (_ANEClient, _ANECompiler) 直接在 Apple Neural Engine (ANE) 上进行神经网络训练。 2. 严禁在非 Apple Silicon 设备(Linux/Windows/NVIDIA GPU)上运行。 3. 无需安装外部 Python 包(如 PyTorch),主要依赖系统自带的 C/Obj-C 编译器和框架。 4. 需要预分词的 TinyStories 数据集用于训练。 5. 由于使用未公开的私有 API,macOS 系统更新可能导致项目失效。
python未说明(主要代码为 Objective-C (.m) 和 C,仅 dashboard.py 可能涉及 Python)
macOS 15+
Apple Silicon (M4 tested)
Xcode Command Line Tools (clang, make)
System Frameworks: Foundation, IOSurface, Accelerate (cblas, vDSP)
ANE hero image

快速开始

ANE 训练 — 在 Apple Neural Engine 上进行反向传播

通过逆向工程的私有 API,直接在 Apple 的 Neural Engine (ANE) 上训练神经网络。不使用 CoreML 训练 API,不使用 Metal,也不依赖 GPU——纯粹的 ANE 计算。

项目范围与意图

我由衷感谢大家对这个项目的关注——我从未想过一个周末的研究性尝试会如此火爆。感谢所有点赞、叉仓、在自己的硬件上运行基准测试并分享成果的人,这对我来说意义重大。

不过,我想明确一下这个项目的定位和边界。

这是一个研究项目,而非生产级框架。

我们的目标是证明在 Apple Neural Engine——以及潜在的其他 NPU 上进行训练是可行的,并且一直以来的瓶颈在于软件支持,而非硬件能力。ANE 是一块功能强大的芯片,但 Apple 通过 CoreML 将其限制为仅用于推理。本项目通过逆向工程的私有 API 绕过了这一限制,展示了只要给予硬件机会,就能实现怎样的可能性。

本项目是什么

  • 基于 _ANEClient_ANECompiler 私有 API 的 ANE 训练概念验证
  • 一组记录真实 ANE 性能特征(吞吐量、功耗、SRAM 行为)的基准测试
  • 为任何探索 CoreML 之外 ANE 直接访问方式的人提供的参考
  • 我会在发现有趣内容时更新的研究代码

本项目不是什么

  • 不是一个维护良好的框架或库
  • 不是 CoreML、MLX、llama.cpp 或任何生产级推理栈的替代品
  • 至少目前还不是在消费级硬件上训练大型模型的途径

关于炒作

一些关于该项目的报道夸大了其影响。澄清如下:

  • 训练确实可以运行,但利用率较低(约峰值的 5–9%),且仍存在显著的工程挑战
  • 许多逐元素操作仍然回退到 CPU
  • 并不意味着它可以取代 GPU 训练,至少在当前阶段还无法用于任何超出小型研究模型的任务

诚实的结果——包括所有局限性——都记录在配套的文章中:

关于维护

我不打算将这个项目发展成一个大型社区项目。我的重心在于原创研究(边缘 AI 优化的编译器基础设施),而维护一个开源框架会占用我在这方面的精力。

尽管如此:

  • 只要我发现有趣的内容,就会继续推送更新
  • 欢迎提交 bug 修复和基准测试贡献(尤其是针对我没有的硬件)
  • 功能请求可能不会被采纳——但欢迎大家 fork
  • PR 的合并速度可能会比较慢,否则我会成为推动该技术社区发展的瓶颈。

Fork 它,基于它构建

之所以采用 MIT 许可证,是有原因的。如今,每个人都可以使用 AI 辅助开发工具,在几小时内就完成代码的适配和扩展。如果这个项目对你有用,那就拿走它,修改它,构建出更好的东西。如果你用它做出了什么酷炫的东西,我很乐意听听你的故事。如果未来社区决定维护一个事实来源仓库,我也完全支持。


这是什么

一个从头开始实现的 Transformer 训练框架(前向 + 反向传播),运行在 Apple Silicon 的 ANE 上。ANE 是一款 15.8 TFLOPS FP16(M4)的推理加速器,但 Apple 并未将其开放用于训练。本项目通过逆向工程 _ANEClient / _ANECompiler 私有 API 以及 MIL(Model Intermediate Language)格式,实现了在 ANE 硬件上直接运行自定义计算图——包括反向传播。

当前结果:

模型 参数量 ms/步 流水线
Stories110M(12 层,dim=768,MHA 12/12) 1.09 亿 91 ms 动态(无需重新编译)
Qwen3-0.6B(28 层,dim=1024,GQA 16/8) 5.96 亿 412 ms 动态(无需重新编译)
  • 所有前向和反向 dx 传递都在 ANE 上执行,dW 梯度则在 CPU 上计算(Accelerate cblas)
  • 使用 Adam 优化器,支持梯度累积,并通过 exec() 重启实现检查点和恢复
  • 支持 GQA(分组查询注意力),并采用每头平铺与归约策略
  • 通过共享 IOSurface 实现 GPU↔ANE 零拷贝流水线(GPU 预填充 → ANE 解码)

INT8 W8A8 量化——M4, H16G 下吞吐量提升 1.88 倍:

配置 FP16 INT8 W8A8 加速比
128x 卷积 512 通道 64x64 18.6 TOPS,14.8ms 35.1 TOPS,7.8ms 1.88x
64x 卷积 512 通道 64x64 18.4 TOPS,7.5ms 34.1 TOPS,4.0ms 1.85x

INT8 激活值通过 MIL quantize/dequantize 操作,将 tile 之间的 L2 SRAM 带宽减半。权重使用 constexpr_affine_dequantize(以 int8 存储,编译时转换为 fp16)。

架构

动态流水线使用共享 ANE 内核,权重打包进空间维度(权重变化时无需重新编译):

MHA 模型(Stories110M)——每层 6 个内核:

内核 功能
sdpaFwd QKV 投影 + SDPA + 输出投影
ffnFused SwiGLU FFN(W1、W3、SiLU、W2)
ffnBwdW2t / ffnBwdW13t FFN 反向传播(为节省内存拆分为两部分)
sdpaBwd1 / sdpaBwd2 SDPA 反向传播

GQA 模型(Qwen3-0.6B)——每层 10 个内核: 新增独立的 woFwdqBwdkvBwd 内核,用于处理分组查询注意力(Q_DIM ≠ DIM)。

CPU 负责:RMSNorm 的前向和反向计算、残差连接(DeepNet α 缩放)、损失计算、dW 梯度累积(cblas_sgemm)以及 Adam 优化器的更新。

关键优化:

  • 通道优先的 CPU 布局——与 ANE IOSurface [1,C,1,S] 格式一致,消除所有转置开销
  • vDSP 向量化 RMSNorm——比原生实现快 10 倍(6.7ms → 0.7ms)
  • GCD 异步 cblas 重叠——dW 梯度 sgemms 在串行调度队列上与 ANE 评估并行执行
  • 延迟 cblas 等待——将等待推迟到下一步的前向传播中,以实现最大重叠
  • ANE RMSNorm 融合——将 RMSNorm 作为 MIL 操作融合进前向内核(reduce_sum + pow + mul)
  • Wo^T 融合——输出投影的反向传播与 SDPA 反向传播内核合并
  • 前向输出引出——Q、K、V、注意力分数和隐藏状态通过拼接输出暴露出来,避免 CPU 重复计算
  • exec() 重启——绕过每个进程约 119 次的 ANE 编译次数限制

文件结构

├── api_exploration.m           # 初始 ANE API 发现
├── inmem_basic.m               # 内存中 MIL 编译的概念验证
├── inmem_bench.m               # ANE 分发延迟基准测试
├── inmem_peak.m                # 峰值 TFLOPS 测量(2048×2048 矩阵乘法)
├── ane_int8_bench.m            # INT8 W8A8 与 FP16 吞吐量对比基准测试
├── sram_bench.m                # ANE SRAM 带宽探测
├── sram_probe.m                # SRAM 大小/布局探索
├── gpu_ane_share.m             # GPU↔ANE 零拷贝 IOSurface 示例
├── gpu_prefill_ane_decode.m    # GPU 预填充 → ANE 解码流水线
├── bridge/
│   ├── ane_bridge.h            # 可由 C 调用的 ANE API(编译、评估、I/O)
│   ├── ane_bridge.m            # 桥接实现(int8 + fp16 权重块)
│   └── Makefile
└── training/
    ├── ane_runtime.h           # ANE 私有 API 封装(编译、评估、IOSurface)
    ├── ane_classifier.h        # 分类器前向传播(32K 卷积)、softmax、rmsnorm 在 ANE 上执行
    ├── train_large.m           # 静态流水线(权重作为常量,需重新编译)
    ├── training_dynamic/
    │   ├── train.m             # 动态训练循环(模型无关)
    │   ├── config.h            # 衍生尺寸、结构体、内存分配辅助函数
    │   ├── mil_dynamic.h       # 用于动态权重核的 MIL 生成器(支持 GQA)
    │   ├── io.h                # IOSurface I/O、权重暂存、GQA 片段化/归约
    │   ├── models/
    │   │   ├── stories110m.h   # Stories110M 配置(12 层,MHA)
    │   │   └── qwen3_06b.h    # Qwen3-0.6B 配置(28 层,GQA)
    │   └── Makefile
    ├── dashboard.py            # 实时训练仪表板(受认可的 TUI)
    └── Makefile

训练数据

训练需要预分词的 TinyStories 数据。下载方法如下:

cd training && bash download_data.sh

详细训练说明请参阅 training/README.md

构建

需要 macOS 15+ 且搭载 Apple Silicon 芯片(已在 M4 上测试)。

# 动态流水线(推荐)—— 模型在构建时选定
cd training/training_dynamic
make MODEL=stories110m    # Stories110M(12 层,MHA,1.09 亿参数)
make MODEL=qwen3_06b      # Qwen3-0.6B(28 层,GQA,5.96 亿参数)
./train --scratch          # 从随机初始化开始训练
./train --resume           # 从检查点恢复训练

# 静态流水线(遗留方案——每步都会重新编译权重)
cd training && make train_large
./train_large ane_stories110M_ckpt.bin 256 100 1e-4

# INT8 基准测试
xcrun clang -O2 -fobjc-arc -framework Foundation -framework IOSurface -ldl \
  -o ane_int8_bench ane_int8_bench.m
./ane_int8_bench

# 桥接库(可由 C 调用的 ANE API)
cd bridge && make

无外部依赖。仅使用系统框架及通过 objc_msgSend 在运行时解析的 ANE 私有 API。

工作原理

  1. MIL 生成 — Objective-C 代码在运行时构造 MIL 程序文本,指定卷积(用于线性层)、矩阵乘法(用于注意力机制)、softmax 和逐元素操作。
  2. 内存中编译_ANEInMemoryModelDescriptor 直接将 MIL 文本和权重块编译为 ANE 程序,无需磁盘上的 mlmodelc 文件。
  3. IOSurface I/O — 输入输出张量通过 IOSurface 共享内存以 [1, 通道数, 1, 空间维度] 格式传递(fp16 或 fp32;fp16 直接 I/O 速度提升约 37%)。
  4. 动态权重 — 激活值和权重打包到单个空间输入维度中,在 MIL 内核内部再进行切分。权重可在不重新编译的情况下变化。
  5. 梯度流 — 前向传播会暴露反向传播所需的中间结果;反向传播内核在 ANE 上计算输入梯度 dx;权重梯度 dW 则由 CPU 通过 cblas 计算。
  6. INT8 量化 — 使用 constexpr_affine_dequantize 处理 int8 权重,并在各层之间进行量化/反量化,以便在 L2 SRAM 中缓存 int8 激活值(吞吐量提升 1.88 倍)。

限制

  • SDPA 因果掩码 — ANE 硬件会忽略 SDPA 操作中的 attn_mask;因果注意力被分解为单独的 Q@K^T(ANE)→ 掩码+softmax(CPU)→ 分数@V(ANE)。
  • 约 119 次编译限制 — ANE 编译器存在资源泄漏问题,可通过重启进程并加载检查点来规避。
  • FP16 梯度下溢 — 反向传播中的矩阵乘法在 fp16 下会发生下溢,已通过全局损失缩放(256 * NLAYERS)解决。
  • 单输入约束 — ANE 请求多输入会导致 0x1d 错误;应将输入打包到空间维度中。

性能

训练吞吐量(M4):

模型 参数 每步时间 (ms) 层数 每层内核数
Stories110M 1.09 亿 91 12 6(MHA)
Qwen3-0.6B 5.96 亿 412 28 10(GQA)

ANE 峰值吞吐量(M4,H16G):

精度 峰值 TOPS 配置
FP16 18.6 128 个卷积,512 通道,64×64
INT8 W8A8 35.1 128 个卷积,512 通道,64×64

GPU↔ANE 推理流水线(M4,序列长度=256):

模型 GPU 预填充 ANE 解码 总计
Stories110M 6.7 ms 1.9 ms 8.8 ms
Qwen3-0.6B 9.7 ms 2.3 ms 12.0 ms

免责声明

本项目使用了 Apple 的私有未文档化 API(_ANEClient_ANECompiler_ANEInMemoryModelDescriptor)。这些 API 不受任何公开稳定性保证,可能随 macOS 更新而更改或失效。本项目是对 Apple Neural Engine 架构的独立研究,所使用的 API 是通过运行时内省发现的,仅用于研究和教育目的,符合合理使用和互操作性条款(参见 Sega v. Accolade, 1992;DMCA §1201(f))。本仓库不包含任何 Apple 专有代码或二进制文件。本项目与 Apple Inc. 无任何关联,亦未获其认可。请用户自行承担风险。

许可证

MIT — 详见 LICENSE


由人类与 Claude 共同打造,利用每个周末的时间完成。

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|4天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|5天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

149.5k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|今天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|昨天
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|4天前
插件开发框架