目录
- 1. 引言
- 2. 环境准备
- 3. 安装 TensorFlow 和必要依赖
- 4. 结语
- Reference
1. 引言
Keras 是搞深度学习很可爱的工具,其友好的接口让我总是将其作为搭建模型原型的首选。然而,当我希望在 M 系列芯片的MacBook Pro上使用 Keras时,使用Conda和Pip进行丝滑配置的方法并不直接适用,问题主要源于 conda 环境配置的架构不匹配,M 系列芯片使用 ARM64 架构,而conda默认的环境架构编译方式为x86_64,所以从源拉取tensorflow库的时候也就自动安装了不兼容的x86_64版本。本文将分享我在M系列芯片 MacOS上建立Conda环境并安装Tensorflow2(自带Keras3)的过程,可以让后来人少走弯路。
TensorFlow PluggableDevice 介绍
自 TensorFlow 2.5 起,苹果引入了基于 PluggableDevice 机制的 Metal 插件,使 TensorFlow 能够利用 Apple 的 Metal API 在 GPU 上加速计算。通过 tensorflow-metal 插件,TensorFlow 能够在 Metal Performance Shaders (MPS) 设备上执行计算,为 M 系列芯片上的深度学习训练和推理提供显著的性能提升。
2. 环境准备
在开始前,请确保自己的电脑满足如下基本要求:
Requirements:
• 搭载 Apple 芯片(M1/M2/M3系列)或 AMD GPU 的 Mac 电脑
• macOS 12.0 或更高版本
• Python 3.9 或更高版本
• Xcode 命令行工具(可通过 xcode-select --install 安装)
确保已安装 Xcode 命令行工具,执行如下命令,如果提示"已安装请求的软件",表示已安装过,可以直接进入下一步。
xcode-select --install
如果没有安装 Conda,要先安装 Miniforge,安装命令如下:
# 使用 Homebrew 安装 Miniforge
brew install miniforge# 初始化 shell 环境
conda init zsh # 或 conda init bash(取决于所使用的 shell)
如果已有 Anaconda是可以使用的,只是需要特别注意架构问题,推荐做法是在创建环境时指定环境的架构,保持默认环境架构为x86,因为很多Python包仍主要支持x86架构。执行如下命令,创建一个纯 ARM64 架构的 Conda 环境并激活。
# 创建 arm64 架构的环境,指定 Python 版本为 3.10
CONDA_SUBDIR=osx-arm64 conda create -n tensorflow2 python=3.10 -c conda-forge# 激活环境
conda activate tensorflow2
3. 安装 TensorFlow 和必要依赖
确认环境已正确设置为ARM64架构后,就可以开始安装TensorFlow了。从TensorFlow 2.13版本开始,官方已经提供了对Apple Silicon的原生支持,不再需要特殊的tensorflow-macos包,可以按照以下步骤直接安装。
# 安装 libffi(解决动态链接问题)
conda install -c conda-forge libffi# 安装 Apple 提供的 TensorFlow 依赖包
conda install -c apple tensorflow-deps# 安装 TensorFlow
python -m pip install tensorflow -i https://pypi.org/simple# 安装 Metal 插件(启用 GPU 加速)
python -m pip install tensorflow-metal -i https://pypi.org/simple
安装完成后,使用Apple官方文档提供的脚本(代码如下)进行测试,如果看到程序运行中数据集能正常加载、模型编译无错误、训练过程中能看到进度条和指标正常更新,则表明tensorflow2已经成功安装。
import tensorflow as tf# 加载 CIFAR-100 数据集
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()# 创建 ResNet50 模型
model = tf.keras.applications.ResNet50(include_top=True,weights=None,input_shape=(32, 32, 3),classes=100,)# 编译模型
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=64)
4. 结语
在 M 系列芯片的 Mac 上安装 TensorFlow 2 和 Keras3 的关键在于确保架构一致性,所有组件都应该使用 ARM64 架构。通过利用 PluggableDevice 机制和 tensorflow-metal 插件,可以充分发挥 Apple Silicon 的性能优势,无需外接 GPU 即可进行模型训练和实验。当遇到架构不匹配错误(如mach-o file, but is an incompatible architecture或The TensorFlow library was compiled to use AVX instructions)时,请首先检查环境架构并确保使用ARM64。如果问题仍然存在,创建全新的ARM64环境通常是最干净有效的解决方案。
Reference
Tensorflow Plugin - Metal - Apple Developer