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

M2 Mac本地运行Segment Anything报错:无法推断numpy.uint8类型

解决M2 MacBook上SAM ONNX示例中torch.as_tensor无法识别numpy.uint8的问题

问题背景

在搭载Sonoma 14.5系统的M2 MacBook本地运行Segment Anything的onnx_model_example.ipynb第11步时,持续触发错误:

RuntimeError: Could not infer dtype of numpy.uint8

报错栈指向torch.as_tensor转换环节。当前使用的conda环境依赖版本:

numpy==1.24.4
torch==1.9.0
torchvision==0.10.0
opencv-python==4.10.0.84

曾测试Python 3.9.19和3.11环境,尝试过多个numpy版本仍未解决;该notebook在Google Colab上可正常运行,但Colab使用的高版本依赖(numpy 1.25.2、torch 2.3.0+cu121等)无法在Mac本地安装。

排查原因

  • Torch版本与Apple Silicon兼容性缺陷:torch 1.9.0属于早期版本,对M系列芯片的原生支持不完善,ARM架构下对numpy数据类型的处理存在适配bug。
  • Numpy与Torch版本不匹配:numpy 1.24.x对数据类型定义有调整,而旧版torch(1.9.0)未同步适配这种变化,导致类型推断失败。
  • ONNX Runtime的ARM适配不足:SAM的ONNX示例依赖ONNX Runtime,若版本过旧,在M系列芯片上处理numpy uint8类型时可能出现兼容性问题。

解决步骤

1. 升级到Apple Silicon原生支持的PyTorch版本

放弃torch 1.9.0,安装官方针对M系列芯片优化的稳定版,在conda环境中执行:

conda install pytorch torchvision torchaudio -c pytorch

该命令会自动安装适配ARM架构的PyTorch 2.x版本,并同步匹配兼容的torchvision、numpy版本。

2. 调整Numpy版本适配新Torch

若自动安装的numpy仍存在兼容性问题,可手动指定适配版本:

conda install numpy=1.26.x

1.26.x系列与PyTorch 2.x在Apple Silicon上兼容性良好。

3. 替换为Apple Silicon优化的ONNX Runtime

卸载原onnxruntime,安装针对ARM架构优化的版本:

pip uninstall onnxruntime
pip install onnxruntime-silicon

确保ONNX模型在M芯片上的类型处理逻辑正常。

4. 临时修改代码绕过自动推断(应急方案)

若暂时无法升级依赖,可在报错位置显式指定数据类型:

# 原代码示例
tensor = torch.as_tensor(numpy_array)
# 修改后
tensor = torch.as_tensor(numpy_array, dtype=torch.uint8)

强制指定dtype可跳过自动推断环节,直接完成转换。

5. 验证环境依赖一致性

安装完成后,运行以下代码确认版本兼容性:

import torch
import numpy
import cv2
print(f"Torch version: {torch.__version__}")
print(f"Numpy version: {numpy.__version__}")
print(f"OpenCV version: {cv2.__version__}")

确保所有依赖均为Apple Silicon原生支持版本,无跨架构兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:29:52