如何在M1/M2 Mac终端快速切换arm64与x86架构?
在M1 MacBook上切换x86/ARM64架构运行TensorFlow/PyTorch的解决方案
核心思路
利用Rosetta 2切换终端架构,结合pyenv管理不同架构的Python版本,再通过虚拟环境隔离TensorFlow和PyTorch的依赖,实现快速切换。
步骤1:配置双架构终端
M1默认终端为ARM64架构,要运行x86程序需通过Rosetta启动专属终端:
- 找到「终端.app」(位于
/Applications/Utilities),右键选择「复制」,将副本重命名为「Terminal (x86)」 - 右键点击「Terminal (x86)」→「显示简介」,勾选「使用Rosetta打开」
- 此后,默认终端对应ARM64架构,「Terminal (x86)」对应x86_64架构
步骤2:安装pyenv管理多版本Python
pyenv可在不同架构下维护独立Python版本,避免依赖冲突:
- 在默认ARM64终端执行:
brew install pyenv - 配置shell环境(以zsh为例,bash操作逻辑一致):
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc source ~/.zshrc
步骤3:安装对应架构的Python版本
安装ARM64版Python(适配原生加速库)
在默认ARM64终端执行:
# 选择适配TensorFlow-macos的版本(推荐3.9/3.10) pyenv install 3.10.12 # 设置为当前终端默认版本 pyenv global 3.10.12 # 验证架构是否正确 python -c "import platform; print(platform.machine())" # 输出应为 arm64
安装x86_64版Python(兼容x86生态依赖)
打开「Terminal (x86)」执行:
# 指定安装x86架构的Python export PYENV_ARCH=x86_64 # 安装与ARM版大版本一致的Python,避免语法差异 pyenv install 3.10.12 # 设置为当前终端默认版本 pyenv global 3.10.12 # 验证架构是否正确 python -c "import platform; print(platform.machine())" # 输出应为 x86_64
步骤4:创建架构专属虚拟环境
为每个架构独立创建虚拟环境,彻底隔离依赖:
ARM64环境(支持Metal硬件加速)
在默认终端激活Python后:
# 创建虚拟环境 python -m venv ~/venvs/arm-tf-pytorch # 激活环境 source ~/venvs/arm-tf-pytorch/bin/activate # 安装适配ARM的库 pip install tensorflow-macos tensorflow-metal # TensorFlow带Metal加速支持 pip install torch torchvision torchaudio # PyTorch原生ARM版本
x86_64环境(兼容x86专属依赖)
在「Terminal (x86)」激活Python后:
# 创建虚拟环境 python -m venv ~/venvs/x86-tf-pytorch # 激活环境 source ~/venvs/x86-tf-pytorch/bin/activate # 安装x86版本的库 pip install tensorflow # 标准x86版TensorFlow pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu # x86版PyTorch
快速切换方法
- 切换到ARM64环境:打开默认终端,执行
source ~/venvs/arm-tf-pytorch/bin/activate - 切换到x86_64环境:打开「Terminal (x86)」,执行
source ~/venvs/x86-tf-pytorch/bin/activate
验证安装
激活对应环境后,执行以下命令确认库正常运行:
# 验证TensorFlow import tensorflow as tf print(tf.__version__) print(tf.config.list_physical_devices()) # 验证PyTorch import torch print(torch.__version__) print(torch.backends.mps.is_available()) # ARM环境下应返回True
内容的提问来源于stack exchange,提问作者Marcelo Tournier
相关产品推荐
相关产品推荐

