配置pytorch(gpu)分析环境

news2024/10/5 15:35:12

Pytorch是目前最火的深度学习框架之一,另一个是TensorFlow。不过我之前一直用到是CPU版本,几个月前买了一台3070Ti的笔记本(是的,我在40系显卡出来的时候,买了30系,这确实一言难尽),同时我也有一台M1芯片Macbook Pro,目前也支持了pytorch的GPU加速,所以我就想着,在这两个电脑上装个Pytorch,浅度学习深度学习。

Apple silicon

首先是M1芯片,这个就特别简单了。先装一个conda,只不过是内置mamba包管理器,添加conda-forge频道,arm64版本。

# 下载
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-arm64.sh
# 安装
bash Mambaforge-MacOSX-arm64.sh

然后我们用mamba创建一个环境,用的是开发版的pytorch,所以频道指定pytorch-nightly

mamba create -n pytorch \
   jupyterlab jupyterhub pytorch torchvision torchaudio 
   -c pytorch-nightly

最后,用conda activate pytorch,然后测试是否正确识别到GPU

import torch
torch.has_mps
# True
# 配置device
device = torch.device("mps")

参考资料: https://developer.apple.com/metal/pytorch/

Windows NVIDIA

首先,需要确保你的电脑安装的是NVIDIA的显卡,以及有了相应的CUDA驱动。

CUDA的显卡架构要求: https://docs.nvidia.com/deeplearning/cudnn/support-matrix/index.html

新一代的电脑上基本都自带CUDA驱动。可以通过打开NVIDIA控制面板的系统信息

在这里插入图片描述

在组件中查看你已经安装的CUDA驱动,例如我的是11.7.89 。

在这里插入图片描述

也可以通过命令行的方式查看,

在这里插入图片描述

接下来,我们来安装pytorch。同样也是推荐conda的方法,我们先从清华镜像源中下载Miniconda。

在这里插入图片描述

选择Windows的安装包

在这里插入图片描述

安装完之后,我们就可以通过Anaconda Prompt进入命令行,根据pytorch网站上的推荐进行安装。

在这里插入图片描述

但是有一点不同,为了避免环境冲突,最好是单独创建一个环境,所以代码如下

conda create -n pytorch pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

接着用 conda activate pytorch启动环境,然后在python环境中测试

import torch
torch.has_cuda
# True

几个常见的问题(至少我在写文章想到的问题):

Q: 使用conda和pip安装的区别是什么?

A: conda是pytorch官方推荐的安装方式,因为conda会一并帮你装好pytorch运行所需要的CUDA驱动和相关工具集。这意味着为conda所占用的空间会更多一些。

Q: 可以在非常老的硬件上安装最新的pytorch吗?

A: 我觉得这个跟装游戏类似,你虽然能装上游戏,但是不满足游戏的最低配置需求,照样跑不动。

Q: 电脑上必须要安装CUDA驱动和安装CUDA toolkit吗?

A: 其实我个人不是很确定如何回答,如下是我目前的一些见解。如果你用的conda,那么他会帮你解决一些依赖问题。如果你是用pip,那么就需要你自己动手配置。其中,CUDA驱动是必须要安装的,因为CUDA驱动负责将GPU硬件与计算机操作系统相连接,不装驱动,操作系统就不识别CUDA核心,相当你没装NVIDIA显卡。而CUDA toolkit是方便我们调用CUDA核心的各种开发工具集合,你装CUDA toolkit的同时会配套安装CUDA驱动。除非你要做底层开发,或者你需要从源码编译一个pytorch,否则我们大可不装CUDA toolkit。

Q: 如果我电脑上的CUDA驱动版本比较旧怎么办?或者说我CUDA的驱动版本是11.7,但是我安装了cuda=11.8的pytorch,或者版本不一样的pytorch会怎么样?

A: 我们在安装cuda=11.7的pytorch,本质上安装的是在CUDA Toolkit版本为11.7环境下编译好的pytorch版本。当cuda版本之间的差异不是特别的大,或者说不是破坏性的升级的情况下,那么理论上也是能运行的。

手写数据性能测试

下面用的是GPT3.5给我提供一段手写字识别(MNIST)案例代码,用来测试不同的平台的速度。

import torch
import torchvision
import torchvision.transforms as transforms

# 转换数据格式并且加载数据
transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5,), (0.5,))])

