M系列芯片 MacOS 在 Conda 環境中安裝 TensorFlow 2 和 Keras 3 完整指南

目錄

      • 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72392.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72392.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72392.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

清華北大DeepSeek六冊

「清華北大-Deepseek使用手冊」 鏈接:https://pan.quark.cn/s/98782f7d61dc 「清華大學Deepseek整理) 1-6版本鏈接:https://pan.quark.cn/s/72194e32428a AI學術工具公測鏈接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …

paddlehub hub TypeError 錯誤

pip install paddlehub hub install chinese_ocr_db_crnn_mobile 提示錯誤: TypeError: Descriptors cannot be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc > 3.19.0…

零信任沙箱:為網絡安全筑牢“隔離墻”

在數字化浪潮洶涌澎湃的今天,網絡安全如同一艘船在波濤洶涌的大海中航行,面臨著重重挑戰。數據泄露、惡意軟件攻擊、網絡釣魚等安全威脅層出不窮,讓企業和個人用戶防不勝防。而零信任沙箱,就像是一座堅固的“隔離墻”,…

【String】917. 僅僅反轉字母

917. 僅僅反轉字母 - 力扣(LeetCode) 使用雙指針,一個指針指向s的開始,一個指向s的末尾,同時遍歷即可。

大語言模型學習

大語言模型發展歷程 當前國內外主流LLM模型 ?一、國外主流LLM? ?LLaMA2? Meta推出的開源模型,參數規模涵蓋70億至700億,支持代碼生成和多領域任務適配?57。衍生版本包括Code Llama(代碼生成優化)和Llama Chat(對…

3dsmax烘焙光照貼圖然后在unity中使用

效果預覽 看不清[完蛋!] 實現步驟 使用 軟件 軟體名稱地址photoshophttps://www.adobe.com/products/photoshop.htmlunity3Dhttps://unity.com/3dsmaxhttps://www.autodesk.com.cn/products/3ds-max/free-trialpacker-iohttps://www.uv-packer.com/HDR 貼圖地址…

P8651 [藍橋杯 2017 省 B] 日期問題--注意日期問題中2月的天數 / if是否應該連用

P8651 [P8651 [藍橋杯 2017 省 B] 日期問題--注意日期問題中2月的天數 / if是否應該連用 題目 分析代碼 題目 分析 代碼中巧妙的用到3重循環,完美的解決了輸出的順序問題【題目要求從小到大】 需要注意的是2月的值,在不同的年份中應該更新2月的值 還有…

android 橫豎屏適配工作總結

1、創建一個橫屏文件夾,復制一份豎屏的布局。然后修改適配橫屏。只要布局id都有,其他想怎么改就怎么修改。 2、最好使用kotlin語言編寫和使用viewBinding綁定控件,可以使用?.判空控件是否存在,不至于缺少這個控件時候直接崩潰。 …

VS2022遠程調試Ubuntu中的C++程序

前言 最近想基于星火大模型的SDK開發第一些應用。但是,發現星火的SDK當中Linux版本的比較豐富,Windows 版本支持的比較少。但是,從調試的IDE而言,Visual Studio又是最方便的。所以,考慮采用Visual Studio Ubuntu的形式…

VS Code(Cursor)遠程開發調試教程(超詳細)

前言 📢 聲明:本文配置及開發方法同樣適合Cursor !! 在開始之前,你需要準備以下東西: 本地電腦: 安裝好 VS Code(Windows、Mac 或 Linux 都可以)。 官網下載&#xff0c…

【C++】類與對象:深入理解默認成員函數

類與對象:深入理解默認成員函數 引言1、默認成員函數概述2、構造函數與析構函數2.1 默認構造函數2.2 析構函數 3、拷貝控制成員3.1 拷貝構造函數3.2 賦值運算符重載 4、移動語義(C11)4.1 移動構造函數4.2 移動賦值運算符 5、三五法則與最佳實…

QT實現計算器

1:在注冊登錄的練習里面, 追加一個QListWidget 項目列表 要求:點擊注冊之后,將賬號顯示到 listWidget上面去 以及,在listWidget中雙擊某個賬號的時候,將該賬號刪除 Widget.h #ifndef WIDGET_H #define…

算法進階——二分

二分法: 一種高效查找方法,將問題搜索范圍一分為二,迭代地縮小范圍,直到找到目標。 二分法適用于有序的數據集合。 常見的二分類型有: 整數二分 浮點二分 二分答案 二分解題步驟: 1.研究并發現數據…

Kotlin函數式編程與Lambda表達式

Kotlin函數式編程與Lambda表達式 一、函數式編程基礎 1.1 什么是函數式編程 函數式編程是一種編程范式,它將計算過程視為數學函數的求值,強調使用不可變數據和純函數。在Kotlin中,函數式編程的特性讓我們能夠寫出更簡潔、更易維護的代碼。…

Java 并行流(parallelStream)詳解

目錄 1. 什么是 parallelStream?2. parallelStream 的優勢3. parallelStream 的使用3.1 基本使用3.2 計算總和示例3.3 結合groupingByConcurrent實現線程安全的分組操作 4. parallelStream 的注意事項4.1 適用場景4.2 并行流的局限性 5. 控制并行流線程數6. 總結 1.…

Ubuntu 20.04下配置VSCode以支持OpenCV庫開發

Ubuntu 20.04下配置VSCode以支持OpenCV庫開發 1. 安裝OpenCV庫安裝OpenCV(推薦使用APT安裝)或者從源碼安裝OpenCV(可選) 2. 安裝VSCode的C擴展3. 配置c_cpp_properties.json4. 編寫代碼并測試5. 配置tasks.json(編譯Op…

io學習----->標準io

思維導圖: 一.io的作用 io是實現對文件的操作,把運行結果存到文件中,讀取文件的數據,方便后期查詢。 二.io的概念 io是指系統 和外部設備或用戶之間的數據交互 I:input 表示數據從外部設備輸入到內存中; O:output…

使用消息隊列怎樣防止消息重復?

大家好,我是君哥。 使用消息隊列時,我們經常會遇到一個可能對業務產生影響的問題,消息重復。在訂單、扣款、對賬等對冪等有要求的場景,消息重復的問題必須解決。 那怎樣應對重復消息呢?今天來聊一聊這個話題。 1.三…

005 公網訪問 docker rocketmq

文章目錄 創建自定義網絡創建NameServer容器創建Broker容器正式開始啟動 Nameserver 容器啟動 Broker 容器并關聯 Nameserverdocker exec -it rmqbroker vi /etc/rocketmq/broker.conf檢查 namesrv 解析檢查 Broker 注冊狀態Nameserver 日志Broker 日志檢查容器日志手動指定 Br…

解決Docker Desktop啟動后Docker Engine stopped問題

一、問題描述 當我們更新了Docker Desktop后,在重新打開就顯示【Docker Engine stopped(Docker引擎已經停止)】,無法正常使用Docker,如下圖所示: 二、問題分析 1、檢查電腦主板的CPU是否開啟虛擬化; 2、需檢查Docker所需的功能是否開啟; 3、檢查WSL是否匹配; Docker的…