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

为何M1 Max原生运行Numpy速度远低于旧款Intel i5处理器?

M1 Max MacBook Pro Python环境运行速度异常问题

核心问题

  • 为何M1 Max原生运行Python的速度比2016款搭载Intel i5的旧MacBook Pro慢约100%?
  • M1 Max上通过Miniforge原生运行和通过Anaconda借助Rosetta转译运行的速度无显著差异,不符合转译运行预期慢20%的结论,原因是什么?
  • M1 Max原生运行场景下,conda安装的Numpy和随TensorFlow安装的M1优化版Numpy无显著速度差,不符合优化版更快的预期,是什么原因?
  • M1 Max上在Apple Silicon版PyCharm中运行代码的速度恒定比终端运行慢约20%,该情况未在旧Intel Mac上出现,原因是什么?

对照测试设置

1. Python安装来源

  • Miniforge-arm64:Python可在M1 Max芯片上原生运行,可通过活动监视器验证,Python进程的Kind属性为Apple。
  • Anaconda:Python通过Rosetta转译运行,可通过活动监视器验证,Python进程的Kind属性为Intel。

2. Numpy安装方式

  • conda install numpy:从conda-forge渠道安装的Numpy,或Anaconda预装的Numpy版本。
  • Apple-TensorFlow配套安装:在Miniforge安装的Python环境中安装TensorFlow时会同步安装适配M1优化的Numpy,官方说明该版本速度更快,安装命令如下:
conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal

3. 运行环境

  • 终端
  • Apple Silicon版PyCharm

测试代码

import time
import numpy as np
np.random.seed(42)
a = np.random.uniform(size=(300, 300))
runtimes = 10

timecosts = []
for _ in range(runtimes):
    s_time = time.time()
    for i in range(100):
        a += 1
        np.linalg.svd(a)
    timecosts.append(time.time() - s_time)

print(f'mean of {runtimes} runs: {np.mean(timecosts):.5f}s')

测试结果

+-----------------------------------+-----------------------+--------------------+
|   Python安装来源(运行模式)→   | Miniforge(M1原生) | Anaconda(Rosetta转译) |
+----------------------+------------+------------+----------+----------+---------+
| Numpy安装来源 ↓ | 运行环境 → |  终端  |  PyCharm | 终端 | PyCharm |
+----------------------+------------+------------+----------+----------+---------+
|          Apple Tensorflow配套         |   4.19151  |  4.86248 |     /    |    /    |
+-----------------------------------+------------+----------+----------+---------+
|        conda install numpy安装        |   4.29386  |  4.98370 |  4.10029 | 4.99271 |
+-----------------------------------+------------+----------+----------+---------+

对照参考数据

  • 相同代码在2016款搭载i5芯片的旧MacBook Pro上运行耗时为*2.39917s*。
  • 公开测试内容显示,普通M1芯片(非Pro/Max版本)使用Miniforge+conda安装Numpy的运行耗时为*2.53214s,使用Miniforge+Apple TensorFlow配套Numpy的运行耗时仅为1.00613s*。

设备参数

2016款Intel i5 MacBook Pro

$ sysctl -a | grep -e brand_string -e cpu.core_count
machdep.cpu.brand_string: Intel(R) Core(TM) i5-6360U CPU @ 2.00GHz
machdep.cpu.core_count: 2

M1 Max MacBook Pro

% sysctl -a | grep -e brand_string -e cpu.core_count
machdep.cpu.brand_string: Apple M1 Max
machdep.cpu.core_count: 10

原因分析与解决方案

1. 整体速度偏慢的核心原因

你当前的Numpy没有调用Apple的Accelerate框架加速线性代数运算,普通conda-forge默认安装的numpy是基于OpenBLAS编译的,M1平台上OpenBLAS的svd算子优化程度远低于Accelerate框架的实现,这也是你和公开测试结果差异巨大的核心原因。
可先验证当前numpy的blas后端:执行np.__config__.show(),如果输出中没有Accelerate相关字样,就说明没有调用苹果的加速框架。

2. 原生与Rosetta运行无差异的原因

Rosetta转译的 overhead 主要集中在逻辑分支密集的纯Python代码,而你测试的核心负载是numpy的svd运算,属于BLAS库的纯C实现,转译开销占比极低,所以几乎看不出差异。

3. 优化版Numpy无效果的原因

你安装的Apple tensorflow配套numpy版本可能出现了版本覆盖,或者conda环境的路径优先级有问题,导致实际调用的还是默认的OpenBLAS版本numpy。可以执行pip list | grep numpy查看安装版本,确认是否是apple提供的优化版本。

4. PyCharm比终端慢20%的原因

Apple Silicon版PyCharm默认会开启代码覆盖率监控、调试器注入等后台进程,且默认的Python解释器路径加载优先级和终端不同,会额外加载PyCharm的运行时钩子。你可以关闭PyCharm的Python Debugger中的PyQt compatible选项,以及关闭代码实时检查功能,再对比运行速度。

可行修复步骤

  1. 完全卸载现有conda环境中的numpy:conda uninstall numpy -y && pip uninstall numpy -y
  2. 确保当前是arm64架构的终端(执行arch输出arm64),使用conda从apple渠道安装优化版numpy:conda install -c apple numpy
  3. 安装完成后再次执行np.__config__.show()确认后端为Accelerate,再重新运行测试即可,正常情况下测试耗时会降到1s以内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:36:00