Pytorch 问题解决

问题:在mac上使用(M1芯片)pytorch所引发的问题,以及解决过程。

环境

MacBook pro M1

操作系统:macOS 12.5

Anaconda 版本 2.3

Python 版本 3.8

执行代码:

import torch
import torch.nn as nn

input_feat = torch.tensor([[4, 1, 7, 5], [4, 4, 2, 5], [7, 7, 2, 4], [1, 0, 2, 4]], dtype=torch.float32).unsqueeze(0).unsqueeze(0)

conv2d = nn.Conv2d(1, 1, (2, 2), stride=1, padding='same', bias=False)
# 卷积核要有四个维度(输入通道数,输出通道数,高,宽)
kernels = torch.tensor([[[[1, 0], [2, 1]]]], dtype=torch.float32)
conv2d.weight = nn.Parameter(kernels, requires_grad=False)

output = conv2d(input_feat)

出现一下报错:

[W NNPACK.cpp:51] Could not initialize NNPACK! Reason: Unsupported hardware.

解决:

google了一下这个问题,查到官方讨论区的一篇解决这个问题的帖子。

上面介绍到需要将Pytorch进行重建才能解决这个问题。

好 ok,

执行conda remove pytorch 删掉原来的pytorch开始自行编译源码。

从Pytorch官方 github 克隆下最新版源码

  1. 首先确保依赖都已经安装

    conda install astunparse numpy ninja pyyaml setuptools cmake cffi typing_extensions future six requests dataclasses
    
    # Add these packages if torch.distributed is needed
    conda install pkg-config libuv
    
  2. 安装mkl,如果是M1芯片,则需要先确认 删除掉mkl包,这将会导致依赖它的其他包也会被删除

    如果不这样做的话,在编译时可能会有以下报错:

    Intel MKL FATAL ERROR: Cannot load libmkl_intel_thread.1.dylib.

    ## if your pc have M1,you will execute firstly.
    conda remove mkl
    ## if not ,you will execute
    conda install nomkl
    
  3. 下载源码

    git clone --recursive https://github.com/pytorch/pytorch
    cd pytorch
    
  4. 修改setup.py文件中的参数

    在setup.py文件 设置 参数: USE_CUDA=0USE_NNPACK=0

  5. 编译代码

    export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
    MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install
    

如果编译成功应该就没有问题了。

你可能感兴趣的:(Python,python,pytorch)