MacOS从零安装支持GPU的TensorFlow
PS:适用于M系列芯片
1.安装并配置miniconda
1.1为什么需要miniconda
如果不想在同一个环境上安装不同版本的软件时,就需要这种管理环境的软件,它可以让用户新创建一个环境并在其中安装特定版本的软件,当环境被自己搞坏了的时候,可以很轻易删除并创建新环境,不影响基础环境的生态。还有其他软件可以实现miniconda的功能,conda系列适合python相关软件的安装。
miniconda(anaconda也是同一个系列产品,但预装软件更多,体积更大)自带python环境和pip,在新创建的环境中安装的包属于该环境。
1.2安装
官方链接:Installing Miniconda — Anaconda documentation
清华源:Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
随便去哪找对应的安装包,例如对于M系列的macos,需要下载macos arm64或者交macos M1 的pkg包(相比sh,pkg下载后双击即可)
1.3配置
安装完毕之后,conda会自带一个默认的根环境(base环境),且配置好了环境变量,打开终端之后就是base环境。
此时最好不要直接使用base环境,因为自己创建的新环境搞乱了可以直接删除,但base环境无法删除,里面有conda必备的软件。
a、配置国内的下载源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
终端执行这两条命令,会在用户目录下创建.condarc文件并将配置写入文件中。
为了在查看conda软件包下载链接时显示手动配置的通道,可以执行下面的命令(暂不清楚作用,可以不执行)
conda config --set show_channel_urls yes
可以在终端直接cd之后ls -a查看一下,如果之前有文件,可以手动编辑文件内容:
channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - defaults
b、创建环境
conda create --name xxx python=3.9
这里的xxx为你想要自定义的环境名字,我设置为tf,因为我主要在这个环境用TensorFlow 2.15版本。
c、激活环境并配置默认
conda activate xxx
激活自定义的环境之后,终端开头就可以看到已经在新环境了,但此时如果关闭终端再打开,仍是base环境,需要修改配置文件。
直接cd进入用户目录,ls -a查看隐藏文件,找到.zshrc文件:
vi .zshrc
在最后一行加入上面的conda activate xxx。
2.安装TensorFlow
在自定义的环境中之下,安装软件包可以用conda install命令,也可以用pip install 命令,TensorFlow官方安装文档用的是pip。
2.1选哪个版本
TensorFlow目前最新版本是2.17,如果想用最新的后面就不用带版本号。不过据说2.15之后,自带的keras是keras3,和keras2区别不小,所以这里我安装了2.15版本(其实我先安装了2.17,然后发现一些代码跑不通,最后把环境搞坏了,无奈重装了conda哈哈哈)
M系列mac版没有cuda的GPU,所以在Linux或者Windows普通 NVIDIA GPU下需要考虑的cuda和cudnn版本,这里不需要考虑,只要保证python不低于3.9就好,TensorFlow固定2.15之后,安装苹果GPU的支持库TensorFlow-metal直接安装就行。
2.2安装
对于2.13及以后版本,安装TensorFlow本体(我用的是这个):
pip install tensorflow==2.15
对于2.12及以前版本,安装:
pip install tensorflow-macos
安装GPU支持库metal:
pip install tensorflow-metal
2.3 检查GPU是否可用
TensorFlow一般都是可用的,就不在这里写怎么检查了,要检查一下GPU能不能用:
import tensorflow as tf print(tf.__version__) print(tf.test.is_built_with_cuda()) # 检查是否使用了CUDA print(tf.config.list_physical_devices('GPU')) # 列出可用的GPU设备 print(tf.test.is_gpu_available())
因为没用cuda,所以cuda那个输出时false,后两个应该可以看出GPU是否可用了。
实际情况下,可以找一段小的训练,打开活动监视器上面“窗口”里面的“GPU历史记录”,看在训练时gpu是否占用
import numpy as np import tensorflow as tf x = np.random.random((10000, 5)) y = np.random.random((10000, 2)) x2 = np.random.random((2000, 5)) y2 = np.random.rando((2000, 2)) inp = tf.keras.layers.Input(shape = (5,)) l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(inp) l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1) l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1) l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1) l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1) o = tf.keras.layers.Dense(2, activation = 'sigmoid')(l1) model = tf.keras.models.Model(inputs = [inp], outputs = [o]) model.compile(optimizer = "Adam", loss = "mse") model.fit(x,y,epochs=10)