Mac M1安装arm64原生Python用veclib加速numpy
為什么要用arm64原生Python
之前在Mac M1上用anaconda裝的Python,在活動監視器里會發現是Rosetta轉譯的intel應用,運行Python程序性能會有較大損耗,無法發揮出Mac M1和M1 Max的性能。
如果更換為arm64下原生的Python,Apple的veclib能夠加速numpy,相比加速前后性能提升巨大。而常用的pandas,geopandas,scipy等各種數據分析包都是建立在numpy基礎上,M1和M1 Max經過這樣的配置后將成為數據科學領域的神器。
安裝過程
1.卸載anaconda
Uninstalling Anaconda — Anaconda documentationhttps://docs.anaconda.com/anaconda/install/uninstall/用anaconda-clean刪除配置文件
$ conda install anaconda-clean $ anaconda-clean --yes再刪除anaconda3文件夾(根據自己anaconda3的路徑)
$ rm?-rf?~/anaconda32.安裝MacOSX版本的Miniforge3
參考這個,但有小改動https://gist.github.com/MarkDana/a9481b8134cf38a556cf23e1e815dafbhttps://gist.github.com/MarkDana/a9481b8134cf38a556cf23e1e815dafb
3.創建osx-arm64下的Python3.8環境
我這里用的python3.8測試成功,python3.9不一定能行,各位視情況而定
$ CONDA_SUBDIR=osx-arm64 conda create -n py38_native python=3.8 -c conda-forge --override-channels4.安裝numpy
$ pip install cython pybind11 $ pip install --no-binary :all: --no-use-pep517 numpy安裝好后,在Python里運行
>>> import numpy >>> numpy.show_config()看看里面有沒有/System/Library/Frameworks/vecLib.framework/Headers的路徑,如果有,則說明numpy已經能夠使用apple的veclib進行加速,可以在Python中運行下面代碼測試
import time import numpy as np np.random.seed(42) a = np.random.uniform(size=(300, 300)) runtimes = 10timecosts = [] for _ in range(runtimes):s_time = time.time()for i in range(100):a += 1np.linalg.svd(a)timecosts.append(time.time() - s_time)print(f'mean of {runtimes} runs: {np.mean(timecosts):.5f}s')這段代碼用numpy進行了100次SVD分解,在之前intel版本下實測需要29s,而現在經過veclib加速后只需要1s,提升30倍
原來的:
加速的:
5.安裝其他包
接下來用pip install安裝其他的包,我測試了一下conda install,不太行,pip install比較穩妥
jupyter notebook
$ pip install jupyter notebook?pandas
$ pip install pandasgeopandas?
?geopandas不容易裝,直接pip install會報錯,conda install也不行,只能一個一個依賴開始裝,主要有問題的是fiona和pyproj這兩個依賴
1.fiona
對于fiona,它需要GDAL包作為依賴,用homebrew安裝GDAL
$ brew install GDAL然后再安裝fiona就行
$ pip install fiona2.pyproj
對于pyproj,它需要PROJ包作為依賴,用homebrew安裝PROJ
$ brew install PROJ然后安裝pyproj,注意這里不能直接安裝最新版(最新是3.3.1),否則會報錯說PROJ_DIR變量沒設置。
先安裝低版本:
$ pip install pyproj==1.9.6然后再安裝geopandas
$ pip install geopandas成功
TransBigData和pybdshadow
這兩個包是我自己寫的包,TransBigData用于處理時空大數據,pybdshadow用于處理建筑陰影,也一起裝上
$ pip install transbigdata $ pip install pybdshadow效果測試
用我自己開發的pybdshadow測試了一下建筑陰影計算的性能,案例是這個:
pybdshadow/Example1-building_shadow_analysis.ipynb at main · ni1o1/pybdshadow · GitHubA python package for generating, analyzing and visualizing building shadows - pybdshadow/Example1-building_shadow_analysis.ipynb at main · ni1o1/pybdshadowhttps://github.com/ni1o1/pybdshadow/blob/main/example/Example1-building_shadow_analysis.ipynb算一個片區的建筑陰影
有加速的情況用了4.7秒:
沒加速的情況用了8.1秒:
?
?
總結
以上是生活随笔為你收集整理的Mac M1安装arm64原生Python用veclib加速numpy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始搭建AI应用
- 下一篇: ps +pxcook切图 后转移到 ax