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
相关产品推荐
相关产品推荐

