更新历史记录
- 2020/11/26修复了错误的标题层次结构并更改了某些标题。
概述
- 在M1的MacBook Air上运行" Mac优化的TensorFlow和TensorFlow附加组件"(https://github.com/apple/tensorflow_macos)的尝试和错误
- 从英特尔架构MacBook Pro(2015年初)迁移您的环境,并寻找适应基于ARM架构的方法
- (Mac最佳化)暂时不包含TensorFlow执行结果
背景
苹果的新芯片" M1",其详细信息在日本时间2020/11/11 03:00举行的Apple Event上发布。
在公告中,我很好奇,因为提到了" TensorFlow"作为特定的软件名称,但是此后,Apple的GitHub组织提供了" Mac优化的TensorFlow和TensorFlow插件"(https :: //github.com/apple/tensorflow_macos)已发布。它是使用Apple的
我当时只是想更换M??acBook Pro(2015年初),所以我决定购买配备M1芯片的MacBook Air并进行试验。 1
在将
我来晚了,但我的名字是@ forest1988。
这是我第一次发布至Qiita。我认为有很多部分是无法实现的,但是如果您能看一下并找到一些有用的部分,我将不胜感激。
可能是因为我编写了反复试验的过程而使零件无用地绕道而行,或者由于我的误解而导致了错误。
如有任何疑问,请指出。
环境
-
MacBook Air
- 苹果M1芯片(8核CPU,8核GPU)
- macOS 11.0.1(大苏尔)
- 使用"迁移助手"从MacBook Pro(2015年初)迁移数据
由于
环境的迁移,与macOS 11(Big Sur)的初始状态存在一些差异(例如,终端的外壳不是zsh,而是macOS Catalina等之前使用的bash。) 。
因此,那些在不迁移数据的情况下以干净状态使用Big Sur和M1的用户,从Windows机器迁移的用户等,以及创建了完全不同的环境的人
首次尝试并失败
由于可以按原样复制MacBook Pro上创建的python环境,因此我首先尝试运行它。
具体来说,这是在pyenv中安装anaconda3-2020.07的状态。 Python版本是3.8.3。
单击
链接以在https://github.com/apple/tensorflow_macos/releases下载
GitHub存储库包含下载和安装脚本,但是此预发行的压缩文件包含优化的TensorFlow等(可以通过脚本下载),因此为331.6MB,大约大小。
首先,使用Python 3.8的venv为
我担心在pyenv的Python中添加更多的venv会使它变得奇怪...但是我决定尝试一下(正如我稍后会解释的,在那之前是一个问题)。
1 | $ /bin/bash install_venv.sh --prompt --python /path/to/anaconda3-2020.7/bin/python |
我运行
并继续使用默认的提示设置。 3
将在提示符处指定的位置创建一个
1 2 3 4 5 | $ . /path/to/tensorflow_macos_venv/bin/activate (tensorflow_macos_venv) (base) primary_prompt_string$ python Python 3.8.3 (default, Jul 2 2020, 11:26:31) [Clang 10.0.0 ] :: Anaconda, Inc. on darwin Type "help", "copyright", "credits" or "license" for more information. |
tensorflow_macos存储库中的README.md包含用于选择CPU和GPU的代码段,因此我决定首先尝试一下。
1 2 | # Import mlcompute module to use the optional set_mlc_device API for device selection with ML Compute. from tensorflow.python.compiler.mlcompute import mlcompute |
让我们尝试使用python,这是之前以交互模式启动的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | >>> # Import mlcompute module to use the optional set_mlc_device API for device selection with ML Compute. >>> from tensorflow.python.compiler.mlcompute import mlcompute Traceback (most recent call last): File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module> from tensorflow.python._pywrap_tensorflow_internal import * ImportError: dlopen(/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found. Did find: /path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture /path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/__init__.py", line 41, in <module> from tensorflow.python.tools import module_util as _module_util File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/__init__.py", line 39, in <module> from tensorflow.python import pywrap_tensorflow as _pywrap_tensorflow File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 83, in <module> raise ImportError(msg) ImportError: Traceback (most recent call last): File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module> from tensorflow.python._pywrap_tensorflow_internal import * ImportError: dlopen(/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found. Did find: /path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture /path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture Failed to load the native TensorFlow runtime. See https://www.tensorflow.org/install/errors for some common reasons and solutions. Include the entire stack trace above this error message when asking for help. |
我是这么认为的,所以我决定尝试其他安装方法。
查看存储库中README.md的INSTALLATION部分。
我运行了以下脚本。
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)" |
毕竟,发生相同的错误,我再次检查错误消息并注意到
我认为可能是因为我使用的anaconda与Intel的x86-64体系结构兼容,所以我决定重新组织Python环境。
使用Homebrew安装Python(这次不起作用)
首先,我从
然后,当我尝试使用已包含的Homebrew重新安装Python时,遇到以下错误。
1 2 3 4 5 6 | Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)! Please create a new installation in /opt/homebrew using one of the "Alternative Installs" from: https://docs.brew.sh/Installation You can migrate your previously installed formula list with: brew bundle dump |
阅读
" Alternative javax"并重新安装Homebrew,如下所示:
1 2 | $ mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew $ mv homebrew/ /opt/ |
将以下内容添加到
1 | export PATH=/opt/homebrew/bin/:$PATH |
使用
1 | $ source ~/.bashrc |
接下来,创建一个已安装
1 | $ /usr/local/Homebrew/bin/brew bundle dump |
结果,以下文件作为
1 2 3 4 5 6 7 8 9 10 11 12 13 | tap "cartr/qt4" tap "homebrew/bundle" ... <略> ... tap "sanemat/font" brew "automake" brew "[email protected]" brew "[email protected]" ... <略> ... brew "sanemat/font/ricty" |
反映如下。
1 2 3 | $ brew tap Homebrew/bundle $ touch Brewfile $ brew bundle --file Brewfile |
但是,我收到以下警告,但无法安装某些软件包。
1 2 3 4 5 6 7 8 | Warning: You are running macOS on a arm64 CPU architecture. We do not provide support for this (yet). Reinstall Homebrew under Rosetta 2 until we support it. You will encounter build failures with some formulae. Please create pull requests instead of asking for help on Homebrew's GitHub, Twitter or any other official channels. You are responsible for resolving any issues you experience while you are running this unsupported configuration. |
我能够放入Python,但是它可能会引起与以前相同的问题,因此我将其卸载并继续。
为系统
尝试使用Python
REQUIREMENTS撰写了有关使用Xcode命令行工具的信息,因此
1 | $ xcode-select --install |
我用
放入了Xcode命令行工具。 6
我想知道这是否可以解决Python问题...但是可能是由于环境迁移,Python 3.9出于某种原因起作用了。
我不耐烦需要Python 3.8的
- 使用Homebrew卸载失败。
-
Python 3.9保留在
/usr/local/bin/python3 中,可能是由于环境迁移所致。
显然,原因之一是Homebrew安装的Python无法成功卸载。
当我用
即使从执行之日起显示,也似乎是上述安装时的日期。
如果您尝试再次卸载,请
1 2 3 4 5 | $ brew uninstall python3 Error: Refusing to uninstall /opt/homebrew/Cellar/[email protected]/3.9.0_2 because it is required by itstool, libxml2 and sphinx-doc, which are currently installed. You can override this and force removal with: brew uninstall --ignore-dependencies python3 |
和错误将显示,请按照以下说明进行卸载。
1 2 | $ brew uninstall --ignore-dependencies python3 Uninstalling /opt/homebrew/Cellar/[email protected]/3.9.0_2... (9,224 files, 137.5MB) |
现在,
但这也是Python 3.9.0。
1 2 3 4 5 | $ /usr/local/bin/python3 Python 3.9.0 (default, Nov 4 2020, 22:18:28) [Clang 12.0.0 (clang-1200.0.32.21)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> |
现在,回顾一下Homebrew警告,
1 | Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)! |
它写为
。
我曾经使用过它而没有详细考虑,但是
可能是保留了环境迁移之前在Homebrew中安装的Python。
因此,请尝试使用迁移前已安装的Homebrew进行卸载。
1 | $ /usr/local/Homebrew/bin/brew uninstall python3 |
我得到与以前相同的依赖性错误,因此添加
1 | $ /usr/local/Homebrew/bin/brew uninstall --ignore-dependencies python3 |
这一次,卸载成功,并且
1 2 3 4 5 6 7 | $ which python3 /usr/bin/python3 $ python3 Python 3.8.2 (default, Oct 2 2020, 10:45:41) [Clang 12.0.0 (clang-1200.0.32.27)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> |
现在,您终于可以为您的Python环境做好准备了!
根据自述文件
重新运行
1 | $ /bin/bash install_venv.sh --prompt --python=/usr/bin/python3 |
我能够整齐地安装它,而没有任何问题。
1 2 3 4 5 6 7 8 9 10 | $ . "/path/to/tensorflow_macos_venv/bin/activate" (tensorflow_macos_venv) primary_prompt_string$ which python /path/to/tensorflow_macos_venv/bin/python (tensorflow_macos_venv) primary_prompt_string$ python Python 3.8.2 (default, Oct 2 2020, 10:45:41) [Clang 12.0.0 (clang-1200.0.32.27)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> # Import mlcompute module to use the optional set_mlc_device API for device selection with ML Compute. >>> from tensorflow.python.compiler.mlcompute import mlcompute >>> |
这一次,我能够无任何错误地导入!
但是CPU和GPU的使用情况如何?
1 2 3 4 5 | >>> # Select CPU device. >>> mlcompute.set_mlc_device(device_name='cpu') >>> # Select GPU device. >>> mlcompute.set_mlc_device(device_name='gpu') WARNING:tensorflow:Eager mode on GPU is extremely slow. Consider to use CPU instead |
有关于GPU的警告,但是似乎可以暂时指定CPU和GPU似乎很好。
如果再次查看存储库的README.md,它显示为
为了测试" Mac优化的TensorFlow和TensorFlow附加组件"的真实值,似乎您需要准备不在Eager模式下的代码。
摘要
目标是在带有M1的MacBook Air上运行" Mac优化的TensorFlow和TensorFlow插件"(https://github.com/apple/tensorflow_macos)
这是在将数据从具有Intel处理器的Mac迁移到具有M1的Mac时,在构建Python环境中遇到的部分的摘要。
是否有必要删除在迁移源环境中创建的Python环境或将其重置以使其不被引用?
由于体系结构不同,因此考虑自然是很自然的,但是我想知道我是否可以尽可能地使用在迁移源创建的环境,所以我遇到了很多困难。
有时候
Homebrew目前不支持基于ARM的体系结构,但是将来写
预计还将促进对其他软件的M1支持,因此,从具有Intel处理器的Mac到具有M1的Mac的过渡将越来越容易。
本文仅记录了截至2020年11月24日的情况,并且情况可能在不久的将来(甚至在今天)发生变化。
(或更多)
宣布于2020/11/11(日本标准时间)发布吗?令人印象深刻的是预订开始了,我也决定购买它。如果您不擅长游戏或动漫,并且有空闲时间,请搜索" IDOLM @ STER Hobby编程生日"。这次我没有对"开发"做太多事情,但是在这方面,我受到了" Idolmaster驱动的开发"的影响(参考:https://www.slideshare.net/treby/imas-driven-developemnt)。可以这样说。 ?
关于Mac上Intel架构的操作,Qiita文章" Apple似乎已经为Mac发布了tensorflow,请尝试将其安装在intel的MacBook Air上"(https://qiita.com/notfolder/items/b27cc00bd77eb1587832)),我以此为参考。谢谢。 ?
在macOS Catalina中,zsh应该是默认值,因此我很好奇是否有任何理由敢使用bash。 ?
由于必须使用已经安装的Homebrew来执行此操作,因此我认为最好在安装新的Homebrew之前执行它,而不必麻烦指定完整路径。 ?
有关安装Xcode命令行工具的信息,请参阅Qiita文章:"在Mac上使用Xcode安装python3"(https://qiita.com/todotani/items/73877deea8773c316694)。谢谢。 ?
" //"不是笔误,它实际上是这样显示的。在