【Pytorch】【MacOS】14.m1芯片使用mps进行深度模型训练

读者要先自行安装python以及anaconda,并且配置pytorch环境

第一步 测试环境

import torch
# 判断macOS的版本是否支持
print(torch.backends.mps.is_available())
# 判断mps是否可用
print(torch.backends.mps.is_built())
  • 如果第一个语句为False,说明当前MacOS的版本不够,需要升级到12.3版本及以上,且安装了arm64原生Python
  • 如果第二个语句为Fasle,代表还没有安装nightly版本的Pytorch

第二步 安装nightly版本的Pytorch

conda install pytorch torchvision torchaudio -c pytorch-nightly

安装完成后使用

print(torch.backends.mps.is_built())

进行验证是否可以使用mps进行训练

当两项都为True的时候,在进行下面的步骤

第三步 使用GPU进行训练

代码演示为自定义的CIFAR10数据集的训练 可以参考【Pytorch】13.搭建完整的CIFAR10模型
首先我们先要引入设备

# 配置GPU为mps
device = torch.device("mps")

然后我们需要在三处添加为gpu训练

  • 神经网络对象
  • 损失函数
  • DataLoader中的数据
# 3.创建神经网络
model = CIFAR10Model().to(device)


# 4.设置损失函数与梯度下降算法
loss_fn = nn.CrossEntropyLoss().to(device)

    for data in train_loader:
        # 训练基本流程
        inputs, labels = data
        # 加入gpu训练
        inputs, labels = inputs.to(device), labels.to(device)


    with torch.no_grad():
        for data in test_loader:
            # 测试集流程
            inputs, labels = data
            inputs, labels = inputs.to(device), labels.to(device)

分别在上面四处进行修改
就可以实现m1芯片来进行gpu训练

性能对比

M1 mac CPU训练

在这里插入图片描述

batch_size=64的情况下每训练100次的时间

M1 mac GPU训练

在这里插入图片描述
batch_size=64的情况下每训练100次的时间

我们可以看到使用GPU的速度在本模型中还是比CPU快不少的

参考文章

