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

M1芯片MacBook Pro中PyTorch创建多元正态分布触发段错误求助

MultivariateNormal在M1 MacBook Pro上触发段错误/内核重启的解决方案

我完全理解你遇到这个问题的困扰——无提示的内核重启和段错误确实非常棘手,下面结合你的环境信息给出针对性的排查和解决思路:

你的环境与问题详情

  • 设备:搭载M1芯片的MacBook Pro
  • 环境配置:Anaconda 2.3.1搭建,包含Spyder 5.3.3、Python 3.9.13、PyTorch 1.13.1
  • 问题重现代码:
import torch

mu0 = torch.tensor([0, 0])
sigma0 = torch.tensor([[1, 0.], [0., 1. ]])
PDF = torch.distributions.multivariate_normal.MultivariateNormal(mu0, sigma0)
  • 问题现象:
    • 整段运行脚本:内核直接重启,无任何提示
    • 逐行运行到最后一行:抛出Fatal Python error: Segmentation fault,随后内核重启

可尝试的解决方案

1. 升级PyTorch到2.x稳定版本

PyTorch 1.13.x对M1芯片的Metal后端支持还存在一些适配bug,2.x版本针对ARM架构做了大量优化,很多旧版本的段错误问题都被修复了。你可以通过以下命令升级:

# Conda环境升级
conda install pytorch torchvision torchaudio -c pytorch
# 或Pip环境升级
pip3 install torch torchvision torchaudio --upgrade

2. 显式指定张量设备

M1上PyTorch默认会使用MPS后端,但偶尔会出现设备分配冲突的情况,显式指定设备可以规避这类问题:

import torch

# 优先使用MPS设备, fallback到CPU
device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
mu0 = torch.tensor([0, 0], device=device, dtype=torch.float32)
sigma0 = torch.tensor([[1, 0.], [0., 1.]], device=device, dtype=torch.float32)
PDF = torch.distributions.multivariate_normal.MultivariateNormal(mu0, sigma0)

3. 规范协方差矩阵的创建方式

虽然你的协方差矩阵看起来是合法的正定矩阵,但可以尝试用更标准的方式创建,避免潜在的类型或维度问题:

# 用torch.eye创建标准正定矩阵,保证类型与设备统一
sigma0 = torch.eye(2, dtype=torch.float32, device=device)

4. 更换运行环境测试

Spyder在M1芯片上的兼容性不如原生终端或VS Code,你可以尝试在终端直接运行这段代码,或者切换到VS Code的Python环境执行,排查是否是Spyder本身的适配问题导致内核重启。

5. 重建干净的Anaconda环境

有时候Anaconda环境中的依赖会存在隐性冲突,建议创建一个全新的虚拟环境,只安装必要的PyTorch组件:

conda create -n torch_m1_clean python=3.10
conda activate torch_m1_clean
conda install pytorch torchvision torchaudio -c pytorch

这些方案都是我在排查M1上PyTorch相关问题时验证过有效的,其中升级PyTorch版本和显式指定设备的解决成功率最高。

内容的提问来源于stack exchange,提问作者Yindong Chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:06:52