
ANE模型扩展指南如何为NPU训练添加自定义Transformer模型【免费下载链接】ANETraining neural networks on Apple Neural Engine via reverse-engineered private APIs项目地址: https://gitcode.com/GitHub_Trending/ane2/ANEANE是一个研究性开源项目通过逆向 Apple Neural Engine 的私有 API_ANEClient/_ANECompiler在 Apple Silicon 的 NPU 上直接训练 Transformer 神经网络——不依赖 CoreML 训练接口不使用 GPU 或 Metal。它的动态权重管线已支持 Stories110M 和 Qwen3-0.6B而得益于模型无关的架构设计为 NPU 训练添加你自己的 Transformer 模型只需创建一个头文件。为什么选择 ANE 做端侧 NPU 训练传统上Apple 的神经引擎只被允许用于推理通过 CoreML训练必须交给 GPU。ANE 项目通过逆向前向反向传播完整跑在 ANE 上ANE 负责前向/反向的 dx 梯度注意力投影、SwiGLU FFN 等核心矩阵运算CPU 负责RMSNorm、残差连接、损失计算、权重梯度cblas与 Adam 更新已验证的训练速度M4 芯片模型参数量架构每步耗时Stories110M109M12层 MHA91 msQwen3-0.6B596M28层 GQA (16q/8kv)412 ms社区实测数据可参考 benchmarks/ANE_BENCHMARK_REPORT.md覆盖 M1 Pro 到 M5 各代芯片。准备工作环境要求与获取仓库硬件与系统Apple SiliconM4 已测试M3 为开发平台 macOS 15。获取代码如无本地副本git clone https://gitcode.com/GitHub_Trending/ane2/ANE下载预分词训练数据TinyStories约 41 MBcd training bash download_data.sh无需安装任何外部依赖——项目只使用系统框架 运行时动态解析的 ANE 私有 API。第一步理解模型配置头文件的结构ANE 的动态管线是模型无关的所有层尺寸、权重大小、IOSurface 布局和 MIL 计算图内核都由一个模型配置头文件中的宏自动推导。先看看官方自带的两个例子MHA 模型training/training_dynamic/models/stories110m.hGQA 模型training/training_dynamic/models/qwen3_06b.h以 Qwen3-0.6B 为例核心参数就这些宏含义Qwen3 取值DIM隐藏层维度1024HIDDENFFN 中间维度3072HEADSQuery 头数16KV_HEADSKV 头数MHA 时等于 HEADS8HD每个头的维度可独立于 DIM/HEADS128SEQ序列长度256NLAYERSTransformer 层数28VOCAB词表大小151936其余一切——GQA 比率、Q/KV 投影维度、各权重矩阵大小、Adam 状态、激活缓存——全部在 training/training_dynamic/config.h 中自动派生。第二步创建你的模型配置头文件在training_dynamic/models/下新建mymodel.h填入你的架构参数即可#pragma once #define MODEL_NAME MyModel-1B #define DIM 2048 #define HIDDEN 5504 #define HEADS 32 #define KV_HEADS 8 #define HD 64 #define SEQ 256 #define NLAYERS 22 #define VOCAB 32000 #define CKPT_PATH ane_mymodel_dyn_ckpt.bin #define DEFAULT_DATA_PATH ../tinystories_data00.bin 注意三个约束条件填错会导致编译失败或形状不匹配HEADS必须能被KV_HEADS整除GQA 分组要求HD是显式指定的不要默认等于DIM/HEADSQwen3 正是 HD128 而 DIM/HEADS64若为 MHA无 GQA直接令KV_HEADS HEADS第三步一条命令构建并启动训练Makefile 通过-include models/$(MODEL).h把选中的配置注入编译见 training/training_dynamic/Makefilecd training/training_dynamic make MODELmymodel # 用你的配置构建 ./train --scratch # 从随机初始化开始训练 ./train --resume # 从断点恢复支持 exec() 重启续训 ./train --steps 200 --lr 1e-4 # 自定义步数与学习率得益于动态权重管线所有层的 ANE 内核在启动时只编译一次约 0.4 秒权重通过 IOSurface 空间维度传入训练过程中权重更新无需重新编译——这正是添加自定义模型如此简单的根本原因。用实时仪表盘监控训练过程训练时可以用官方 TUI 仪表盘观察 loss 曲线、功耗、CPU 占用与内存pip install blessed psutil numpy sudo python3 training/dashboard.py --dynamic # 监控动态管线实现源码在 training/dashboard.py顶部 GIF 即为它的实际效果。进阶想深入模型扩展机制如果你要修改的不是添加模型而是修改内核建议按此顺序阅读源码模块作用training/training_dynamic/mil_dynamic.h动态权重内核的 MIL 生成器GQA 感知training/training_dynamic/io.hIOSurface 输入输出、权重暂存、GQA 分块/归约training/training_dynamic/cpu_ops.hCPU 端算子SiLU 反向、交叉熵、Adamtraining/training_dynamic/train.m模型无关的动态训练主循环bridge/ane_bridge.hC 可调用的 ANE 编译/执行桥接 API常见问题速查Q为什么训练到一半程序重启了这是刻意设计。ANE 编译器每个进程约 119 次编译上限项目用exec()重启 checkpoint 断点续训绕过属于正常现象。Q为什么 FP16 反向传播需要 loss scaling反向矩阵乘法在 FP16 下会下溢项目通过全局损失缩放256 * NLAYERS解决。Q我的模型超过 1B 参数能训练吗目前定位是小型研究模型大模型训练仍非消费级硬件的目标场景详见 README.md 的项目边界说明。小结为 ANE 的 NPU 训练添加自定义 Transformer 模型本质上就是填写一张架构参数表创建一个models/xxx.h头文件 →make MODELxxx→./train --scratch。动态权重管线会自动处理 MIL 内核、IOSurface 布局与 GQA 分块的全部细节。项目采用 MIT 协议鼓励 fork 与魔改——把你的模型训练跑起来就是对这个研究方向最好的贡献。更多训练细节可查阅 training/README.md 中关于三条训练管线静态基线 / 静态ANE 扩展 / 动态权重的完整性能对比。【免费下载链接】ANETraining neural networks on Apple Neural Engine via reverse-engineered private APIs项目地址: https://gitcode.com/GitHub_Trending/ane2/ANE创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考