首页 > 其他分享 >macbook苹果m1芯片训练机器学习、深度学习模型,resnet101在mnist手写数字识别上做加速,torch.device("mps")

macbook苹果m1芯片训练机器学习、深度学习模型,resnet101在mnist手写数字识别上做加速,torch.device("mps")

时间:2023-05-24 17:44:54浏览次数:44  
标签:loss labels torch train m1 device model

apple的m1芯片比以往cpu芯片在机器学习加速上听说有15倍的提升,也就是可以使用apple mac训练深度学习pytorch模型!!!惊呆了

 

安装apple m1芯片版本的pytorch

 

然后使用chatGPT生成一个resnet101的训练代码,这里注意,如果网络特别轻的话是没有加速效果的,还没有cpu的计算来的快

这里要选择好设备不是"cuda"了,cuda是nvidia深度学习加速的配置

# 设置设备
# device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device = torch.device("mps") #torch.device("cpu")

  

resnet101的训练代码,训练mnist手写数字识别,之前我还尝试了两层linear的训练代码,低估了apple 的 torch.device("mps"),这两层linear的简单神经网络完全加速不起来,还不如torch.device("cpu")快,换成了resnet101加速效果就很明显了,目测速度在mps上比cpu快了5倍左右  
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
from torchvision.models import resnet101
from tqdm import tqdm

# 设置设备
# device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device = torch.device("mps")  #torch.device("cpu")


# 加载 MNIST 数据集
train_dataset = MNIST(root="/Users/xinyuuliu/Desktop/test_python/", train=True, transform=ToTensor(), download=True)
test_dataset = MNIST(root="/Users/xinyuuliu/Desktop/test_python/", train=False, transform=ToTensor())

# 创建数据加载器
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

# 定义 ResNet-101 模型
model = resnet101(pretrained=False)
model.conv1 = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
model.fc = nn.Linear(2048, 10)  # 替换最后一层全连接层
model.to(device)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练和评估函数
def train(model, dataloader, optimizer, criterion):
    model.train()
    running_loss = 0.0
    for inputs, labels in tqdm(dataloader, desc="Training"):
        inputs = inputs.to(device)
        labels = labels.to(device)
        
        optimizer.zero_grad()
        
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item() * inputs.size(0)
    
    epoch_loss = running_loss / len(dataloader.dataset)
    return epoch_loss

def evaluate(model, dataloader):
    model.eval()
    correct = 0
    total = 0
    with torch.no_grad():
        for inputs, labels in tqdm(dataloader, desc="Evaluating"):
            inputs = inputs.to(device)
            labels = labels.to(device)
            
            outputs = model(inputs)
            _, predicted = torch.max(outputs.data, 1)
            
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    accuracy = correct / total * 100
    return accuracy

# 训练和评估
num_epochs = 10

for epoch in range(num_epochs):
    print(f"Epoch {epoch+1}/{num_epochs}")
    train_loss = train(model, train_loader, optimizer, criterion)
    print(f"Training Loss: {train_loss:.4f}")
    
    test_acc = evaluate(model, test_loader)
    print(f"Test Accuracy: {test_acc:.2f}%")

  

 

结果:

在mps device上,训练时间在10分钟左右

 在cpu device上,训练时间在50分钟左右,明显在mps device上速度快了5倍

 

标签:loss,labels,torch,train,m1,device,model
From: https://www.cnblogs.com/LiuXinyu12378/p/17429053.html

相关文章

  • pytorch 是否支持GPU
    是否支持N卡CUDAimporttorchprint(torch.cuda.is_available())#创建一个CPU张量x=torch.randn(3,3)#将张量转移到GPU上,x.to('cuda')等同于x.cuda()x_gpu=x.to('cuda')x_gpu=x.to(torch.deviec('cuda'))#在GPU上执行操作y_gpu=x_gpu+2A卡?......
  • Pytorch tensorboard与tensorboardX的区别
    tensorboardX跟tensorboard在使用上是基本一样的,区别可能仅在于一个是大佬开发的,一个是PyTorch官方与TensoBoard合作的。tensorboardX已经被deprecated了,并且不再维护了,用fromtorch.utils.tensorboardimportSummaryWriter原文链接:https://blog.csdn.net/hxxjxw/article/d......
  • 升级到PyTorch 2.0的技巧总结
    PyTorch2.0发布也有一段时间了,大家是不是已经开始用了呢?PyTorch2.0通过引入torch.compile,可以显着提高训练和推理速度。与eagerly模式相反,编译API将模型转换为中间计算图(FXgraph),然后以某种方式将其编译为低级计算内核,这样可以提高运行速度。对于PyTorch2.0而言,你......
  • libtorch教程(三)简单模型搭建
    前言 模块化编程的思想非常重要,通过模块化编程可以大幅减少重复的敲代码过程,同时代码可读性也会增加。本章将讲述如何使用libtorch搭建一些MLP和CNN的基本模块。本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。欢迎关注公众号CV技术指南,专......
  • ImportError: cannot import name 'QuantStub' from 'torch.ao.quantization' (E:\Ep
    ImportError:cannotimportname'QuantStub'from'torch.ao.quantization'(E:\Eprogramfiles\Anaconda3\lib\site-packages\torch\ao\quantization\__init__.py)fromtorch.ao.quantizationimportQuantStub,DeQuantStub ModuleNotFoundE......
  • 【iOS开发】Device Compatibility(设备兼容性)
    设备兼容性https://developer.apple.com/library/content/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html......
  • 【研究生学习】Transformer模型以及Pytorch实现
    Transformer是Google在2017年提出的网络架构,仅依赖于注意力机制就可以处理序列数据,从而可以不使用RNN或CNN。当前非常热门的BERT模型就是基于Transformer构建的,本篇博客将介绍Transformer的基本原理,以及其在Pytorch上的实现。......
  • Development cannot be enabled while your device is locked.
    问题:Developmentcannotbeenabledwhileyourdeviceislocked.分析原因:由于第一次连接MAC时,在iOS设备上点击了"不信任"选项,所以XCode8不能访问手机,所以才出现这个问题解决方法:英文好的同学,可以看到原文章http://stackoverflow.com/questions/26791477/xcode-device-locked-whe......
  • 基于pytorch实现模型剪枝
    所谓模型剪枝,其实是一种从神经网络中移除"不必要"权重或偏差(weigths/bias)的模型压缩技术。本文深入描述了pytorch框架的几种剪枝API,包括函数功能和参数定义,并给出示例代码。一,剪枝分类1.1,非结构化剪枝1.2,结构化剪枝1.3,本地与全局修剪二,PyTorch的剪枝2.1,pytorch......
  • pytorch学习笔记——timm库
    当使用ChatGPT帮我们工作的时候,确实很大一部分人就会失业,当然也有很大一部分人收益其中。我今天继续使用其帮我了解新的内容,也就是timm库。毫不夸张的说,ChatGPT比百分之80的博客讲的更清楚更好,仅次于源码。当提到计算机视觉的深度学习框架时,PyTorch无疑是最受欢迎的选择......