news 2026/9/9 21:56:39

macOS上安装PyTorch:从虚拟环境到MPS加速的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
macOS上安装PyTorch:从虚拟环境到MPS加速的完整指南

1. 为什么非要在虚拟环境里装PyTorch

先说个我自己的真实经历。几年前我刚开始在Mac上折腾深度学习那会,还不知道虚拟环境是什么东西,直接用sudo pip3 install torch往系统Python里硬塞。结果装完睡了一觉起来,发现之前跑得好好的openpyxlnumpy 1.x全被悄悄升级或者直接崩掉,一个数据处理的脚本直接罢工,那叫一个酸爽。后来才明白,PyTorch这种大型依赖库最吃环境的干净程度——它要拉一堆torchvisiontorchaudionumpytyping_extensions的特定版本,跟系统里其他项目的依赖一不小心就打架。

虚拟环境就是干这个的:它把Python解释器、pip、所有第三方包都隔离在一个独立的目录里,你在里面随便造,随便升降级,都不会动到全局环境的半根头发。具体到Mac上,常用的方案有venvcondaminiforgevenv是Python自带的,轻量但装PyTorch时得手动处理一堆依赖和Python版本问题;condaminiforge则是更省心的选择,尤其是miniforge在Apple Silicon上体验出奇地好。

这里我要重点推荐miniforge,原因有三点:第一,它比Anaconda清爽太多,Anaconda动不动占好几个G,里面装了一堆你可能永远都用不上的科学计算包;第二,miniforge默认使用conda-forge源,对Apple Silicon有原生的ARM64支持,性能拉满;第三,它自带独立的conda命令,创建虚拟环境只需要一行代码,管理依赖也比venv直观。所以接下来的步骤我全部用miniforge演示,如果你已经装了Anaconda,命令也基本通用。

另外提醒一句,Windows上常见的是conda activateconda deactivate,macOS的终端默认是zsh,有时候会提示conda init没执行,别慌,这一步我在第二节会详细说。

2. 环境准备:确认芯片、装miniforge、建虚拟环境

2.1 确认你的Mac是Intel还是Apple Silicon

这一步非常关键,直接决定了PyTorch装哪个版本。因为M1/M2/M3系列芯片是ARM架构,老Intel的Mac是x86_64架构,两个架构的Python解释器和PyTorch二进制包完全不通用。打开终端敲:

uname -m

如果输出是arm64,恭喜你,这是Apple Silicon;如果是x86_64,那就是Intel。另外看系统里“关于本机”那栏,如果写着“Apple M1 Pro”或者“M2”,也能猜到。这一步别嫌麻烦,我见过有人拿Intel的Mac装了torch==2.0的ARM版本,启动直接报Illegal instruction,最后只能重装。

这里还有一个细节:部分老Intel Mac用的是x86_64,但如果你在Rosetta转译的终端里运行,uname -m也可能显示arm64,所以稳妥起见,请在原生终端里执行。你可以打开“访达-应用程序-实用工具-终端”,右键查看简介,确认“使用Rosetta打开”没有被勾选。

2.2 安装miniforge并初始化conda

安装miniforge非常简单,直接去GitHub的miniforge官方仓库下载对应芯片的安装包。我建议用命令行方式,最干净:

# 下载miniforge安装脚本(Apple Silicon版) curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh # 如果是Intel Mac,把arm64改成x86_64

然后执行:

bash Miniforge3-MacOSX-arm64.sh

一路回车,看到许可协议输yes,默认安装位置是~/miniforge3,不用改。最后它会问你是否执行conda init,这里必须输yes,不然之后conda命令找不到。装完之后关掉终端重新开一个,输入conda --version,能输出版本号就说明成功了。

我踩过最大的坑是这个:安装完miniforge之后,系统里同时存在python3(系统自带)和conda的Python,如果直接用python3去运行代码,根本不会用虚拟环境里的解释器。所以一定要养成先conda activate 环境名,再敲python的习惯。

2.3 创建PyTorch专属虚拟环境

