标签: AI

在pyenv环境下安装支持Mac M1芯片的TensorFlow

从TensorFlow v2.5开始,可以通过tensorflow-metal PluggableDevice使用Mac M1芯片的GPU加速训练。

一般情况下,只要按照苹果“Getting Started with tensorflow-metal PluggableDevice”文档中的步骤安装即可,但我的M1芯片MacBook Air中安装了pyenv,pyenv 是一个 python 版本管理工具,可以方便的在工作环境中安装、管理和切换不同版本的 python,所以我尝试在使用pyenv的情况下,安装TensorFlow。

系统要求,macOS 12.0+,需要先安装好Xcode Command Line Tools,安装命令

xcode-select --install

pyenv的安装和配置请参考网络教程,通过命令

pyenv install --list

可以列出所有可以安装的 python 版本,也会包含anaconda、pypy等不同的版本。

接下来安装Miniforge,这是由于Anaconda 无法在 M1 上运行, Miniforge 是用来替代它的。执行命令

pyenv install miniforge3

会安装最新版本的Miniforge3-MacOSX-arm64,使用pyenv versions命令,可以列出所有被 pyenv 管理的 python 版本。

通过pyenv命令,设置当前 shell 所使用的 python 版本为miniforge3

pyenv shell miniforge3

使用conda创建名为“tensorflow”虚拟环境,并激活,这里使用的python版本为3.9.5(TensorFlow所需)

conda create -n tensorflow python=3.9.5
conda activate tensorflow

安装TensorFlow dependencies

conda install -c apple tensorflow-deps

如果是升级安装新版本的TensorFlow,建议使用

# uninstall existing tensorflow-macos and tensorflow-metal
python -m pip uninstall tensorflow-macos
python -m pip uninstall tensorflow-metal
# Upgrade tensorflow-deps
conda install -c apple tensorflow-deps --force-reinstall
# or point to specific conda environment
conda install -c apple tensorflow-deps --force-reinstall -n tensorflow

安装TensorFlow

python -m pip install tensorflow-macos

安装tensorflow-metal plugin

python -m pip install tensorflow-metal

至此,TensorFlow就安装成功了,执行

conda deactivate
pyenv shell --unset

可以关闭conda虚拟环境,取消设置当前 shell 的 python 版本。

在PyCharm里使用安装在pyenv里的TensorFlow,步骤如下:

在PayCharm里新建项目

选择“Previously configured interpreter”,并点击后面的 “…” 按钮,弹出“Add Python Interpreter”窗口

选择左侧的“Conda Environment”,然后点击“Interpreter”下拉框后面的“…”按钮,弹出“Select Python Interpreter”窗口

选择miniforge3下“tensorflow”这个虚拟环境下的python文件地址,点击“OK”

在“Add Python Interpreter”窗口中,可以看到“Interpreter”已选中我们刚才所选的Python文件地址,同时选中“Make available to all projects”,也就是这个Interpreter可以被所有项目使用,点击“OK”

在“New Project”的窗口中,即可以选择我们刚才创建的“Interpreter”,点击“Create”,项目创建成功。

在main.py中测试一下TensorFlow

执行结果

我们安装的TensorFlow版本是2.7.0。