Apple M1 原生编译 pytorch 和 opencv- Python

2020-12-18 22:43:11 +08:00
 frinstioAKL
最近入手新 macbook air m1 后甚是满意,逐渐将一些开发工作转移到该机器上,在 python 上,我看 numpy 等都已经原生支持了,但是经常使用的 pytorch 和 opencv-python 却没有预编译好的原生版,用 rosetta 转译来得毕竟没有原始爽,就尝试自己编译了下,发现比较顺利。

python 的环境是用 conda-forge 安装的 python3.9, 然后装上了原生的 numpy

1. pytorch
从 github 提交记录来看,其实一个月前有开发者就修复了 m1 上编译报错的问题( https://github.com/pytorch/pytorch/pull/48275), 于是就自己尝试编译了一下。

git clone pytorch 的代码,把 CMakeLists.txt 中的 MKL 和 openmp 关闭就启动编译,一次成功。
安装完按照 https://github.com/pytorch/pytorch/issues/48145#issuecomment-730297957 的评论做了个简单矩阵加法的 benchmark (可能并不合适), 得到的速度是 44~45 it/s, 手上 mac mini i5 2018 late 的速度是 20~21 it/s, 而 github 评论里面 nvidia 3090 的速度是 670 it/s, 3900x cpu 速度是 21 it/s,所以整体上还是比较满意的。

2. opencv-python
按照 https://github.com/skvark/opencv-python 简单走一遍编译就完事了,我把 opencv-contrib 也一并打包进去了。

方便有需要的朋友直接拿来使用,我把我编译好的 wheel 文件放在我 github 了,可以自行下载 pip 安装。
地址: https://github.com/wizyoung/AppleSiliconSelfBuilds

深度体验几天下来,感觉 m1 的开发工具链支持速度还是满快的,比预期要快,明年 m2 可期。
6583 次点击
所在节点    Apple
18 条回复
zJeff
2020-12-23 10:57:50 +08:00
曲高和寡
szxczyc
2020-12-23 13:02:05 +08:00
pycharm 什么时候才能原生支持呢
scukmh
2020-12-23 13:10:44 +08:00
等等党永远不亏
wengych
2020-12-23 13:13:55 +08:00
@szxczyc 估计快了,RubyMine 已经出了
frinstioAKL
2020-12-23 13:37:47 +08:00
@szxczyc 好久没用 pycharm 了,感觉 vscode 下用 pylance 插件体验已经很好了😆
byte10
2020-12-23 15:55:31 +08:00
@szxczyc VSCODE 吧,用它,脚本 语言用它就最好了,以后会大统一,所有东西都在 vscode 开发了
furthernh
2021-01-11 23:07:30 +08:00
ERROR: opencv_contrib_python-4.5.0+bbaa777-cp39-cp39-macosx_11_0_arm64.whl is not a supported wheel on this platform.
furthernh
2021-01-11 23:28:55 +08:00
怎么搞啊 楼主
furthernh
2021-01-11 23:29:21 +08:00
不会用啊 build 出来的 wheel
frinstioAKL
2021-01-12 00:18:41 +08:00
@furthernh 你怕不是用的 intel 版本的 python,你检查了么
另外,homebrew 几天前支持 opencv arm64 了: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/opencv.rb
furthernh
2021-01-12 01:21:20 +08:00
我发现我是 3.8 的没办法用你的 whl,
于是我打算自己 build 按照步骤来,还是有问题
最后我改了你的 cp39 -> cp38,安装上了 但是 还是没法 import cv2
furthernh
2021-01-12 02:32:33 +08:00
嗯 我还是真用了 Intel 版本的 python 因为 TensorFlow 需要 3.8 才能跑,我就打算 3.8 搞一个 发现 3.8build 不了 arm 版本版本的 我用 x86 版本的 whl 也不可以,我用 conda 安装了 OpenCV,可以用 cv2,但是 pycharm 点不进去。感谢!
furthernh
2021-01-12 02:38:57 +08:00
conda 安装的 OpenCV,site-packages 里面没有 cv2 的文件夹
furthernh
2021-01-12 03:33:44 +08:00
搞出来了 最后按照这个 搞了一个 https://sayak.dev/install-opencv-m1/#Compile-OpenCV
jupyter 不好用 明天再说吧 困死了
ranxfan
2021-03-05 10:51:51 +08:00
@furthernh 老哥你编译出来了吗?我按这个教程 https://sayak.dev/install-opencv-m1/#Compile-OpenCV 在 make -j8 那里一直出错,走不下去了,我也是 TensorFlow 需要 3.8,能不能怎么发个可用的版本给我 .whl ?
ranxfan
2021-03-05 11:49:19 +08:00
当我没说😄,发现已经可以:conda install opencv
ALUliker
2021-03-15 14:43:29 +08:00
@frinstioAKL 您好!我目前同样也有源码编译 pytorch 的需求。按您的步骤,我关闭了 CMakeLists.txt 中的 openmp,但是我不清楚在哪里可以关闭 MKL,希望您可以指点一下
huzhikuizainali
2021-07-05 21:32:05 +08:00
@ranxfan 可以用 conda 构建不同的虚拟环境么?构建虚拟环境有时是为了使用一些 python 老版本或者老版本第三方包,这些老版本包能用么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX