news 2026/4/23 14:14:50

M1 Mac使用Miniconda安装Python3.8、TensorFlow2.5与PyTorch1.8

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
M1 Mac使用Miniconda安装Python3.8、TensorFlow2.5与PyTorch1.8

在 M1 Mac 上构建高性能 AI 开发环境:Miniconda + Python 3.8 + TensorFlow 2.5 + PyTorch 1.8

苹果 M1 芯片发布以来,越来越多开发者开始在 macOS 上进行本地机器学习实验。得益于其出色的能效比和集成 GPU 的强大性能,M1 Mac 成为了轻量级训练与推理的理想平台——但前提是你的开发环境真正运行在原生 ARM64 架构上。

遗憾的是,不少人在安装 Python 和深度学习框架时仍误用了 x86_64 版本的工具链,导致系统通过 Rosetta 2 模拟运行,不仅性能损失高达 30%~50%,还可能引发依赖冲突、加速失效等问题。更糟糕的是,这种“看似正常”的状态往往让人难以察觉问题所在。

本文将带你从零开始,完整搭建一个基于 Miniconda 的纯净 AI 环境,确保所有组件都以原生方式运行于 Apple Silicon 架构之上。我们将使用 Python 3.8 配合 TensorFlow 2.5(启用 Metal 加速)与 PyTorch 1.8,这套组合特别适合需要复现早期论文或维护旧项目的场景。


先决条件:安装 Xcode 命令行工具

任何严肃的开发工作都离不开编译工具链。即便你只是跑模型,某些 Python 包在安装时仍需调用底层编译器。

执行以下命令:

xcode-select --install

系统会弹出图形化界面,点击“安装”即可。完成后验证路径是否正确:

xcode-select -p

预期输出应为/Applications/Xcode.app/Contents/Developer或类似路径。这一步虽然简单,却是后续 conda 和 pip 安装 C 扩展包的基础。


下载适用于 M1 的 Miniconda(ARM64 版本)

Miniconda 是 Anaconda 的精简版,只包含 Python 和 Conda 核心功能,非常适合对环境有精细控制需求的用户。相比直接安装系统级 Python,它能让你轻松管理多个隔离的虚拟环境,避免项目间依赖打架。

关键点来了:必须下载专为 Apple Silicon 设计的 ARM64 版本

前往 Miniconda 官方下载页,选择:

Miniconda3 macOS Apple M1 ARM64

或者用终端直接下载:

curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-Apple-silicon.arm64.sh

⚠️ 切记不要选x86_64结尾的版本!否则整个环境都会运行在 Rosetta 2 模拟层中,相当于开着节能模式跑赛车。


安装 Miniconda 并初始化环境

进入下载目录后执行安装脚本:

bash Miniconda3-latest-MacOSX-Apple-silicon.arm64.sh

一路按回车阅读协议,在最后提示是否接受条款时输入yes。当询问是否初始化 Conda 时也选yes,这样会自动写入 shell 初始化代码。

默认安装路径是~/miniconda3。安装完毕后,关闭当前终端并重新打开,或手动加载配置:

source ~/.zshrc

然后测试:

conda --version

如果返回类似conda 23.11.0的版本号,说明安装成功。


正确配置 Zsh 环境变量

macOS 自 Catalina 起已将默认 Shell 从 Bash 改为 Zsh。如果你跳过这步,可能会发现conda命令只能在新终端中使用,而在已有会话里失效。

Miniconda 默认把初始化脚本写入.bash_profile,但我们得把它移到.zshrc中。

先查看原始内容:

cat ~/.bash_profile | grep -A 10 -B 2 "conda initialize"

你会看到一段形如下面的代码块:

# >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/Users/yourname/miniconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/Users/yourname/miniconda3/etc/profile.d/conda.sh" ]; then . "/Users/yourname/miniconda3/etc/profile.d/conda.sh" else export PATH="/Users/yourname/miniconda3/bin:$PATH" fi fi unset __conda_setup # <<< conda initialize <<<

复制整段内容,粘贴到~/.zshrc文件末尾:

vim ~/.zshrc

i进入编辑模式,粘贴后按Esc,输入:wq保存退出。再执行:

source ~/.zshrc

现在无论新开多少个终端窗口,都能正常使用conda


