Pytorch 问题解决

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


更新

APPLE 开发者 官网有构建方法,并且呢支持mac的GPU!!!


环境

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
    

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,我可以使用PyTorch来实现一个类ChatGPT的AI模型。首先,我们需要定义模型的架构和参数。 我们可以使用Transformer架构来实现这个模型,其中包括多个编码器和解码器层。每一层都由多头自注意力机制和前向神经网络组成。我们还需要定义词嵌入层和输出层。 以下是一个简单的示例代码,用于创建类ChatGPT模型: ```python import torch import torch.nn as nn import torch.nn.functional as F class ChatGPT(nn.Module): def __init__(self, vocab_size, embedding_dim, num_layers, num_heads, hidden_dim): super(ChatGPT, self).__init__() self.embedding = nn.Embedding(vocab_size, embedding_dim) self.transformer = nn.Transformer(num_layers=num_layers, d_model=embedding_dim, nhead=num_heads, dim_feedforward=hidden_dim) self.output = nn.Linear(embedding_dim, vocab_size) def forward(self, input_seq, target_seq): embedded_input = self.embedding(input_seq) embedded_target = self.embedding(target_seq) output = self.transformer(embedded_input, embedded_target) output = self.output(output) return output ``` 这个模型接受两个输入序列:输入序列和目标序列。输入序列包含待回复的问题,目标序列包含模型应该生成的回复。模型使用嵌入层将这些序列转换为连续向量表示,并将其输入到变压器中。输出层将变压器的输出转换为词汇表上的概率分布,以便我们可以选择最可能的下一个单词。 当我们拥有此模型后,我们可以使用标准的PyTorch训练循环来训练它。我们需要定义损失函数和优化器,并迭代训练数据进行反向传播和参数更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值