【发布时间】:2022-01-11 08:49:48
【问题描述】:
我刚拿到带有 M1 Max 芯片的新 MacBook Pro,并且正在设置 Python。我已经尝试了几种组合设置来测试速度 - 现在我很困惑。先把我的问题放在这里:
- 为什么在 M1 Max 上原生运行 python 比在我的配备 Intel i5 的旧 MacBook Pro 2016 上慢很多(~100%)?
- 在 M1 Max 上,为什么原生运行(通过 miniforge)和通过 Rosetta 运行(通过 anaconda)之间没有显着的速度差异 - 应该慢约 20%?
- 在 M1 Max 和原生运行中,为什么 conda 安装的 Numpy 和 TensorFlow 安装的 Numpy 之间没有显着的速度差异 - 应该更快?
- 在 M1 Max 上,为什么在 PyCharm IDE 中运行总是比从终端运行慢约 20%,这在我的旧 Intel Mac 上不会发生。
支持我的问题的证据如下:
这是我尝试过的设置:
1.由
安装的Python-
Miniforge-arm64,因此 python 在 M1 Max 芯片上原生运行。 (从活动监视器检查,python 进程的
Kind是Apple)。 -
Anaconda。然后通过Rosseta运行python。 (从活动监视器检查,python 进程的
Kind是Intel)。
2。由
安装的 Numpy-
conda install numpy: numpy 来自原 conda-forge 频道,或预装了 anaconda。 - Apple-TensorFlow:用miniforge安装的python,我直接安装tensorflow,numpy也会安装。据说这样安装的numpy是针对苹果M1优化的,速度会更快。以下是安装命令:
conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal
3.从
运行- 终端。
- PyCharm (Apple Silicon version)。
这里是测试代码:
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 installed by (run on)→ | Miniforge (native M1) | Anaconda (Rosseta) |
+----------------------+------------+------------+----------+----------+---------+
| Numpy installed by ↓ | Run from → | Terminal | PyCharm | Terminal | PyCharm |
+----------------------+------------+------------+----------+----------+---------+
| Apple Tensorflow | 4.19151 | 4.86248 | / | / |
+-----------------------------------+------------+----------+----------+---------+
| conda install numpy | 4.29386 | 4.98370 | 4.10029 | 4.99271 |
+-----------------------------------+------------+----------+----------+---------+
这很慢。为了比较,
- 在我的带有 i5 芯片的旧 MacBook Pro 2016 上运行相同的代码 - 花费
2.39917s。 - 另一个 post (but not in English) 报告使用 M1 芯片(不是 Pro 或 Max)运行,miniforge+conda_installed_numpy 是
2.53214s,miniforge+apple_tensorflow_numpy 是1.00613s. - 您也可以自己试一试。
这里是CPU信息详情:
- 我的旧 i5:
$ 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:
% sysctl -a | grep -e brand_string -e cpu.core_count
machdep.cpu.brand_string: Apple M1 Max
machdep.cpu.core_count: 10
我严格按照教程中的说明进行操作 - 但为什么会发生所有这些情况?是因为我的安装缺陷,还是因为M1 Max芯片?由于我的工作严重依赖本地跑步,本地速度对我来说非常重要。对可能的解决方案的任何建议,或您自己设备上的任何数据点将不胜感激:)
【问题讨论】:
-
我还没有 M1。最简单的测试方法是比较正确设置的人员的设置。以下是指向a set of benchmarks 和the installation procedure they used 的链接,包括活动监视器中的性能应该如何显示。如果你能复制他们的结果,那么 M1 就无法处理你的代码,否则就是安装。
标签: python numpy tensorflow anaconda apple-m1