草庐IT

深度学习(一)Mac OS12|Apple M1安装Tensorflow和Pycharm使用配置

車轱辘の博客 2023-03-28 原文

本文主要介绍在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是否卸载成功。

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


参考

  1. 2022最新Apple M1/Mac M1 配置安装Tensorflow环境方法(亲测可用):https://zhuanlan.zhihu.com/p/474212619
  2. 一文解释conda,pip,anaconda,miniconda,miniforge:https://zhuanlan.zhihu.com/p/518926990
  3. mac 下anaconda彻底删除卸载:https://blog.csdn.net/weixin_41794514/article/details/111688993
  4. venv --- 创建虚拟环境:https://docs.python.org/zh-cn/3/library/venv.html
  5. tensroflow官方教程-使用 pip 安装 TensorFlow:https://tensorflow.google.cn/install/pip?hl=zh-cn
  6. Getting Started with tensorflow-metal PluggableDevice:https://developer.apple.com/metal/tensorflow-plugin/
  7. tensroflow官方教程-初学者的 TensorFlow 2.0 教程:https://tensorflow.google.cn/tutorials/quickstart/beginner?hl=zh-cn

有关深度学习(一)Mac OS12|Apple M1安装Tensorflow和Pycharm使用配置的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  3. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  4. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  5. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

  6. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  7. 机器学习——时间序列ARIMA模型(四):自相关函数ACF和偏自相关函数PACF用于判断ARIMA模型中p、q参数取值 - 2

    文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk​=Var(yt​)Cov(yt​,yt−k​)​其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞

  8. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  9. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  10. ruby-on-rails - 无法构建 gem native 扩展 (mkmf (LoadError)) - Ubuntu 12.04 - 2

    这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby​​和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi

随机推荐