我刚刚得到了我的新MacBook Pro与M1麦克斯芯片,并正在设置M1。我试过几个组合设置来测试速度--现在我很困惑。首先在这里提出我的问题:
支持我的问题的证据如下:
以下是我尝试过的设置:
1. 安装的Python
Kind是Apple)。Kind是Intel)。2.由安装的Numpy
conda install numpy:从原始的conda锻造通道,或预先安装的anaconda.conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal3.从运行
下面是测试代码:
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 |
+-----------------------------------+------------+----------+----------+---------+这太慢了。作为比较,
2.39917s.芯片在我的旧MacBook Pro 2016上运行相同的代码-它需要花费i52.53214s,芯片(而不是Pro或Max)运行的post (but not in English)报告说,miniforge+conda_installed_numpy是post (but not in English),miniforge+apple_tensorflow_numpy是1.00613s.以下是CPU信息的详细信息:
$ 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% sysctl -a | grep -e brand_string -e cpu.core_count
machdep.cpu.brand_string: Apple M1 Max
machdep.cpu.core_count: 10我严格遵循教程中的指示--但是为什么会发生这些呢?是因为我的安装缺陷,还是因为M1 Max芯片?由于我的工作非常依赖于本地跑,本地速度对我来说是非常重要的。如果您对可能的解决方案或您自己设备上的任何数据点提出建议,将不胜感激:)
发布于 2021-12-07 04:54:32
更新2022年3月28日:请见下面@AndrejHribernik的评论。
如何在M1 Max上安装numpy,性能提高最快(苹果的vecLib)?这是2021年12月6日的答案。
步骤
I.安装微型锻造
这样您的Python就可以在arm64上本地运行,而不是通过Rosseta翻译。
$ bash Miniforge3-MacOSX-arm64.shnp_veclib)$ conda create -n np_veclib python=3.9
$ conda activate np_veclibII.使用vecLib指定的BLAS接口安装Numpy
numpy,首先需要安装cython和pybind11$ conda install cython pybind11numpy by (谢谢@Marijn的回答) -不要使用conda install!$ pip install --no-binary :all: --no-use-pep517 numpy$ git clone https://github.com/numpy/numpy
$ cd numpy
$ cp site.cfg.example site.cfg
$ nano site.cfg编辑复制的site.cfg:添加以下行:
[accelerate]
libraries = Accelerate, vecLib然后构建并安装:
$ NPY_LAPACK_ORDER=accelerate python setup.py build
$ python setup.py install>>> import numpy
>>> numpy.show_config()然后,像/System/Library/Frameworks/vecLib.framework/Headers这样的信息应该被打印出来。
三.使用conda进一步安装其他软件包
使conda识别由pip安装的软件包
conda config --set pip_interop_enabled true必须这样做,否则,如果是conda install pandas,那么numpy将出现在The following packages will be installed列表中并再次安装。但新安装的一个是从conda-forge通道,是缓慢的。
与其他装置的比较:
1.竞争者:
除了上述最优的安装,我还尝试了其他几种安装。
np_default:conda create -n np_default python=3.9 numpynp_openblas:conda create -n np_openblas python=3.9 numpy blas=*=*openblas*np_netlib:conda create -n np_netlib python=3.9 numpy blas=*=*netlib*以上ABC选项直接安装在conda- from通道上.numpy.show_config()将显示相同的结果。要查看差异,请通过conda list检查--例如,openblas包安装在B中。注意,arm64不支持mkl或blis。
np_openblas_source:首先由brew install openblas安装openblas。然后将[openblas] path /opt/homebrew/opt/openblas添加到site.cfg并从源构建Numpy。M1和i9–9880H在帖子中。i5-6360U 2核在MacBook Pro 2016 13英寸。2.基准:
这里我使用两个基准:
mysvd.py:我的奇异值分解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')dario.py:Dario Radečić在上面发布的一个基准脚本。3.结果:
+-------+-----------+------------+-------------+-----------+--------------------+----+----------+----------+
| sec | np_veclib | np_default | np_openblas | np_netlib | np_openblas_source | M1 | i9–9880H | i5-6360U |
+-------+-----------+------------+-------------+-----------+--------------------+----+----------+----------+
| mysvd | 1.02300 | 4.29386 | 4.13854 | 4.75812 | 12.57879 | / | / | 2.39917 |
+-------+-----------+------------+-------------+-----------+--------------------+----+----------+----------+
| dario | 21 | 41 | 39 | 323 | 40 | 33 | 23 | 78 |
+-------+-----------+------------+-------------+-----------+--------------------+----+----------+----------+发布于 2022-06-06 12:30:56
与迷你健忘3-MacOSX-arm64 64,和conda install -c conda-forge numpy "libblas=*=*accelerate",它完美地工作在我的Macbook M1 Max上。
发布于 2022-11-13 09:57:26
谢谢你的小费。在我的新的MAC M1 MAX中,我遵循了以下命令:
bash Miniforge3-MacOSX-arm64.sh)conda init)conda install numpy "libblas=*=*accelerate"然后是链接中建议的基准:
mysvd.py运行在mean of 10 runs: 1.08088s中dario.py的脚本https://gist.githubusercontent.com/daradecic/a2ac0a75d7e5f22c9aa07174dcbbe061/raw/a56ee217e6d3f949b1d1f719a7a134cef130cd9f/macs.py给出:Dotted two 4096x4096 matrices in 0.28 s.
Dotted two vectors of length 524288 in 0.11 ms.
SVD of a 2048x1024 matrix in 0.44 s.
Cholesky decomposition of a 2048x2048 matrix in 0.07 s.
Eigendecomposition of a 2048x2048 matrix in 3.83 s.
TOTAL TIME = 19 secondshttps://stackoverflow.com/questions/70240506
复制相似问题