You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MacOS上使用PyTorch出现计算结果不一致的诡异问题

MacOS与Google Colab中PyTorch计算结果不一致的原因分析

问题现象

MacOS本地运行结果

Last login: Tue Aug 22 14:42:20 on ttys000
(base) crk@crkdeMacBook-Air ~ % conda activate kk
(kk) crk@crkdeMacBook-Air ~ % python
Python 3.8.17 (default, Jul  5 2023, 15:35:58) 
[Clang 14.0.6 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> x = torch.arange(4.0)
>>> x
tensor([0., 1., 2., 3.])
>>> x.requires_grad_(True)
tensor([0., 1., 2., 3.], requires_grad=True)
>>> y = 2 * torch.dot(x, x)
>>> y
tensor(0., grad_fn=<MulBackward0>)
>>> 

Google Colab运行结果

tensor(28., grad_fn=<MulBackward0>)

本地环境配置

(kk) crk@crkdeMacBook-Air ~ % conda list
# packages in environment at /Users/crk/miniconda3/envs/kk:
#
# Name                    Version                   Build  Channel
appnope                   0.1.3              pyhd8ed1ab_0    conda-forge
asttokens                 2.2.1              pyhd8ed1ab_0    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
backports                 1.0                pyhd8ed1ab_3    conda-forge
backports.functools_lru_cache 1.6.5              pyhd8ed1ab_0    conda-forge
ca-certificates           2023.7.22            hf0a4a13_0    conda-forge
comm                      0.1.4              pyhd8ed1ab_0    conda-forge
contourpy                 1.1.0                    pypi_0    pypi
cycler                    0.11.0                   pypi_0    pypi
debugpy                   1.6.7            py38h313beb8_0  
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
entrypoints               0.4                pyhd8ed1ab_0    conda-forge
executing                 1.2.0              pyhd8ed1ab_0    conda-forge
fonttools                 4.42.0                   pypi_0    pypi
glob2                     0.7                      pypi_0    pypi
importlib-resources       6.0.1                    pypi_0    pypi
ipykernel                 6.25.1             pyh5fb750a_0    conda-forge
ipython                   8.12.0             pyhd1c38e8_0    conda-forge
jedi                      0.19.0             pyhd8ed1ab_0    conda-forge
jupyter_client            7.3.4              pyhd8ed1ab_0    conda-forge
jupyter_core              5.3.0            py38hca03da5_0  
kiwisolver                1.4.4                    pypi_0    pypi
libcxx                    14.0.6               h848a8c0_0  
libffi                    3.4.4                hca03da5_0  
libsodium                 1.0.18               h27ca646_1    conda-forge
matplotlib                3.7.2                    pypi_0    pypi
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
ncurses                   6.4                  h313beb8_0  
nest-asyncio              1.5.6              pyhd8ed1ab_0    conda-forge
numpy                     1.24.4                   pypi_0    pypi
opencv-python             4.8.0.76                 pypi_0    pypi
openssl                   3.1.2                h53f4e23_0    conda-forge
packaging                 23.1               pyhd8ed1ab_0    conda-forge
pandas                    2.0.3                    pypi_0    pypi
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
pexpect                   4.8.0              pyh1a96a4e_2    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    10.0.0                   pypi_0    pypi
pip                       23.2.1           py38hca03da5_0  
platformdirs              3.10.0             pyhd8ed1ab_0    conda-forge
prompt-toolkit            3.0.39             pyha770c72_0    conda-forge
prompt_toolkit            3.0.39               hd8ed1ab_0    conda-forge
psutil                    5.9.0            py38h1a28f6b_0  
ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
pygments                  2.16.1             pyhd8ed1ab_0    conda-forge
pyparsing                 3.0.9                    pypi_0    pypi
python                    3.8.17               hb885b13_0  
python-dateutil           2.8.2              pyhd8ed1ab_0    conda-forge
python_abi                3.8                      2_cp38    conda-forge
pytz                      2023.3                   pypi_0    pypi
pyzmq                     25.1.0           py38h313beb8_0  
readline                  8.2                  h1a28f6b_0  
setuptools                68.0.0           py38hca03da5_0  
six                       1.16.0             pyh6c4a22f_0    conda-forge
sqlite                    3.41.2               h80987f9_0  
stack_data                0.6.2              pyhd8ed1ab_0    conda-forge
tk                        8.6.12               hb8d0fd4_0  
torch                     1.9.0                    pypi_0    pypi
torchaudio                0.9.0                    pypi_0    pypi
torchvision               0.10.0                   pypi_0    pypi
tornado                   6.1              py38hea4295b_1    conda-forge
tqdm                      4.66.0                   pypi_0    pypi
traitlets                 5.9.0              pyhd8ed1ab_0    conda-forge
typing-extensions         4.7.1                hd8ed1ab_0    conda-forge
typing_extensions         4.7.1              pyha770c72_0    conda-forge
tzdata                    2023.3                   pypi_0    pypi
wcwidth                   0.2.6              pyhd8ed1ab_0    conda-forge
wheel                     0.38.4           py38hca03da5_0  
xz                        5.4.2                h80987f9_0  
zeromq                    4.3.4                hbdafb3b_1    conda-forge
zipp                      3.16.2                   pypi_0    pypi
zlib                      1.2.13               h5a0b063_0  
(kk) crk@crkdeMacBook-Air ~ % 

原因分析

从环境配置可以看到,本地安装的PyTorch版本为1.9.0,而Google Colab默认使用的是远高于该版本的PyTorch(通常为2.x系列)。

在PyTorch 1.9.0及更早版本中,针对Apple Silicon芯片(M系列)的支持存在缺陷:当张量开启自动求导(requires_grad=True)后,CPU上的部分运算会出现计算错误,尤其是点积操作。这是因为早期PyTorch对M系列芯片的加速适配不完善,导致张量计算时出现数值异常。

Colab使用的是x86架构的CPU或GPU,且PyTorch版本较新,不存在该适配问题,因此计算结果正确(2*(0²+1²+2²+3²)=2*14=28)。

解决办法

  • 升级本地PyTorch版本到1.12.0及以上:Apple Silicon的适配在1.12版本后得到修复,升级后即可正常计算。
  • 若暂时无法升级,可在创建张量时指定设备为CPU并禁用MPS加速,或关闭自动求导验证计算结果(仅作为临时方案)。

内容的提问来源于stack exchange,提问作者K Demons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:48:10