炼丹速度×7!你的Mac电脑也能在PyTorch训练中用GPU加速了
【MacOS】MacBook使用本机m1芯片GPU训练的方法(mps替代cuda)

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pytorch_model.bin是PyTorch模型的二进制文件,可以通过以下步骤使用: 1. 导入PyTorch库 ```python import torch ``` 2. 加载模型 ```python model = torch.load('pytorch_model.bin') ``` 3. 使用模型进行推理 ```python output = model(input) ``` 其中,input是输入数据,output是模型的输出结果。 需要注意的是,pytorch_model.bin文件必须与模型的代码文件在同一目录下,否则需要指定文件路径。另外,如果模型是在GPU上训练的,需要使用torch.load函数的map_location参数将模型加载到CPU上。 ```python model = torch.load('pytorch_model.bin', map_location=torch.device('cpu')) ``` ### 回答2: pytorch_model.bin是PyTorch模型的二进制文件,包含了训练好的模型权重参数。使用pytorch_model.bin可以重载一个已经训练好的模型,然后可以继续训练,或者使用进行发现、推理、评估等操作。 在使用pytorch_model.bin之前,需要准备好一个PyTorch模型。这个模型可以是在PyTorch中编写的代码,也可以是通过其他代码库或工具(如ONNX)导出的模型。接下来,我们将介绍如何将pytorch_model.bin应用到一个PyTorch模型。 1. 导入PyTorch库和模型 首先,需要导入PyTorch库和创建模型的Python代码。以下代码展示了如何导入一个预训练的ResNet-50模型: ``` import torch import torchvision.models as models model = models.resnet50(pretrained=True) ``` 在这个例子中,我们首先导入了PyTorch库,然后使用torchvision包中的models模块来加载ResNet-50模型。我们将预训练模型权重设置为True,这将下载pytorch_model.bin文件,包含了预训练模型权重。模型现在已经被加载到内存中了。 2. 保存/加载模型权重 接下来,我们需要保存预训练模型权重。通常情况下,如果您在使用PyTorch进行新的训练,在每个训练周期后,您都应该保存模型权重。这可以通过以下代码完成: ``` torch.save(model.state_dict(), 'resnet50_weights.pth') ``` 这个代码将模型权重保存到名为resnet50_weights.pth的文件中。后续需要使用进行推理或继续训练时,可以使用以下代码来加载pytorch_model.bin模型权重。 ``` model.load_state_dict(torch.load('resnet50_weights.pth')) ``` 这个代码将预训练模型权重从resnet50_weights.pth文件中加载,并将它们赋值给ResNet-50模型模型现在包含了从预训练模型中学得的权重。 3. 推理、预测和评估 现在,您已经成功加载了预训练模型,可以使用进行推理、预测或评估。这可以使用PyTorch的前向传递函数来完成。以下是一个使用ResNet-50进行图像分类的例子: ``` import numpy as np from PIL import Image import torchvision.transforms as transforms # Load image img = Image.open('test_image.jpg') # Preprocess image for ResNet-50 preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) img_tensor = preprocess(img) img_tensor = img_tensor.unsqueeze(0) # Predict image label using ResNet-50 model.eval() with torch.no_grad(): output = model(img_tensor) probabilities = torch.nn.functional.softmax(output[0], dim=0) predicted_class_idx = np.argmax(probabilities.cpu().numpy()) # Print predicted class print('Predicted class: ', predicted_class_idx) ``` 在这个例子中,我们首先加载了一个图片,然后使用transforms对图片进行预处理(ResNet-50期望的处理方式,用于训练数据)。接下来,我们使用模型的evaluate()方法,运行前向传递函数和softmax函数,得出最可能的输出标签。模型现在已经使用pytorch_model.bin重载完毕,图片也被妥善预处理。 以上就是pytorch_model.bin的使用方法。总体而言,pytorch_model.bin允许我们重载训练好的模型,然后对新的数据进行推理、发现和评估。当然,这需要您前先在PyTorch中编写或导入一个好的模型。 ### 回答3: PyTorch是一个常用的深度学习框架,用于构建和训练各种神经网络模型。其中,pytorch_model.bin是PyTorch保存模型权重的二进制文件,它包含了训练好的模型的所有参数值。如何使用pytorch_model.bin文件呢?下面将给出详细的解释。 1. 加载模型 首先,我们需要加载保存的模型,这可以通过以下代码实现: ```python import torch from transformers import BertModel, BertConfig # 加载模型的配置文件 config = BertConfig.from_pretrained('bert-base-chinese', output_attentions=False, output_hidden_states=True) # 加载模型参数 model = BertModel.from_pretrained('bert-base-chinese', config=config) ``` 上述代码中,我们首先加载了bert-base-chinese预训练模型的配置文件,即BertConfig。然后,通过BertModel.from_pretrained()方法加载预训练模型的所有参数。这里,我们将参数保存在本地文件夹中,并使用from_pretrained()方法来加载这个文件夹。 2. 加载pytorch_model.bin文件 接下来,我们可以使用torch.load()方法来加载pytorch_model.bin文件: ```python # 加载pytorch_model.bin文件 model.load_state_dict(torch.load('pytorch_model.bin'), strict=False) ``` 这里,我们使用了load_state_dict()方法来加载pytorch_model.bin文件中保存的模型权重。需要注意的是,strict参数默认为True,表示只加载与模型结构完全匹配的参数,如果文件中存在一些未知的键,则会报错。因此,我们将strict设置为False,在加载模型时忽略不存在的键。 3. 预测 最后,我们可以使用已加载的模型进行预测: ```python # 输入需要预测的数据 inputs = { 'input_ids': torch.tensor(input_ids).unsqueeze(0), 'attention_mask': torch.tensor(attention_mask).unsqueeze(0), 'token_type_ids': torch.tensor(token_type_ids).unsqueeze(0), } # 预测结果 outputs = model(**inputs) ``` 这里,我们需要将输入数据转换为PyTorch张量格式,并使用model()方法进行预测。预测结果将保存在outputs变量中,我们可以根据需要进行进一步处理。 总之,pytorch_model.bin文件是PyTorch保存模型权重的二进制文件,如果要使用这个文件,我们需要先加载模型配置文件,并使用from_pretrained()方法加载预训练模型的所有参数;然后,使用load_state_dict()方法加载pytorch_model.bin文件中保存的模型权重;最后,使用加载的模型进行预测。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值