本文主要介绍在Apple M1的Mac os12.x系统下面,安装tensorflow并配置pycharm环境的过程。
本文主要介绍在Apple M1的Mac os12.x系统下面,安装tensorflow并配置pycharm环境的过程。
安装说明
硬件和系统说明
系统介绍如下,设备是搭载M1芯片的macOS为12.2.1的系统环境.
还有值得说明的就是,在M1芯片带来巨大性能革新的同时,也带来了诸多生态上面的不足问题。
例如就在这个tensorflow的安装上面,我们需要注意的不仅有M1的arm
架构和其他主流芯片架构在通常出现的不兼容问题,还有mac系统版本上面的问题。
在macOS上面使用tensorflow的说明
要知道在macOS12.x之前版本上面使用tensorflow,我们只能使用它的cpu训练功能。
但是,现在好了,macOS12.x基础上支持安装tensorflow的插件来开启macOS的GPU训练功能。
环境准备
miniforge安装
anaconda是什么?
首先,我们就认识anaconda是什么。anaconda是为机器学习或者数据分析提供一套最简单方式使用方式的工具集,它里面集成了许多我们机器时需要用到库(eg: numpy、pandas),并且还包含了一些简单的python开发环境工具。
因此,除开它提供的那套工具之外,我们可以把Anaconda看成是Python环境的一个简单的封装,在这个环境里面为我们提供一些常用的基础库,以及更好用python包的管理工具,比如conda等。
miniconda是什么?
在anaconda 提供的环境里面,我们可以看到提供了丰富的各种工具和包。但是很多时候这些功能对于我们的来讲都是冗余的。因此,也就有了更精简的版本miniconda,miniconda代表的是轻量化。
(老手) Miniconda = Python + conda
(with minimal dependencies, like openssl, ncurses...)
(新手) Anaconda = Python + conda + meta package
(about 160 Python pkgs, like curl, numpy, pandas...)
为什么又选择miniforge呢?$^2$
miniforge可以看成是moniconda的一个功能类似的开源产品,它使用了conda-forge的channel(包源),不同是的它比起anaconda官方对Apple M1的支持更好。
比如,后面我们在安装tensroflow的插件时候就会遇到的问题,使用anaconda就会报错。
tensroflow安装
Step1: 安装miniforge3
- 如果之前有安装anaconda环境,一定要先卸载干净$^3$,再安装。
# 1 安装anaconda卸载工具anaconda-clean
conda install anaconda-clean
# 2 执行anaconda-clean
anaconda-clean
# 3 删除相关文件或配置
# 3.1 删除隐藏备份文件夹
rm -r /Users/[当前用户名]/.anaconda_backup/
# 3.2 删除anaconda3文件夹
rm -rf /anaconda3
# 3.3 删除环境变量配置
vi ~/.bash_profile
# 3.4 删除其他相关隐藏文件
rm -rf ~/.condarc ~/.conda ~/.continuum
这里值得注意的一点是,在步骤3.2中需要删除的以下配置。
删除重启系统,可以通过 conda -V
命令来验证anaconda是否卸载成功。
- 下载 Miniforge3_MacOS_ARM64 选择
Miniforge3-MacOSX-arm64
,并安装
chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh
sh ~/Downloads/Miniforge3-MacOSX-arm64.sh
source ~/miniforge3/bin/activate
执行上述命令之后,安装提示进行安装,然后可以通过命令conda -V
来查看是否安装成功。
miniforge3安装之后环境变量是通过zshrc
文件进行配置的,可以通过vi ~/.zshrc
查看,要确环境安装的miniforge3在用户目录下面,否则使用的时候可能实现权限的问题。
Step2: conda的基本使用
- 虚拟环境介绍
通过参考,tensorflow官方安装教程,可以看到使用pip方式安装的时,更为推荐的是创建虚拟环境安装。
那随之而产生一些疑问,什么是虚拟环境,如何创建虚拟环境,以及如何通过创建虚拟环境安装tensorflow等一系列问题。
什么是虚拟环境?
理解清楚这个问题,可以让初学者对于python这一工具有更佳深刻的理解。
如果是macOS用户,可能会通常都会python这个系统环境的问题有更深刻的困惑?通常macOS都自带一个python环境,然而这个环境是2.7版本的,这个版本已经很难满足我们的日常需要。因此,我们不得不去下载一个更新的python来满足我们的日常使用,这样就造成了一个多个版本python环境共存一个主机的问题。
如果是Java程序员的话,做个类比,python的虚拟环境就像是JDK和本地MAVEN的仓库的集合。它里面提供了像JDK一样的python基础语言环境,还提供了使用像maven一样可以支持管理包的一个工具pip。
它和Java开发的区别在于,python通过虚拟环境的创建功能能够自动的生成一个制定python版本的基础环境,然后就是这些虚拟环境之前都是互相隔离的,包与包之间也是互不干扰的。在Java里面,似乎我们就从不管这些,我们经常使用都是同一个Maven,顶多进行一些依赖包源的配置,然后基本上是改变它的本地repo的,相当于它的包都是放在一块的。
为什么有python虚拟环境?
我认为还是和它的设计风格相关,python本身就是一个轻量级的语言。并且实验性质很强的一个语言环境,它的用户有着对于新版本新功能更多的需求,它的库更新迭代也是特别快。因此,它需要一个能够更好的管理实验环境的功能。而Java更多面向落地的应用,针对这些应用来讲更多的还是强调它的稳定性。因此,它的依赖库更多的都是随着基于语言环境更新的。
- conda基本的使用
前面我们知道了conda是一类似pip一样的包管理工具,但它的功能远不及此。对它更贴切的描述应该是python环境管理工具。
比如我们前面安装miniforge3之后,我们就会看我们的终端变了。如图,(base)就是conda为我们创建的一个默认环境,conda里面的设计都是贯彻了python虚拟环境的。它带来的好处就是,可以更加方便的使用不同的虚拟环境满足不同的需求。
conda基本命令
# conda基本命令
conda -V
conda -h
# conda虚拟环境操作
conda info --envs #列出当前虚拟环境
conda create -n tf26 python==3.9 # 创建python3.9名字为tf26的虚拟环境,注意这里可以灵活指定自己的python版本
conda activate tf26 # 激活tf26环境,其实有点git切换分支的感觉
conda remove -name tf26 --all # 删除虚拟环境
step3: tensorflow安装
1、切换到自己的tf26环境
conda activate tf26
2、安装tensorflow-deps
conda install -c apple tensorflow-deps #安装最新版本
# conda install -c apple tensorflow-deps==2.6.0 # 安装指定版本依赖
详细安装步骤参考:apple开发者官网:Getting Started with tensorflow-metal PluggableDevice
3、安装tensorflow-macos
python -m pip install tensorflow-macos
4、安装tensorflow-metal插件
python -m pip install tensorflow-metal
5、验证安装效果
python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
出现一下结果,即安装成功:
pycharm配置
-
command + ,
快捷键打开Preferences,选择Project -> Python Interpreter;
- 在上图右侧点击⚙️,选择
add
,来到以下界面,然后选择左侧conda enviroment
,然后选择已有环境,配置我们刚才已经安装好tensorflow的环境即可。
- 至此,我们的tensroflow在pycharm中的配置也已经完成,我们可以测试一下,能够正常使用。
tensorflow入门案例
以下是tensorflow官网的tensorflow入门案例,照片分类训练
- 代码
import tensorflow as tf
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'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test, verbose=2)
- 运行结果
Metal device set to: Apple M1
systemMemory: 16.00 GB
maxCacheSize: 5.33 GB
2022-07-28 10:54:57.919635: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:305] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2022-07-28 10:54:57.919888: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:271] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
2022-07-28 10:54:58.477466: W tensorflow/core/platform/profile_utils/cpu_utils.cc:128] Failed to get CPU frequency: 0 Hz
Epoch 1/5
2022-07-28 10:54:58.867887: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.
1875/1875 [==============================] - 11s 4ms/step - loss: 0.2914 - accuracy: 0.9152
Epoch 2/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.1374 - accuracy: 0.9586
Epoch 3/5
1875/1875 [==============================] - 9s 5ms/step - loss: 0.1015 - accuracy: 0.9694
Epoch 4/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0811 - accuracy: 0.9749
Epoch 5/5
1875/1875 [==============================] - 9s 5ms/step - loss: 0.0683 - accuracy: 0.9786
2022-07-28 10:55:43.420308: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.
313/313 - 1s - loss: 0.0734 - accuracy: 0.9784 - 1s/epoch - 3ms/step
Process finished with exit code 0
参考
- 2022最新Apple M1/Mac M1 配置安装Tensorflow环境方法(亲测可用):https://zhuanlan.zhihu.com/p/474212619
- 一文解释conda,pip,anaconda,miniconda,miniforge:https://zhuanlan.zhihu.com/p/518926990
- mac 下anaconda彻底删除卸载:
- venv --- 创建虚拟环境:https://docs.python.org/zh-cn/3/library/venv.html
- tensroflow官方教程-使用 pip 安装 TensorFlow:https://tensorflow.google.cn/install/pip?hl=zh-cn
- Getting Started with tensorflow-metal PluggableDevice:https://developer.apple.com/metal/tensorflow-plugin/
- tensroflow官方教程-初学者的 TensorFlow 2.0 教程:https://tensorflow.google.cn/tutorials/quickstart/beginner?hl=zh-cn