ML.NET图像分类功能在macOS M1设备运行崩溃问题咨询
问题根因
- 架构不兼容:你使用的SciSharp.TensorFlow.Redist 2.3.1版本仅提供x86_64架构的二进制文件,M1芯片为ARM64架构,原生运行时找不到对应架构的libtensorflow共享库,所以触发崩溃,且因为是底层原生库加载失败,上层C#的try-catch无法捕获异常。
- 运行环境适配差:.NET Core 3.1已于2022年底停止官方支持,对M1系列芯片的适配存在大量缺陷,ML.NET 1.6版本也未针对ARM64架构的macOS做适配。
排查与解决步骤
- 版本升级适配(优先推荐)
- 将项目的TargetFramework从
netcoreapp3.1升级到net6.0及以上版本,新版本.NET对M1架构有原生支持 - 将所有ML.NET相关NuGet包(Microsoft.ML、Microsoft.ML.Vision、Microsoft.ML.ImageAnalytics)升级到2.0及以上稳定版,新版本已适配ARM64 macOS
- 替换SciSharp.TensorFlow.Redist包为支持M1的版本:卸载原有2.3.1版本的包,安装适配ARM64 macOS的
SciSharp.TensorFlow.Redist.OSX.ARM64对应版本,或使用2.10及以上版本的TensorFlow Redist包
- 将项目的TargetFramework从
- 手动补全库方案
如果你需要保留现有1.6版本的ML.NET依赖,可手动下载ARM64架构对应版本的libtensorflow动态库,将libtensorflow.dylib文件放置到/usr/local/lib目录下,或在运行前将库文件所在目录添加到DYLD_LIBRARY_PATH环境变量中 - 临时验证方案
可通过Rosetta 2转译运行验证逻辑是否正常:右键终端应用选择「显示简介」,勾选「使用Rosetta打开」,在转译后的终端中执行dotnet run,即可加载x86版本的tensorflow库运行程序。
内容的提问来源于stack exchange,提问作者JoeGER94
相关产品推荐
相关产品推荐