推荐用conda create -n来建一个干净的环境,名字随意,我一般用pytorch,清晰明了。同时可以一次性指定Python版本,PyTorch目前对3.10-3.12支持最好,建议选3.10或3.11,太老或太新都可能遇到预编译包缺失的问题:

conda create -n pytorch python=3.11 -y

这里-y是自动确认依赖,省得中途卡住。创建完成后激活:

conda activate pytorch

激活之后终端前面会多一个(pytorch)前缀,这就是进入虚拟环境了。如果你用的是zsh,偶尔会碰到conda activate提示command not found,多半是conda init没生效,执行一下conda init zsh再重开终端就好。

3. 安装PyTorch:conda还是pip?

3.1 先看官方安装命令

打开PyTorch官网,选择macOS、你的芯片架构、安装方式,它会直接给你一段命令。我以目前最新的稳定版本为例,在Apple Silicon上用pip安装,官方推荐命令是:

pip3 install torch torchvision torchaudio

在macOS上,pip默认会从PyPI下载Mac平台的CPU版本,如果你用的是M系列芯片,并且想启用MPS加速,这个命令就够了,因为PyTorch在Mac上只提供CPU和MPS两种编译,没有单独的CUDA版本。注意,Mac上不要想着装CUDA,NVIDIA的卡在Mac上早就不用想了,MPS是新版的加速方案,利用的是Apple的Metal框架。

如果你的网络访问PyPI很慢,建议换国内镜像,比如清华源:

pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

但注意,用-i临时指定镜像源时,最好加一句--trusted-host pypi.tuna.tsinghua.edu.cn,否则有些老版本的pip会报SSL错误。

3.2 用conda安装的优势和坑

如果你更习惯用conda管理包,也可以直接用:

conda install pytorch torchvision torchaudio -c pytorch

这里有个特别重要的细节:现在PyTorch在conda上的命名规则改了。以前是直接pytorch包,现在必须在前面加上pytorch::前缀,或者指定通道,否则可能装成pytorch的CPU-only旧版本,或者找不到包。同时建议先给conda配置国内镜像源:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

不过说实话,我实际体验下来,在Mac上conda安装PyTorch的速度和兼容性并不比pip好,反而经常碰到依存关系解析太久、下载到一半断流的幺蛾子。所以我个人更推荐用pip,直接、快、省事。但如果你就是要用conda,也完全没问题,只要确保环境内没有同时跑pip和conda反复装包,不然容易产生依赖错乱。

3.3 安装完必做的验证

不管用哪种方式装完,都要验证一下到底成没成。先激活环境,然后进入Python交互式:

conda activate pytorch python

然后在Python里执行:

import torch print(torch.__version__) print(torch.backends.mps.is_available())

如果输出了类似2.5.1,并且第二行是True,说明安装成功,而且MPS加速可用。如果mps.is_available()返回False,别担心,可能是当前PyTorch版本对老Intel Mac的支持问题,CPU版本的PyTorch也能正常跑,只是速度慢一些。

还有一个容易忽略的点:torch.__version__如果显示2.0.0+cpu,这是正常的,不用慌,Mac上的所有PyTorch都是CPU+支持MPS的编译版本,没有CUDA版本。但如果你需要用到torch.cuda.is_available(),在Mac上永远是False,这是正常现象,别浪费时间纠结。

4. 常见问题与排查实录

4.1 安装速度慢、卡在Downloading

这是Mac和Windows玩家共同的痛,尤其是通过pip下载torch的wheel包,动辄一两百兆,网络一抽风就卡死。我的建议有三招:

第一,换镜像源,清华、阿里、中科大的源都行,我实测下来清华源在晚上高峰反而很稳,阿里源白天快,看你所在地区,两个都试一下。第二,用--timeout--retries参数,增加重试次数和超时上限:

pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple --timeout 120 --retries 10

第三,直接手动下载wheel包,然后本地安装。你可以从PyPI官网或者镜像站先把.whl文件下载下来,再用pip install 文件路径安装,这样断了也能续传。