添加国内镜像源提升下载速度

Conda 官方源位于境外,下载包时常超时或卡住。推荐使用中科大镜像站来加速:

conda config --add channels conda-forge conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/ conda config --set show_channel_urls yes

这些镜像同步了绝大多数科学计算所需的包,包括 NumPy、SciPy、Scikit-learn 等常用库,能显著减少依赖解析失败的问题。

查看当前通道配置:

conda config --show channels

若未来想恢复默认设置,可用:

conda config --remove-key channels

如需重装?彻底卸载 Miniconda

如果前期操作出错,建议完全清理后再重试。

删除主目录下的安装文件和配置:

rm -rf ~/miniconda3 rm -rf ~/.conda rm -rf ~/.condarc

接着编辑两个 shell 配置文件,移除 conda 初始化代码:

vim ~/.zshrc vim ~/.bash_profile

找到从# >>> conda initialize >>># <<< conda initialize <<<的整段内容并删除。保存后重启终端即可重新安装。


创建 Python 3.8 虚拟环境并安装 TensorFlow 2.5

我们创建一个专门用于 AI 实验的独立环境,名称清晰表达用途:

conda create -n py3.8_tf2.5_torch1.8 python=3.8 conda activate py3.8_tf2.5_torch1.8

激活后命令行前缀会出现(py3.8_tf2.5_torch1.8),表示当前处于该环境中。

为什么选 TensorFlow 2.5?

TensorFlow 官方直到 2.5 版本才正式推出针对 Apple Silicon 的 Metal 插件支持。这意味着:

  • 更早版本无法利用 GPU 加速;
  • 更新版本虽有更好的兼容性,但在一些老项目中可能存在 API 差异;

因此,2.5 是兼顾稳定性与硬件加速能力的最佳起点

分步安装流程

首先安装 Cython,部分底层依赖需要它来编译:

conda install cython

然后安装 Apple 提供的优化依赖包:

conda install -c apple tensorflow-deps==2.5.0

这个包包含了针对 M1 芯片优化的 BLAS、LAPACK 等数学库,是发挥 CPU 性能的关键。

接下来安装真正的 TensorFlow:

python -m pip install tensorflow-macos==2.5.0

⚠️ 注意不是tensorflow!后者是为 Intel 架构设计的,不会启用 Metal 加速。

最后安装 Metal 插件以开启 GPU 支持:

python -m pip install tensorflow-metal

这一步让 TensorFlow 可以调度 M1 的集成 GPU 进行张量运算,实测在 CNN 训练中可提速 2~3 倍。

验证安装效果

运行以下 Python 代码测试:

import tensorflow as tf print("TensorFlow version:", tf.__version__) print("GPU available:", tf.config.list_physical_devices('GPU')) mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) predictions = model(x_train[:1]).numpy() print("Prediction shape:", predictions.shape)

如果输出中出现'Metal' device字样,则说明 GPU 加速已成功启用。


安装 PyTorch 1.8

PyTorch 对 M1 的支持相对更成熟。尽管官方从 1.12 开始才正式声明 MPS(Metal Performance Shaders)支持,但 1.8.0 在实际使用中也能运行,尤其适合复现已发表研究结果。

确保已在目标环境中:

conda activate py3.8_tf2.5_torch1.8

执行安装命令:

conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 -c pytorch

这是官方为 macOS ARM64 提供的预编译版本,无需额外参数。

验证安装:

import torch print("PyTorch version:", torch.__version__) print("CUDA available:", torch.cuda.is_available()) # macOS 上始终为 False print("MPS backend available:", torch.backends.mps.is_available()) # 应返回 True print("MPS built:", torch.backends.mps.is_built()) # 应返回 True

若两者均为True,则可以启用 MPS 加速:

device = torch.device("mps" if torch.backends.mps.is_available() else "cpu") x = torch.randn(3, 3).to(device) print(x)

虽然 MPS 的生态仍在完善中,某些算子尚未支持,但对于大多数基础网络结构(如 MLP、CNN),已经足够实用。


验证全链路是否运行在原生 ARM64 架构下

这是最容易被忽视却最关键的一步。哪怕只有一个组件跑在 Rosetta 模拟层,整体性能就会大打折扣。

