M1 Pro Mac的Conda环境中PyTorch训练速度慢的原因咨询
PyTorch架构版本不匹配
系统pip安装的PyTorch大概率是Apple Silicon原生的arm64优化版本(支持MPS加速),但在Conda环境中用pip3 install时,可能因为环境架构配置问题,误安装了x86_64版本——这类版本会通过Rosetta转译运行,性能直接砍半。你可以在两个环境分别执行以下命令验证:import torch print(f"MPS可用: {torch.backends.mps.is_available()}") print(f"PyTorch版本: {torch.__version__}") print(f"当前架构: {platform.machine()}")如果Conda环境输出的架构是x86_64,就说明装错了版本。
MPS加速未实际启用
即使Conda环境的PyTorch支持MPS,也得确保训练代码里指定了使用MPS设备。检查代码中是否有类似device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')的逻辑,并且所有模型和张量都移到了该设备上。如果代码默认用CPU跑,速度自然会慢一倍。依赖库的优化程度差异
系统环境的依赖库(比如NumPy、Pillow、torchvision)通常是Apple官方优化过的版本,充分利用了M1 Pro的NEON指令集;但Conda环境中安装的依赖可能是通用编译版本,没有针对ARM架构做优化。可以用pip list对比两个环境中核心依赖的版本和构建标签,比如NumPy是否带有arm64或apple_silicon的标记。Conda环境的Python解释器优化不足
系统自带的Python是Apple专门针对ARM架构编译的,启用了-O3级别的优化和ARM特定指令集;而Conda安装的Python可能是通用构建版本,优化参数较少。可以通过python -c "import sys; print(sys.executable)"获取解释器路径,再用otool -l <路径> | grep -A 5 LC_BUILD_VERSION查看架构和编译信息,对比两个环境的差异。pip在Conda环境中的包拉取逻辑问题
在Conda环境中用pip安装时,可能没有优先获取arm64预编译wheel包,而是默认从源码编译PyTorch——源码编译的版本通常不会启用全部硬件优化。可以尝试在Conda环境中重新安装,强制拉取arm64版本:pip3 install torch torchvision torchaudio --force-reinstall --no-cache-dir --prefer-binary
内容的提问来源于stack exchange,提问作者Liang