trainset = torchvision.datasets.MNIST(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.MNIST(root='./data', train=False,
                                       download=False, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64,
                                         shuffle=False, num_workers=2)

# 定义网络模型
class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = torch.nn.Conv2d(1, 6, 5)
        self.pool = torch.nn.MaxPool2d(2, 2)
        self.conv2 = torch.nn.Conv2d(6, 16, 5)
        self.fc1 = torch.nn.Linear(16 * 4 * 4, 120)
        self.fc2 = torch.nn.Linear(120, 84)
        self.fc3 = torch.nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(torch.nn.functional.relu(self.conv1(x)))
        x = self.pool(torch.nn.functional.relu(self.conv2(x)))
        x = x.view(-1, 16 * 4 * 4)
        x = torch.nn.functional.relu(self.fc1(x))
        x = torch.nn.functional.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

# 这里的代码比较随意,就是用哪个平台运行哪个
# CPU
device = torch.device("cpu")
# CUDA
device = torch.device("cuda:0")
# MPS
device = torch.device("mps")

net.to(device)

# 定义损失函数和优化器
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

# 训练网络

import time

start_time = time.time()  # 记录开始时间

for epoch in range(10):  # 进行10次迭代训练
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data[0].to(device), data[1].to(device)
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 100 == 99:
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 100))
            running_loss = 0.0

end_time = time.time()  # 记录结束时间
training_time = end_time - start_time  # 计算训练时间

print('Training took %.2f seconds.' % training_time)

print('Finished Training')

# 测试网络
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data[0].to(device), data[1].to(device)
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
      ))

最后统计下来的结果为

Windows平台

  • 3070Ti Training took 45.02 seconds.
  • i9 12900H Training took CPU 75.65

Mac平台

  • M1 Max Training took 50.79 seconds.
  • M1 MAX CPU Training took 109.61 seconds.

总体上来说,GPU加速很明显,无论是mac还是Windows。其次是GPU加速效果对比,M1 max芯片比3070Ti差个10%?。

不过目前测试都是小数据集,等我学一段时间,试试大数据集的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AutoGPT】你自己运行,我先睡了—— ChatGPT过时了吗?

系列文章目录 【AI绘画】Midjourney和Stable Diffusion教程_山楂山楂丸的博客-CSDN博客 目录 系列文章目录 前言 一、AutoGPT是什么? 二、AutoGPT带来的利弊 三、AutoGPT和ChatGPT区别 四、未来 总结 前言 ChatGPT是否过时?AutoGPT的兴起&#…

【数字图像处理】空间滤波

文章目录1. 概述2 低通(平滑)滤波2.1 均值滤波2.2 中值滤波2.3 高斯低通滤波2.4 双边滤波2.5 导向滤波3 高通(锐化)滤波3.1 Laplacian滤波器3.3 Sobel滤波器1. 概述 图像空间滤波是一种常用的图像处理技术,用于改变图…

基于OpenCV的人脸识别

目录 🥩 前言 🍖 环境使用 🍖 模块使用 🍖 模块介绍 🍖 模块安装问题: 🥩 OpenCV 简介 🍖 安装 OpenCV 模块 🥩 OpenCV 基本使用 🍖 读取图片 🍗 【…

【Pytorch】利用PyTorch实现图像识别

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 这是目录使用torchvision库的datasets类加载常用的数据集或自定义数据集使用torchvision库进行数据增强和变换,自定义自己的图像分类数据集并使用torchvision库加载它们使…

安卓渐变的背景框实现

安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合,这是最推荐的方法,也是最有效的。2.利用canvas裁剪实现,这个方法有个缺陷,就是圆角会出现毛边,也就是锯齿。3.利用layer绘制边框1.背景 万…

Python 爬虫进阶必备 | 某电影站视频采集加密参数逻辑分析

点击上方“咸鱼学Python”,选择“加为星标”第一时间关注Python技术干货!今日网站aHR0cHM6Ly96MS5tMTkwNy5jbi8/ang9JUU1JTkzJTg4JUU1JTg4JUE5JUMyJUI3JUU2JUIzJUEyJUU3JTg5JUI5JUU0JUI4JThFJUU1JUFGJTg2JUU1JUFFJUE0加密定位与分析分析的网站是一个电影…

强化学习分类与汇总介绍

1.强化学习(Reinforcement Learning, RL) 强化学习把学习看作试探评价过程,Agent选择一个动作用于环境,环境接受该动作后状态发生变化,同时产生一个强化信号(奖或惩)反馈给Agent,Agent根据强化信号和环境当…

记一次 .NET 某医疗住院系统 崩溃分析

