You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CoreML集成后出现ANE编译错误日志但推理功能正常的原因咨询

CoreML集成后ANE编译失败日志但功能正常的原因解析

问题场景

我正在给原本使用Onnxruntime的C++ macOS应用集成Objective-C CoreML API,用CoreML实现推理功能。目前功能运行正常、性能提升显著,但每次启动都会弹出一堆错误日志——虽然不影响功能,但用户可见日志里出现这类错误很困扰,想搞清楚原因。

错误日志

2025-09-11 10:50:24.066695+0200 myApp[52481:3095925] [client] loadWithQoS:options:error:: loadModel:options:qos:error: failed! lErr=Error Domain=com.apple.appleneuralengine.compiler Code=1 "_ANECompiler : ANECCompile() FAILED" UserInfo={NSLocalizedDescription=_ANECompiler : ANECCompile() FAILED, NSUnderlyingError=0x6000017a9830 {Error Domain=com.apple.appleneuralengine.compiler Code=1 "ANECCompile(/var/folders/rx/rx92242x4rg90_9wb132n_y00000gp/T/495B8D31A99112D2DF18E008E7E1F8E75A4217C733F855E8A2291CBEE633DC69_A2C1576A75CE76E73DB16939AEBCF513D4209E3E380FA2F1B06F285C564AF345_E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855/) FAILED: err=(
    CompilationFailure
)" UserInfo={NSLocalizedDescription=ANECCompile(/var/folders/rx/rx92242x4rg90_9wb132n_y00000gp/T/495B8D31A99112D2DF18E008E7E1F8E75A4217C733F855E8A2291CBEE633DC69_A2C1576A75CE76E73DB16939AEBCF513D4209E3E380FA2F1B06F285C564AF345_E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855/) FAILED: err=(
    CompilationFailure
)}}}
2025-09-11 10:50:24.066951+0200 myApp[52481:3095925] [espresso] [Espresso::handle_ex_plan] exception=ANECF error: failed to load ANE in-memory model. Error=_ANECompiler : ANECCompile() FAILED
2025-09-11 10:50:24.067310+0200 myApp[52481:3095925] [coreml] Error plan build: -1.

我的实现流程

  • 模型以加密文件打包,运行时解密后通过MLModelAsset modelAssetWithSpecificationData:error:从内存块加载
  • 再通过MLModel loadModelAsset:configuration:completionHandler:加载实际模型实例
  • 最后用MLModel predictionFromFeatures:options:error:执行推理
  • 所有API调用均未报错,输出结果有效,Instruments也能看到CoreML函数被调用

日志产生的背景原因

这是CoreML内部的降级逻辑日志:CoreML会优先尝试将模型部署到Apple Neural Engine(ANE,苹果神经引擎)以获取最优性能,但部署失败后会自动降级到CPU/GPU执行,所以功能不受影响,但内部失败过程的日志没被CoreML屏蔽,就输出到了系统日志中。

具体触发原因可能有以下几种:

  1. 模型算子不兼容ANE:不是所有CoreML支持的算子都能在ANE上运行,比如自定义算子、部分复杂层类型,或者模型输入输出形状不符合ANE的硬件限制,导致ANE编译器编译适配代码失败。
  2. 内存加载模型的限制:你是从内存加载解密后的模型规范数据,ANE编译器处理内存模型时需要在系统临时目录生成临时文件(日志里的/var/folders/...路径就是临时目录),但这个过程可能因权限、临时文件规则等问题失败,CoreML随即切换到CPU/GPU路径。
  3. CoreML内部重试机制:CoreML默认会优先尝试ANE,失败后自动 fallback 到其他计算设备,这个失败过程的日志没有被内部吞掉,所以会显示出来。

消除日志的方法

  • 指定运行设备跳过ANE尝试:在MLModelConfiguration中设置computeUnits为.cpuAndGPU,直接跳过ANE的适配流程,避免触发失败日志。示例代码:
    MLModelConfiguration *config = [[MLModelConfiguration alloc] init];
    config.computeUnits = MLComputeUnitsCPUAndGPU;
    
  • 修复模型ANE兼容性:用CoreML Tools的coremltools.models.utils.evaluate_spec工具检查模型的ANE兼容性,替换不兼容算子或调整模型结构,让模型能在ANE上运行,从根源消除失败日志。
  • 过滤系统日志:如果无法修改模型或代码,可以在应用中设置日志过滤规则,屏蔽com.apple.appleneuralengine.compiler、espresso、coreml这些域的错误日志,但这种方法属于全局过滤,可能会影响其他有用日志的查看。

内容的提问来源于stack exchange,提问作者PluginPenguin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:13:14