使用MacBook pro M1搭建基于ML Compute加速的TensorFlow深度学习环境

2021-01-12 17:02:50   Cyberbolt

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

 

蓝调咖啡
2021-01-31 23:00:56

请问现在支持pytorch'了吗


Cyberbolt
2021-01-31 23:11:40

回复 蓝调咖啡:

支持,但是PyTorch只能调用M1的CPU

蓝调咖啡
2021-02-01 15:58:23

回复 Cyberbolt:

现在哪个版本支持呢?直接在pytorch官网找最新版本安装可以吗?我试了试,一直装不上

蓝调咖啡
2021-02-01 17:23:12

回复 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"

landiaokafei
2021-02-01 17:30:11

回复 蓝调咖啡:

(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'

>>>

蓝调咖啡
2021-02-01 17:36:35

回复 Cyberbolt:

现在哪个版本支持呢?直接在pytorch官网找最新版本安装可以吗?我试了试,一直装不上

Cyberbolt
2021-02-01 18:15:39

回复 landiaokafei:

>>> import tensorflow as tf

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ModuleNotFoundError: No module named 'tensorflow'

>>>

 

你可以在虚拟环境中用pip list查询有没有tensorflow。根据经验,应该是装环境的时候,有步骤操作不正确。只要严格按文中的步骤安装,应该不会出错的。

Cyberbolt
2021-02-01 18:19:00

回复 蓝调咖啡:

我没有在M1安装过PyTorch,建议你Google查询下相关教程

蓝调咖啡
2021-02-01 18:59:11

回复 Cyberbolt:

现在哪个版本支持呢?直接在pytorch官网找最新版本安装可以吗?我试了试,一直装不上

landiaokafei
2021-02-02 12:05:37

回复 蓝调咖啡:

(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'

>>>

蓝调咖啡
2021-02-02 12:09:26

回复 Cyberbolt:

好的 非常很感谢

蓝调咖啡
2021-02-02 12:09:28

回复 Cyberbolt:

好的 非常很感谢

阿文
2021-02-02 18:55:18

环境变量加了不生效,怎么处理呢?

 


Cyberbolt
2021-02-02 21:49:44

回复 阿文:

安装后按下述操作激活conda的环境变量。输入命令

vim ~/.bash_profile

 

如果是这一步激活不成功,请仔细阅读本文,若完全按文中的内容操作,不会出错的

阿文
2021-02-03 11:26:56

回复 Cyberbolt:

多谢大神回复,您的文章看了好多遍了,这个conda 环境变量可以添加成功,但conda initialize 那不自动添加,手工修改没有用,也就启动不了,我试了下 anaconda3 或者miniconda都能自动添加进去,这个miniforge3添加不成功,是不是链接给的miniforge3少了些许文件呢?

Cyberbolt
2021-02-04 14:12:27

回复 阿文:

文中的链接应该没问题的,很多人都通过这个方法装成功了

Cyberbolt
2021-02-04 14:13:34

回复 阿文:

建议你自己查询下,你的环境是否和文中完全一致

六六字
2021-02-05 12:02:50

ERROR: Failed building wheel for grpcio

楼主您好,我

bash download_and_install.sh

的时候一直出错,请问是什么原因呀?


Cyberbolt
2021-02-06 11:57:24

回复 六六字:

你下载的Miniforge3是Apple Silicon版本吗

jimmy
2021-02-14 22:09:05

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


Cyberbolt
2021-02-16 23:57:49

回复 jimmy:

你下载的文中的版本还是GitHub的版本?

文中的版本已更改为国内源,下载很快的

phasheen
2021-02-18 19:44:22

请问要怎么卸载呢,最后一步安错位置了


Cyberbolt
2021-02-26 11:28:03

回复 phasheen:

直接删除虚拟环境文件夹就行了

阿狸
2021-03-22 22:45:20

你好,Miniforge3提示安装的arm64是基于python3.9的版本并非3.9.1。而python3.9.1才开始支持M1芯片啊?因此当安装成功Miniforge3并修改环境变量之后,会出现如下错误:

minorfox@jiuweililideMacBook-Pro ~ % python3

zsh: killed     python3

请问有否解决办法?谢谢。


阿狸
2021-03-22 23:21:52

回复 阿狸: 抱歉,这个问题已解决,你的教程没问题。

蓬莱小草
2021-06-12 21:40:55

回复 阿狸: 请问这个killed是怎么解决的呀,我也遇到了这个问题

Goodrain
2021-06-20 19:51:21

直接复制进环境的话,遇到了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()


小狗的姐姐
2021-06-23 11:11:29

您好,用这个方法把tf安装成功了,但是opencv却无法安装在这个虚拟环境,请问您也有这种情况吗


Cyberbolt
2021-07-01 16:54:12

回复 小狗的姐姐: 你可以选择使用 Conda 来安装 TensorFlow