一:背景 1. 讲故事 最近收到了两起程序崩溃的dump,查了下都是经典的 double free 造成的,蛮有意思,这里就抽一篇出来分享一下经验供后面的学习者避坑吧。 二:WinDbg 分析 1. 崩溃点在哪里 windbg 带了一个自动化分…

Ubuntu上搭建网站【建立数据隧道,降低开支】

上篇:Ubuntu搭建web站点并发布公网访问 目录 1.安装WordPress 2.创建WordPress数据库 3.安装相对URL插件 4.内网穿透将网站发布上线 1.命令行方式: 2.图形化操作方式 5.图书推荐 cpolar官网 1.安装WordPress 在前面的介绍中,我们为大…

Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化

前言 本文小新为大家带来 Sentinel规则持久化 相关知识,具体内容包括,Sentinel规则推送三种模式介绍,包括:原始模式,拉模式,推模式,并对基于Nacos配置中心控制台实现推送进行详尽介绍~ 不积跬步…

【K8S系列】Pod详解

目录 序言 1 前言 2 为什么需要pod 3 什么是Pod? 3.1 Pod的组成 3.2 Pod的用途 3.3 Pod的生命周期 3.4 Pod的特点 4 Pod的使用 5 结论 序言 任何一件事情,只要坚持六个月以上,你都可以看到质的飞跃。 今天学习一下K8s-Pod相关内容&…

SQL Server的页面(pages )和盘区(extents)体系结构

pages 和 extents 体系结构一、背景二、页面和盘区2.1、页面2.2、大行支持2.3、行溢出注意事项2.4、盘区(extents)三、管理扩展数据块分配和可用空间3.1、管理扩展数据块分配3.2、跟踪可用空间四、管理对象使用的空间五、追踪修改后的盘区总结一、背景 …

Spring Cloud Alibaba全家桶(九)——分布式事务组件Seata

前言 本文小新为大家带来 分布式事务组件Seata 相关知识,具体内容包括分布式事务简介(包括:事务简介,本地事务,分布式事务典型场景,分布式事务理论基础,分布式事务解决方案)&#xf…

PyTorch 之 基于经典网络架构训练图像分类模型

文章目录一、 模块简单介绍1. 数据预处理部分2. 网络模块设置3. 网络模型保存与测试二、数据读取与预处理操作1. 制作数据源2. 读取标签对应的实际名字3. 展示数据三、模型构建与实现1. 加载 models 中提供的模型,并且直接用训练的好权重当做初始化参数2. 参考 pyto…

可视化CNN和特征图

卷积神经网络(cnn)是一种神经网络,通常用于图像分类、目标检测和其他计算机视觉任务。CNN的关键组件之一是特征图,它是通过对图像应用卷积滤波器生成的输入图像的表示。 理解卷积层 1、卷积操作 卷积的概念是CNN操作的核心。卷积是一种数学运算&#x…

当深度学习遇上Web开发:Spring和OpenAI如何实现图片生成?

文章目录一、简介1. 什么是Spring和OpenAI2. 生成图像的意义和应用场景二、相关技术介绍1. 深度学习模型2. GAN模型3. TensorFlow框架四、简单的Spring应用1. 搭建Spring项目2. 添加相关依赖3. 编写简单的控制器五、OpenAI API1. 介绍OpenAI API2. 搭建OpenAI API环境3. 配置AP…

Pytorch实现GCN(基于Message Passing消息传递机制实现)

文章目录前言一、导入相关库二、加载Cora数据集三、定义GCN网络3.1 定义GCN层3.1.1 消息传递阶段(message)3.1.2 消息聚合阶段(aggregate)3.1.3 节点更新阶段(update)3.1.4 定义传播过程(propag…

AI时代来临,如何把握住文档处理及数据分析的机遇

AI时代来临,如何把握住文档处理及数据分析的机遇前言一、生成式人工智能与元宇宙二、面向图像文档的复杂结构建模研究三、大型语言模型的关键技术和实现ChatGPT 介绍ChatGPT的三个关键技术四、ChatGPT与文档处理未来总结前言 在3月18日,由中国图象图形协…

【CVPR 2023】FasterNet论文详解

论文名称:Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks 论文地址:https://arxiv.org/abs/2303.03667 作者发现由于效率低下的每秒浮点运算,每秒浮点运算的减少并不一定会导致类似水平的延迟减少。提出通过同时减少冗…

YOLOv2论文解读/总结

本章论文: YOLOv2论文(YOLO9000: Better, Faster, Stronger)(原文+解读/总结+翻译) 系列论文: YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客 前言 在YOLOv1推出一…