4.2 conda虚拟环境创建后Python版本不对

很多人建了环境,激活后一敲python --version,发现还是系统那个Python。这是因为系统里同时存在/usr/bin/python3和miniforge的python,而conda环境激活之后,环境变量PATH应该把conda环境目录放在最前面。排查方法是执行:

which python

如果输出不是~/miniforge3/envs/pytorch/bin/python,说明激活没生效。常见原因是没执行conda activate,或者当前终端session没有运行过conda init。重开终端再激活一次,八成能解决。

4.3 在PyCharm里找不到虚拟环境

这个也是高频问题。你用miniforge创建了环境,但在PyCharm的Settings -> Project -> Python Interpreter里怎么都看不到。解决办法是手动添加:点Add Interpreter,选Conda Environment,然后Existing environment,它会让你选择执行文件路径。你要找到~/miniforge3/envs/pytorch/bin/python,选中这个文件即可。有些PyCharm版本会自动扫描conda环境,不用手填,但还是建议手动指定,特别是你装了多个conda工具链的时候。

4.4 安装时报“unsupported machine code"之类的错

这类错误基本就是你在Apple Silicon上装了x86_64版本的Python或torch,或者在老Intel Mac上装了ARM版本。处理办法很直白:删掉环境,重新建,建的时候加上CONDA_SUBDIR环境变量来强制指定架构:

# 在Apple Silicon上强制ARM64 CONDA_SUBDIR=osx-arm64 conda create -n pytorch python=3.11 -y

也可以先查看当前conda的subdir信息:

conda info

platform那一行,如果是osx-64,说明你正在用Rosetta转译的终端,这也解释了为什么装了arm包出错。解决办法依然是使用原生终端。

4.5 使用MPS加速时的注意事项

新版的PyTorch在Apple Silicon上可以用torch.device('mps')来调用MPS后端,最常见的操作是:

device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu') data = data.to(device)

但有几个坑要提醒:一是MPS在一些操作上还没有完整实现,比如某些scatterindex_put操作可能报错或回退到CPU,碰到这种情况就用device='cpu'再试。二是内存管理,MPS默认会占满统一内存,如果你的Mac是16GB内存,模型稍微大一点就会爆内存,建议给PyTorch设置一个上限:

import os os.environ['PYTORCH_MPS_HIGH_WATERMARK_RATIO'] = '0.4'

这个参数控制MPS占用的内存比例,设成0.4意味着最多用40%的内存,剩下留系统使用。

4.6 重启或换终端之后环境消失了

这个不是环境真的没了,而是你没有自动激活。你每次打开新终端都需要手动conda activate pytorch,习惯了就很自然,但新手容易以为自己没装好。如果你希望打开终端自动进入环境,可以改~/.zshrc,加上:

conda activate pytorch

不过我不太建议这么干,因为之后切换项目会有点烦。

5. 让这个环境更顺手:换源、脚本和后续扩展

5.1 一键配置pip和conda镜像

我每次新装完miniforge都会做一件事:把pip和conda的默认源都换成国内镜像,免得之后每次装包都等半天。pip的配置在~/.pip/pip.conf,没有就新建:

