2021-01-12 17:02:50 Cyberbolt
注意:本方法在 macOS 12 已失效,Apple Silicon 安装 TensorFlow 的最新方法
ML Compute可直接在Mac上为TensorFlow模型提供训练,可以利用CPU和GPU加速M1和Intel驱动的Mac。苹果M1加速后的性能大致与GTX 1080或1080 Ti相当。
折腾一天后,终于成功在苹果M1中搭建ML Compute加速的TensorFlow 2.4,文章记录我搭建的全过程。
此处附上苹果提供的GitHub链接(由于国内访问GitHub太慢,下文我将安装脚本上传至自己的服务器,并将下载源替换为国内镜像)
一、从Python官网下载支持Apple Silicon的版本
点击此处下载Python,一定要下载带universal2 installer的版本,否则无法运行TensorFlow(例下图)
完成后按默认条件安装即可。在终端输入python3,可看到您下载的Python版本。(图中已安装conda,下文将阐述M1安装conda的方法)
二、安装conda
由于苹果提供的TensorFlow仅支持python3.8+,而python官网只有3.9以上版本支持ARM。此处选择通过ARM版conda创建python3.8虚拟环境,使用创建的ARM python3.8安装TensorFlow。(M1安装conda另有好处,目前仅conda能为M1安装Numpy、Pandas等科学计算环境)
在此处下载ARM版Miniforge3,如下图所示
完成后打开下载目录的终端,运行shell脚本来安装。输入如下命令
bash Miniforge3-MacOSX-arm64.sh
如下图所示
安装后按下述操作激活conda的环境变量。输入命令
vim ~/.bash_profile
按 i键 进入编辑模式,输入自己的conda环境路径
export PATH="/Users/Cyberbolt/miniforge3/bin:$PATH"
上面的路径是我本机的conda环境路径,您的路径可能在别处,通常路径格式为 export PATH="/Users/<你的Mac用户名>/miniforge3/bin:$PATH"。
输入完成后,按一下esc键,之后输入 :wq 回车 保存,保存的内容示例图如下
然后输入命令
source $HOME/.bash_profile
此时在终端输入python3,即为conda中的python。如下图
三、在虚拟环境安装ML Compute版TensorFlow
现在实现我们的最初目的,使用conda创建ARM版Python3.8的虚拟环境。确保conda的python环境已激活,输入如下命令创建虚拟环境
conda create -n py38 python=3.8
输入命令激活刚创建的python3.8解释器
conda activate py38
出现下图标识后,python3.8已激活成功
使用python3.8来创建Virtualenv虚拟环境(目前苹果提供的TensorFlow仅支持Virtualenv)
打开您准备的项目目录,在终端输入
python -m venv venv
此时您的项目目录会生成一个venv目录,如图
点击下载ML Compute版TensorFlow(已替换GitHub文件为国内镜像)
将下载文件和venv均放在项目根目录,如下图所示
回到终端,输入如下命令,安装TensorFlow到虚拟环境
bash download_and_install.sh
根据下面的图片确认安装
注,此处需输入安装虚拟环境的路径(路径以venv结尾)!
下图是我的路径
输入后按回车,之后按y确认,即可安装成功!
四、测试运行TensorFlow代码
这里用VS Code测试,使用VS Code打开项目目录,编辑如下代码
import tensorflow as tf
import time
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
start = time.time()
model.fit(x_train, y_train, epochs=5)
end = time.time()
model.evaluate(x_test, y_test)
print(end - start)
然后选择刚安装的虚拟环境
开始运行
出现所示输出,说明运行成功!成功使用ML Compute加速M1~
附加:
由于部分需求,不方便使用Virtualenv,这里引入两种将TensorFlow部署到conda虚拟环境的方法。
方法一
下载苹果提供的TensorFlow源码(已通过国内镜像加速)
下载后解压,进入tensorflow_macos/arm64目录的终端(示例命令如下)
cd tensorflow_macos/arm64
激活上文创建的ARM Python3.8环境
conda activate py38
依次输入以下命令安装
pip install --force pip==20.2.4 wheel setuptools cached-property six
pip install --upgrade --no-dependencies --force numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl tensorflow_addons-0.11.2+mlcompute-cp38-cp38-macosx_11_0_arm64.whl
pip install absl-py astunparse flatbuffers gast google_pasta keras_preprocessing opt_einsum protobuf tensorflow_estimator termcolor typing_extensions wrapt wheel tensorboard typeguard
pip install --upgrade --force --no-dependencies tensorflow_macos-0.1a1-cp38-cp38-macosx_11_0_arm64.whl
安装完成,便可以在conda虚拟环境py38中使用TensorFlow!
方法二
下载我部署好的conda环境,直接复制到您的环境中【若链接失效,请联系我重发,谢谢】
链接: https://pan.baidu.com/s/1UF9c-2zJEc-uEjeEAjHFHw 密码: csh1
下载后解压,将解压后的文件夹粘贴至您的conda虚拟环境路径(通常,路径格式为/Users/<您的Mac用户名>/miniforge3/envs,如我的路径为/Users/Cyberbolt/miniforge3/envs)
之后使用命令即可激活部署好的虚拟环境
conda activate py38
请问现在支持pytorch'了吗
回复 蓝调咖啡:
支持,但是PyTorch只能调用M1的CPU
回复 Cyberbolt:
现在哪个版本支持呢?直接在pytorch官网找最新版本安装可以吗?我试了试,一直装不上
回复 Cyberbolt:
请教一下 在安装tensor flow的时候安装到了默认的路径,在终端用python import tensor flow,no module named 'tensorflow' 是怎么回事呢?不是激活py38就激活tensor flow了吗
安装完成后显示如下:
tensorFlow and TensorFlow Addons with ML Compute for macOS 11.0 successfully installed.
To begin, activate the virtual environment:
"/private/var/folders/0s/wbr5m5r55dg8smngfmcn0z1r0000gn/T/tmp.0fwCk9IB/tensorflow_macos/y/bin/activate"
回复 蓝调咖啡:
(py38) localhost:Downloads yanli$ cd lly-pro/
(py38) localhost:lly-pro yanli$ ls
download_and_install.sh venv
(py38) localhost:lly-pro yanli$ . venv/bin/activate
(venv) (py38) localhost:lly-pro yanli$ python
Python 3.8.6 | packaged by conda-forge | (default, Jan 25 2021, 22:55:00)
[Clang 11.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'tensorflow'
>>>
回复 Cyberbolt:
现在哪个版本支持呢?直接在pytorch官网找最新版本安装可以吗?我试了试,一直装不上
回复 landiaokafei:
>>> import tensorflow as tf
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'tensorflow'
>>>
你可以在虚拟环境中用pip list查询有没有tensorflow。根据经验,应该是装环境的时候,有步骤操作不正确。只要严格按文中的步骤安装,应该不会出错的。
回复 蓝调咖啡:
我没有在M1安装过PyTorch,建议你Google查询下相关教程
回复 Cyberbolt:
现在哪个版本支持呢?直接在pytorch官网找最新版本安装可以吗?我试了试,一直装不上
回复 蓝调咖啡:
(py38) localhost:Downloads yanli$ cd lly-pro/
(py38) localhost:lly-pro yanli$ ls
download_and_install.sh venv
(py38) localhost:lly-pro yanli$ . venv/bin/activate
(venv) (py38) localhost:lly-pro yanli$ python
Python 3.8.6 | packaged by conda-forge | (default, Jan 25 2021, 22:55:00)
[Clang 11.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'tensorflow'
>>>
回复 Cyberbolt:
好的 非常很感谢
回复 Cyberbolt:
好的 非常很感谢
环境变量加了不生效,怎么处理呢?
回复 阿文:
安装后按下述操作激活conda的环境变量。输入命令
vim ~/.bash_profile
如果是这一步激活不成功,请仔细阅读本文,若完全按文中的内容操作,不会出错的
回复 Cyberbolt:
多谢大神回复,您的文章看了好多遍了,这个conda 环境变量可以添加成功,但conda initialize 那不自动添加,手工修改没有用,也就启动不了,我试了下 anaconda3 或者miniconda都能自动添加进去,这个miniforge3添加不成功,是不是链接给的miniforge3少了些许文件呢?
回复 阿文:
文中的链接应该没问题的,很多人都通过这个方法装成功了
回复 阿文:
建议你自己查询下,你的环境是否和文中完全一致
ERROR: Failed building wheel for grpcio
楼主您好,我
bash download_and_install.sh
的时候一直出错,请问是什么原因呀?
回复 六六字:
你下载的Miniforge3是Apple Silicon版本吗
Installation script for pre-release tensorflow_macos 0.1alpha1. Please visit https://github.com/apple/tensorflow_macos
for instructions and license information.
This script will download tensorflow_macos 0.1alpha1 and needed binary dependencies, then install them into a new
or existing Python 3.8 virtual enviornoment.
Continue [y/N]? y
Downloading installer.
/var/folders/zz/n0d10lfx28q43zl25h11pggm0000gn/T/tmp.XQUsW6vo ~/zjh/test
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 138 100 138 0 0 63 0 0:00:02 0:00:02 --:--:-- 63
82 315M 82 259M 0 0 373k 0 0:14:24 0:11:50 0:02:34 0
curl: (56) LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
回复 jimmy:
你下载的文中的版本还是GitHub的版本?
文中的版本已更改为国内源,下载很快的
请问要怎么卸载呢,最后一步安错位置了
回复 phasheen:
直接删除虚拟环境文件夹就行了
你好,Miniforge3提示安装的arm64是基于python3.9的版本并非3.9.1。而python3.9.1才开始支持M1芯片啊?因此当安装成功Miniforge3并修改环境变量之后,会出现如下错误:
minorfox@jiuweililideMacBook-Pro ~ % python3
zsh: killed python3
请问有否解决办法?谢谢。
回复 阿狸: 抱歉,这个问题已解决,你的教程没问题。
回复 阿狸: 请问这个killed是怎么解决的呀,我也遇到了这个问题
直接复制进环境的话,遇到了wrong architecture问题
(py38) apple@Goodrain-SundeMacBook-Pro ~ % python
Python 3.8.6 | packaged by conda-forge | (default, Dec 26 2020, 04:29:28)
[Clang 11.0.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
Traceback (most recent call last):
File "/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found. Did find:
/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
/Users/apple/.local/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 "/Users/apple/.local/lib/python3.8/site-packages/tensorflow/__init__.py", line 41, in <module>
from tensorflow.python.tools import module_util as _module_util
File "/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/__init__.py", line 40, in <module>
from tensorflow.python.eager import context
File "/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/eager/context.py", line 35, in <module>
from tensorflow.python import pywrap_tfe
File "/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/pywrap_tfe.py", line 28, in <module>
from tensorflow.python import pywrap_tensorflow
File "/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 83, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File "/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found. Did find:
/Users/apple/.local/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
/Users/apple/.local/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.
>>> quit()
回复 Goodrain: 我也出现这个问题 请问你解决了吗
您好,用这个方法把tf安装成功了,但是opencv却无法安装在这个虚拟环境,请问您也有这种情况吗
回复 小狗的姐姐: 你可以选择使用 Conda 来安装 TensorFlow
最后一步出现这样的问题
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to hub.fastgit.org:443
最后一步出现这样的问题
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to hub.fastgit.org:443
最后一步出现这样的问题
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to hub.fastgit.org:443
最后一步出现这样的问题
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to hub.fastgit.org:443
最后一步出现这样的问题
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to hub.fastgit.org:443
最后一步出现这样的问题
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to hub.fastgit.org:443
https://newfasttadalafil.com/ - Cialis viagra zarate Cialis Meglio 10 O 20 Mg Cialis United Pharmacies Propecia https://newfasttadalafil.com/ - Cialis Viagra Super Active Coupon Code Wfnnwi