如何在MacBook Pro M1上让Keras利用CPU多核训练神经网络
在MacBook Pro M1上让Keras充分利用CPU全部核心的解决方案
1. 切换到Apple优化的TensorFlow环境
M1芯片架构特殊,普通版本TensorFlow对其CPU多核支持不佳,必须使用Apple官方适配的版本:
- 卸载原有TensorFlow:
pip uninstall tensorflow -y - 安装适配版本:
注:pip install tensorflow-macos pip install tensorflow-metaltensorflow-metal用于GPU加速,即使暂时不用GPU,tensorflow-macos也针对M1 CPU的多核调度做了优化。
2. 手动配置TensorFlow并行线程参数
TensorFlow默认线程设置不会最大化利用M1的核心,训练前添加以下代码强制启用多核并行:
import tensorflow as tf # 获取当前CPU核心数 core_count = tf.config.threading.get_num_interop_threads() # 设置操作内和操作间的并行线程数为核心总数 tf.config.threading.set_intra_op_parallelism_threads(core_count) tf.config.threading.set_inter_op_parallelism_threads(core_count) # 启用XLA编译,优化计算图并行效率 tf.config.optimizer.set_jit(True)
intra_op_parallelism_threads:控制单个计算操作内部的并行线程数inter_op_parallelism_threads:控制多个计算操作之间的并行线程数- XLA编译会将计算图转换为更高效的机器码,进一步提升多核利用率
3. 优化数据加载的并行性
如果数据加载是瓶颈,会导致CPU核心闲置,建议用tf.data.Dataset并配置并行预处理:
# 示例:构建并行化的训练数据集 train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)) train_dataset = train_dataset.shuffle(buffer_size=1024)\ .batch(batch_size=32)\ .map( lambda x, y: (your_preprocess_func(x), y), num_parallel_calls=tf.data.AUTOTUNE )\ .prefetch(tf.data.AUTOTUNE)
num_parallel_calls=tf.data.AUTOTUNE让TensorFlow自动根据CPU负载调整预处理的并行线程数prefetch实现数据加载与模型训练的并行,避免CPU等待数据
4. 验证多核利用情况
训练开始后,打开Mac的「活动监视器」(Launchpad → 其他 → 活动监视器),切换到「CPU」标签:
- 观察整体CPU使用率,若接近100%则说明多核已被充分利用
- 也可查看单个Python进程的CPU占用,确认是否用到了所有核心
内容的提问来源于stack exchange,提问作者Jacky
相关产品推荐
相关产品推荐