[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn

conda的镜像配置在~/.condarc,可以用命令添加通道。改了之后重启终端,之后安装包的速度立竿见影。

5.2 快速重建环境:用environment.yml

如果你在几台Mac之间切换,或者想分享你的环境配置,推荐用conda env export导出环境文件:

conda activate pytorch conda env export > environment.yml

换新电脑时,只要有了这个文件,直接:

conda env create -f environment.yml

就能完整还原整个环境,包括Python版本和所有包,省去手动找版本的时间。这是我觉得conda比venv好用的地方,虽然平时用pip装包,但环境管理还是conda舒服。

5.3 后续可以安装的常用工具

装好PyTorch不代表万事大吉,深度学习还得有配套工具。我一般会在同一个环境里一并装:

pip install jupyter matplotlib pandas scikit-learn tensorboard

尤其是tensorboard,训练模型可视化损失曲线非常有用。另外如果你用PyCharm,建议在Settings里把默认终端设置成conda的bash/zsh,这样每次打开终端就自动激活环境,省得手动切。

6. 从安装到实战:一个小例子验证整个环境

光会装不算本事,能跑通例子才算。我教大家一个最经典的MNIST手写数字识别验证流程,用PyTorch跑一个最小的训练循环,不会写模型也没关系,先跑起来感受一下环境是否正常。

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu') transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_set = datasets.MNIST(root='./data', train=True, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True) model = nn.Sequential( nn.Flatten(), nn.Linear(784, 128), nn.ReLU(), nn.Linear(128, 10) ).to(device) optimizer = optim.Adam(model.parameters()) loss_fn = nn.CrossEntropyLoss() model.train() for epoch in range(1): for data, target in train_loader: data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = loss_fn(output, target) loss.backward() optimizer.step() print(f'Epoch {epoch}, Loss: {loss.item():.4f}')

这段代码用MPS跑,MNIST下载会在当前目录下建一个data文件夹,依赖torchvision,所以你前面必须把torchvision也装上。如果运行结束后输出了loss,并且没有报错,说明整个环境从安装到MPS加速完全是通的。

我的个人体会是,很多时候环境问题比模型问题更折磨人,命令看着简单,但坑都在细节里。上面列出的那些问题,基本都是我几次重装教训之后总结下来的,你照着走一遍,至少能避开八成雷区。

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

CT重建中的原始对偶算法:TV正则化与Matlab实战

CT重建看起来是个硬件问题,实际上是个数学问题。做医学图像处理或者工业无损检测的朋友应该都有体会:投影数据转一圈采回来,算法才是决定图像质量的关键。传统滤波反投影(FBP)在数据完整时又快又稳,但一旦投…

作者头像 李华
网站建设 2026/9/9 21:55:55

STM32太阳能追光系统实战:从固定光伏板到自动追踪,发电量提升27%

简介:这是一套基于STM32单片机的太阳能电池板追日光跟踪系统完整设计资料,适合嵌入式学习者、电子类专业学生及光伏方向开发者参考。方案以STM32作为核心控制器,结合光敏传感器或日晷算法检测太阳位置,通过PWM驱动步进电机实现电池…

作者头像 李华
网站建设 2026/9/9 21:54:02

物联网数据压缩实战:从差分编码到存储成本降低70%

我做了三年多的物联网落地项目,从几十个节点的原型验证,到几千台设备的生产环境,一个感受特别深:硬件成本、流量成本都能靠架构设计抠出来,但存储成本往往是最容易被忽视、又最容易失控的一项。尤其是当你的设备上了量…

作者头像 李华
网站建设 2026/9/9 21:52:10

Hermes WebUI Docker部署教程:三步跑通,新手友好

Hermes WebUI Docker部署教程:三步跑通,新手友好 【免费下载链接】hermes-webui Hermes WebUI: The best way to use Hermes Agent from the web or from your phone! 项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui Hermes Web…

作者头像 李华
网站建设 2026/9/9 21:51:43

STM32数字时钟实战:内部RTC与数码管动态扫描全解析

简介:基于STM32的数字时钟设计工程包,面向嵌入式系统初学者及STM32编程爱好者,聚焦如何借助STM32实现计时、闹钟触发与LCD液晶显示等完整功能。工程以C源码、头文件、Keil工程配置及Proteus仿真文件为主要构成,共182个文件&#x…

作者头像 李华
网站建设 2026/9/9 21:51:27

数学建模论文提交前AI自查方案:六大维度26项细节全排查

2026年国赛备考的同学,论文写完之后先别急着交。这次我们来看一套数学建模论文提交前的AI自查方案:把论文、赛题、附件一起丢给大模型,再输入固定指令,让它按六大维度26项细节逐项排查,最后输出一张可以直接对照修改的…

作者头像 李华