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

Apple M1安装tensorflow-metal后出现StatefulPartitionedCall_10错误求助

解决Apple M1上TensorFlow-Metal训练报错NotFoundError的方案

针对你在M1设备上安装tensorflow-metal后,model.fit抛出NotFoundError的问题,以下是经过验证的解决步骤:

1. 严格匹配TensorFlow与TensorFlow-Metal版本

M1的Metal插件对TensorFlow版本有严格依赖,版本不兼容是最常见的报错原因:

  • 查看当前版本:
    python -c "import tensorflow as tf; print(tf.__version__)"
    python -c "import tensorflow_metal as tfm; print(tfm.__version__)"
    
  • 对应版本参考(仅列常用稳定版):
    • TensorFlow 2.15 ↔ TensorFlow-Metal 1.1.0
    • TensorFlow 2.14 ↔ TensorFlow-Metal 1.0.0
    • TensorFlow 2.13 ↔ TensorFlow-Metal 0.9.0
  • 卸载不匹配版本并重装:
    pip uninstall tensorflow tensorflow-metal -y
    pip install tensorflow==2.15 tensorflow-metal==1.1.0  # 替换为对应版本
    

2. 统一数据类型为float32

Metal对float64支持有限,将训练/验证数据强制转换为float32:

x_train = x_train.astype('float32')
y_train = y_train.astype('float32')
x_val = x_val.astype('float32')
y_val = y_val.astype('float32')

3. 修正validation_data格式

将列表格式改为元组(Metal对输入格式要求更严格):

history = model.fit(x_train, y_train, batch_size=32, epochs=10,
    validation_data=(x_val, y_val),  # 从[]改为()
    verbose=2
)

4. 启用GPU内存动态增长并清理缓存

M1 GPU显存有限,动态分配内存可避免缓存溢出:

import tensorflow as tf
# 启用动态内存增长
gpus = tf.config.list_physical_devices('GPU')
if gpus:
    tf.config.experimental.set_memory_growth(gpus[0], True)

如果仍报错,重启终端或设备彻底清除GPU缓存。

5. 调整batch size

若模型较大,32的batch size可能超出M1 GPU显存,尝试调小:

history = model.fit(x_train, y_train, batch_size=16, epochs=10,  # 改为16或8
    validation_data=(x_val, y_val),
    verbose=2
)

6. 检查模型中的不兼容操作

部分自定义层或旧版TensorFlow操作(如tf.nn.raw_ops下的部分OP)未被Metal支持,尝试替换为Keras内置层或兼容OP:

  • 例如用tf.keras.layers.Dense替代自定义全连接层
  • 避免使用未在Metal支持列表中的操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:55:22