【保证成功】M1 Mac 如何安装并使用TensorFlow

在M1上装tensorflow就是一个大坑,但我还遇到了个连环坑:本来一直用的都正常的服务器环境对一个新程序出了点问题,竟然会因为改一下数据集里单个文件的名字就跑出不一样的结果,折腾了一个多礼拜都无解,结果让组里同学帮忙本地跑了一下发现竟然一切正常,压力直接给到服务器这边。结果我大概查了一下发现M1的mac也可以正常使用tensorflow了就打算也本地装一下然后跑跑看,结果一路踩坑不说,折腾了整整两个小时好不容易装上了,正要去组里汇报一下结果突然意识到我的error一直发生在数据预处理也就是浮点化的那一步,根本没有到tensorflow那一步,如果可以成功把数据浮点化之后只要把浮点化的记录文件传到服务器里的tf环境再训练就行了,所以其实我的本地机器学习环境一直是够用的,所以也就是说折腾了半天装了个M1的tensorflow等于白装。于是想着时间不能白浪费了,就整理一下写篇文章吧。

从安装到配置整个过程中感觉能踩的坑都让我踩到了,各种疑难杂症也是百度+google双管其下各种尝试,最终到成功看到tf版本号,希望自己的这个经验能帮到大家。

由于本人也刚入门CS不到两年,入门深度学习半年,对于环境方面的理论还是很薄弱(基本没有),有些解决办法无奈也无法追究原因,所以本文仅以解决问题为目的。

安装Miniforge3

首先我们需要安装Miniforge来管理环境。Miniforge3是一个anaconda开源的社区子版本,支持ARM版本,也是基于conda来管理环境,所以使用方法上完全一样,所以并没有学习成本。

首先去github官网选择Apple Silicon版下载:https://github.com/conda-forge/miniforge/#download

得到一个脚本文件:Miniforge3-MacOSX-arm64.sh

终端cd到脚本的所在路径,然后

bash Miniforge3-MacOSX-arm64.sh

然后Miniforge就安装好了。
此时需要配置环境变量,在~/.bash_profile中加入:

export PATH="/Users/这里是你的用户名/miniforge3/bin:$PATH"

然后去~/.zshrc加入:

source ~/.bash_profile

这里如果你之前已经配置过其他环境了比如anaconda,这句话是存在的,不需要再重复添加。

此时可以在环境中检查一下环境是否正确,具体步骤是:

# 激活conda环境
conda activate
# 进入python交互
python

此时显示的结果如果有“packaged by conda-forge”就说明目前在miniforge的环境中了,就可以继续下一步了。

(base) shawn@MacBook-Pro-4 ~ % python
Python 3.9.10 | packaged by conda-forge | (main, Feb  1 2022, 21:27:43) 
[Clang 11.1.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.

此时还可以检查一下目前的conda环境。

shawn@MacBook-Pro-4 ~ % conda info --env
# conda environments:
#
                         /Users/shawn/anaconda3
base                  *  /Users/shawn/miniforge3

可以看到miniforge3的默认base环境把anaconda的环境给顶掉了,所以默认的activate就只可以去到miniforge的base环境,而无法去到anaconda的base环境。

配置tf环境

刚才的检查可以看到环境里默认的python是3.9.10,但是目前的apple版tensorflow 2.4.0只可以兼容python 3.8,所以我们要新建一个python 3.8 的环境,由于都是conda,和之前用anaconda的方法是一样的:

conda create -n m1tf python=3.8

(里面m1tf是环境的名字,自己取什么都可以)

然后进入到环境安装tensorflow for apple 2.4.0,

conda activate m1tf

pip install --upgrade --force --no-dependencies https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl

看到这句话就放心了:

Successfully installed tensorflow-addons-macos-0.1a3 tensorflow-macos-0.1a3

怎么可能真的放心。
由于是一个全新的一个环境,tensorflow的一系列依赖都是缺失的,或者版本不匹配的,所以如果尝试测试版本,会产生报错:

>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/shawn/miniforge3/envs/m1tf/lib/python3.8/site-packages/tensorflow/__init__.py", line 38, in <module>
    import six as _six
ModuleNotFoundError: No module named 'six'

于是就需要补全依赖。

补全依赖

理论上看到缺什么补什么就行了,但是由于是arm版本的tf,而且版本并不是最新的,所以这就造成很多依赖包需要特定版本,或者报找不到包的error。而且有些依赖包本身还存在依赖,这就造成了整体非常混乱,报错极多。

所以我在这里贴出我尝试出来的一个顺序,按照这个顺序安装大概率是不会报错的,除了依赖我还安装了一些常用必需包 ,有的包需要pip install安装,有的包得用conda install安装,至于为什么我也不知道,全是试出来的,记得也要全程在m1tf环境下安装:

conda install 以下:

pandas
matplotlib
scikit-learn
jupyterlab

然后需要把pip升级到最新版,然后用pip安装以下

pip install 以下:

wheel
setuptools
cached-property
six

pip会自动检查依赖,所以在这期间即使有报错如下:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
tensorflow-macos 0.1a3 requires absl-py~=0.10, which is not installed.
tensorflow-macos 0.1a3 requires astunparse~=1.6.3, which is not installed.
... ...

也是不需要担心的,只要下面有这句话:

Successfully installed 这里是你要安装的包的名字

就说明你要安装的包装成功了。

pip install 继续以下:

absl-py
astunparse==1.6.3
flatbuffers==1.12.0
gast==0.3.3
google-pasta==0.2
wrapt~=1.12.1

以上都是安装pip检查出的依赖的顺序安装,在这之后的包就无法正常安装了,但是此时我们要把剩下的列表复制粘贴出来,后面需要用到,因为使用conda安装时是不会检查其他包的依赖情况的。

大概是只剩下这四个,但是要以个人的为准:

tensorflow-macos 0.1a3 requires grpcio~=1.32.0, which is not installed.
tensorflow-macos 0.1a3 requires h5py~=2.10.0, which is not installed.
tensorflow-macos 0.1a3 requires numpy~=1.19.2, which is not installed.
tensorflow-macos 0.1a3 requires tensorboard~=2.3, which is not installed.

在装这些包之前,我们需要先把numpy装好,我使用的是conda安装,因为我的pip强制让我安装最新版,但是tf2.4匹配的numpy需要时1.19.2:

conda install numpy==1.19.2

这里如果你conda也安装指定版本失败,可以尝试conda uninstall和/或pip uninstall彻底卸载掉已有的numpy,再重试就可以解决。

numpy安装好之后,使用conda install把之前复制粘贴出来的那一份依赖表报错中的包全部安装一遍,此时就大功告成了。

写到这里想到,在安装依赖卡住后,通过安装numpy解决了问题,是否说明如果先把numpy安装好,后面的依赖就可以一个一个全部安装好了呢,但是由于我没有真的去尝试这个可能,所以就没有把“先安装numpy”作为解决办法,而是仅仅保留了我安装成功的路线。同时我也不清楚会不会不同电脑遇到不同的情况,总之由于是一个全新的环境,安装依赖的过程会非常繁琐,不过只有仔细看缺少哪些,在卡住后调整安装顺序,最后肯定可以全部补全。

检查

检查的话直接在python交互中操作:

>>> import tensorflow as tf
>>> tf.__version__
'2.4.0-rc0'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容