方法一:检查机器架构
import platform print(platform.machine()) # 输出应为 'arm64'
方法二:查看 Conda 平台信息
conda info

关注platform字段,必须显示osx-arm64。如果是osx-64,说明环境仍基于 x86 构建。

方法三:终端架构检测
arch

输出应为arm64。你也可以在活动监视器中查看 Python 进程图标是否带有“Apple”标志。

方法四:一键诊断脚本

运行以下脚本来全面检查环境状态:

import sys import platform import subprocess print("Python executable:", sys.executable) print("Python version:", sys.version) print("Platform:", platform.platform()) print("Machine architecture:", platform.machine()) print("Process bits:", 64 if sys.maxsize > 2**32 else 32) try: result = subprocess.run(['conda', 'info', '--json'], capture_output=True, text=True) if result.returncode == 0: import json info = json.loads(result.stdout) print("Conda platform:", info.get("virtual_pkgs", [["unknown"]])[0][0]) except Exception as e: print("Conda check failed:", str(e))

理想输出中应包含:

Machine architecture: arm64 Conda platform: osx-arm64

只有当所有指标都指向arm64,才能确认你真正跑在 M1 的原生赛道上。


这套环境的价值在于“可控”与“高效”的平衡。对于科研人员来说,固定版本意味着实验可复现;对于工程师而言,虚拟环境隔离保证了多项目并行不冲突;而充分利用 Metal 和 MPS 加速,则让 M1 Mac 在没有独立显卡的情况下依然具备可观的本地训练能力。

随着 Apple 生态对 AI 的持续投入,相信未来会有更多原生优化工具涌现。但现在,这套经过验证的配置方案,足以支撑起你在 M1 上的绝大多数机器学习探索任务。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:20:06

2025教育招聘新风向?岗位、薪资与趋势深度解码

行业总览&#xff1a;政策技术双向赋能&#xff0c;招聘市场迎新变局2025年的教育行业&#xff0c;早已告别“野蛮生长”的混沌期&#xff0c;在政策规范的引导与技术革新的助推下&#xff0c;正稳步迈入高质量发展的新阶段——一边是素质教育、职业教育赛道的岗位需求持续“扩…

作者头像 李华
网站建设 2026/4/23 11:11:52

Wan2.2-T2V-A14B部署指南:快速接入高保真视频生成

Wan2.2-T2V-A14B部署指南&#xff1a;快速接入高保真视频生成 你有没有试过这样一种创作体验——脑海中浮现出一段极具张力的画面&#xff1a;“暴风雨中&#xff0c;一只机械海鸥掠过锈迹斑斑的灯塔&#xff0c;浪花在闪电下泛着银光”&#xff0c;但当你试图用传统手段还原时…

作者头像 李华
网站建设 2026/4/22 11:15:01

Git安装后如何配合清华镜像管理TensorFlow代码仓库?

Git安装后如何配合清华镜像管理TensorFlow代码仓库&#xff1f; 在人工智能研发的日常工作中&#xff0c;从 GitHub 克隆一个大型开源项目——比如 TensorFlow——本应是再普通不过的操作。但如果你在国内尝试执行过 git clone https://github.com/tensorflow/tensorflow.git&…

作者头像 李华
网站建设 2026/4/23 12:33:46

【Java毕设全套源码+文档】基于Java的学生网课学习效果评价系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 11:27:05

java 编程 如何让自己写的代码更优雅、更健硕?

1.避免深层嵌套的if语句使用 if return 代替 嵌套 ifif (条件1) {// 条件1成立时的执行代码if (条件2) {// 条件1且条件2成立时的执行代码} else {// 条件1成立但条件2不成立时的执行代码} } else {// 条件1不成立时的执行代码 } 推荐写法&#xff1a; // 清晰的嵌套if示例 pub…

作者头像 李华
网站建设 2026/4/23 12:02:46

Qwen3-32B模型实战:128K长上下文与企业部署

Qwen3-32B 模型实战&#xff1a;128K 长上下文与企业级部署全解析 你有没有遇到过这种情况——刚让大模型读完一份几十页的项目需求文档&#xff0c;正准备让它做系统设计时&#xff0c;它却“忘记”了前面提到的关键约束&#xff1f;或者在处理跨章节逻辑推理任务时&#xff0…

作者头像 李华