直接在苹果的神经引擎上训练和运行变压器
在苹果硅上直接为变压器提供神经引擎推理——比CoreML快4.76倍。Espresso通过反向工程私有API(_ANEClient,_ANEInMemoryModel)直接将MIL程序编译到ANE硅上。不使用CoreML。无逐词再编译。只需IOSurface缓冲区、融合的多层内核和每个解码步骤的两个经过验证的令牌。解码速度快4.76倍——在相同的6层模型上为1.08毫秒/令牌,而CoreML为5.09毫秒/令牌。融合的3层内核——在2个ANE调度中处理6个变压器层,而不是6个。零拷贝I/O——NEON矢量化读取,vDSP argmax,无需序列化。完全在ANE上进行训练——前向和反向传递,带有梯度累积和ADAM。使用纯Swift 6.2——大约可复制的仅移动张量,严格的并发,类型化抛出,无依赖关系。快速入门:git clone https://github.com/christopherkarani/Espresso.git cd Espresso ./espresso # 构建,下载演示权重,启动TUI 在您自己的项目中进行首次ANE推理的五行代码:// Package.swift — 添加依赖项.package( url: "https://github.com/christopherkarani/Espresso.git" , from : "1.0.0")导入 ANERuntime让 kernel = 尝试 ANEKernel(milText: myMIL,weights: blobs,inputSizes: [input],outputSizes: [output])尝试 kernel.eval() // 在神经引擎上运行让 result = kernel.outputSurface(at: 0) // 零拷贝读取其他入口点:./espresso "Hello" # 生成文本 ./espresso doctor # 检查主机准备情况 ./espresso compare --no-power "Hello" # 与CoreML逐一对比 ./espresso install # 安装到 ~/.local/bin swift run espresso-bench --ane-only --inference --layers 6 swift run espc pack-native /path/to/model /tmp/model.esp --overwrite swift run esprun inspect /tmp/model.esp swift run esprun generate /tmp/model.esp "Hello" 32 ESP模型平台Espresso现在围绕便携式的.esp捆绑包和捆绑感知的运行时选择推出了一个私有模型平台。.esp是规范的便携式模型捆绑包.espc是派生的编译缓存层espc将本机模型目录打包到.esp中esprun检查、解析和运行捆绑工件espresso-generate --bundle <path> 运行一个与运行时使用的相同捆绑边界该层当前的公共文档:转换/优化/本机快速策略故事 转换 -> 优化执行计划故事代理提示基准 Espresso vs CoreML vs llama.cpp后端 毫秒/令牌 令牌/秒 注释Espresso ANE (精确的两步) 1.08 926 直接ANE,2次调度/6层 CoreML .cpuAndNeuralEngine 5.09 196 苹果的标准ANE路径 llama.cpp Metal ~12–20 ~50–85 GPU路径,CPU绑定解码¹ llama.cpp CPU(ggml) ~25–40 ~25–40 纯CPU,无ANE¹ Espresso相较于CoreML的加速 4.76x Espresso相较于llama.cpp Metal的加速 ~11x¹ llama.cpp没有ANE后端。Metal数字适用于M3 Max上的GPT-2 117M;实际性能因量化和提示长度而异。所有Espresso/CoreML数字:6层本地工件·dim=768·12个头·32k词汇·seqLen=256·M3 Max·macOS 15。重现Espresso基准RESULTS_DIR=results/ $(date +%Y%m%d-%H%M%S) epeats=5 warmup=3 iterations=20 t ./scripts/reproduce_local_real_artifact_claim.sh可读输出落在artifacts/benchmarks/中,并保持在git之外。平台兼容性SoC神经引擎测试备注M1 / M1 Pro / M1 Max / M1 Ultra 16核ANE ✅ 完整功能集M2 / M2 Pro / M2 Max / M2 Ultra 16核ANE ✅ 完整功能集M3 / M3 Pro / M3 Max 18核ANE ✅ 参考硬件(M3 Max)M4 / M4 Pro / M4 Max 38核ANE ✅ 更快的编译缓存预热 Intel Mac — ❌ 无神经引擎 苹果A系列(iOS)✅ ⚠️ 需要授权;不安全于App Store需要macOS 15+。不支持iOS/tvOS(私有API授权因平台而异)。工作原理 ┌─────────────────────┐ │ MIL程序文本 │ 每个内核生成 └──────────┬──────────┘ ▼ ┌─────────────────────┐ │ _ANEClient编译 │ 私有API(dlopen) └──────────┬──────────┘ ▼ ┌─────────────────────┐ │ ANE E5二进制 │ 系统缓存 └──────────┬──────────┘ ▼ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ IOSurface │ │ IOSurface │ │ IOSurface │ │ (输入) │ │ (权重) │ │ (输出) │ └──────┬───────┘ └──────────────┘ └──────┬───────┘ │ ANE 硬件 │ └──────────────评估───────────────┘解码循环编译一次并在所有步骤中重用该程序。KV缓存位于IOSurface缓冲区中——不通过CoreML进行序列化。每个步骤生成两个精确的令牌并验证奇偶性。融合的三重内核每次调度处理3层,将6层减少为2次评估调用。架构 ANEInterop(ObjC/C — 私有API桥) └── ANETypes(大约可复制的值类型,IOSurface I/O) ├── MILGenerator(28+内核变体) │ └── ANERuntime(编译、评估、表面管理) │ └── Espresso(训练、生成、解码) │ ├── EspressoTrain(CLI) │ └── EspressoBench(CLI) └── CPUOps(Accelerate/vDSP内核) └── Espresso模块它的作用 ANEInterop dlopen桥接至_ANEClient和_ANEInMem
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