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 克隆下最新版源码
首先确保依赖都已经安装
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
安装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
下载源码
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
修改setup.py文件中的参数
在setup.py文件 设置 参数: USE_CUDA=0
、USE_NNPACK=0
编译代码
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install
如果编译成功应该就没有问题了。