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

Mac M1运行TensorFlow时如何将GPU负载提升至100%

M1 Mac 运行TensorFlow GPU负载不足优化方案

你贴出的日志中NUMA节点识别失败、CPU频率获取失败均为tensorflow-metal插件的常规提示,不属于报错,不会影响GPU正常调度。
GPU运行状态截图
当前环境配置如下:

name: tensorflow
 
dependencies:
    - python=3.8
    - pip
    - jupyter
    - apple::tensorflow-deps
    - scikit-learn
    - scipy
    - pandas
    - pandas-datareader
    - matplotlib
    - pillow
    - tqdm
    - requests
    - h5py
    - pyyaml
    - flask
    - boto3
    - openssl
    - pip:
        - tensorflow-macos
        - tensorflow-metal
        - bayesian-optimization
        - gym
        - kaggle

运行时输出日志:

I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:305] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.

I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:271] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)

W tensorflow/core/platform/profile_utils/cpu_utils.cc:128] Failed to get CPU frequency: 0 Hz

I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.

可操作的优化手段

  • 调大训练batch size:GPU负载上不去最核心的原因通常是计算任务量太小,喂不满M1 GPU的计算单元。可以在统一内存允许的范围内逐步增大batch size,直到内存占用接近设备上限且不触发交换,GPU利用率会有明显提升。注意batch size过大会触发内存交换,反而会拖慢整体训练速度。
  • 打通数据供给瓶颈:GPU长期处于等数据的状态时,负载会卡在低位。可以做以下调整:
    • 用tf.data构建数据管道时,加上.prefetch(tf.data.AUTOTUNE),提前加载下一批待计算数据
    • 尽可能把数据预处理逻辑(归一化、编码、裁剪等)封装为TensorFlow原生算子放到GPU侧执行,不要用numpy、pandas在CPU侧做逐批预处理
    • 数据集规模不大时,在数据管道上加.cache()方法,把全量数据缓存到内存,避免每轮训练重复读取磁盘
  • 调整Metal插件调度参数:在导入TensorFlow之前,提前配置环境变量提升GPU任务调度优先级,示例代码:
import os
os.environ['TF_METAL_WORKERS'] = '8'
os.environ['TF_METAL_QUEUE_PRIORITY'] = 'high'
import tensorflow as tf
  • 升级依赖版本:当前使用的Python 3.8对应较早版本的tensorflow-metal,早期版本对M1系列GPU的算子适配不全,部分算子会自动回退到CPU执行,拉低整体GPU负载。建议升级到Python 3.10版本,安装最新版的tensorflow-macos与tensorflow-metal,新版本已经修复了大量算子调度效率问题。
  • 解除系统功耗限制:训练时必须接通电源,在系统设置-电池选项中,把电源适配器模式调整为高功耗,避免系统为了续航限制GPU频率上限。

关于100%负载的说明

M1系列芯片的GPU利用率统计逻辑和英伟达独立显卡不同,活动监视器显示的利用率是GPU所有功能单元的综合占比,TensorFlow的训练任务以矩阵计算为主,无法调用GPU的纹理渲染、光栅化等专用单元,正常情况下矩阵计算场景GPU利用率稳定在70%-80%就已经达到最优调度状态,强行追求100%负载没有实际意义,不会带来训练速度的提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:03:20