目錄
- 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