个人笔记本安装CUDA并配合Pytorch使用NVIDIA GPU训练神经网络的计算以及CPUvsGPU计算时间的测试代码

2024小白安装Pytorch-GPU版(Anaconda,CUDA,cuDNN讲解)

安装CUDA并使用PyTorch进行GPU加速的神经网络训练,需要遵循以下步骤:

1. 检查GPU兼容性

在开始之前,需要确认你的个人笔记本的GPU是否支持CUDA。可以通过NVIDIA官方网站查询CUDA兼容性。

2. 下载并安装CUDA Toolkit

  • 访问NVIDIA的官方网站下载适合你GPU和操作系统版本的CUDA Toolkit。
  • 选择适当的安装包,并按照提示完成安装。

3. 配置环境变量

安装完成后,需要配置环境变量以便系统可以找到CUDA。

  • 在Windows系统中,需要将CUDA的路径添加到系统环境变量Path中。
  • 在Linux系统中,需要将以下行添加到~/.bashrc~/.zshrc文件中:
    export PATH=/usr/local/cuda/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    

之后,运行source ~/.bashrc(或对应的shell配置文件)来更新当前会话。

4. 验证CUDA安装

通过运行nvcc --version命令来验证CUDA是否正确安装。

5. 安装cuDNN

  • 从NVIDIA官网下载与CUDA版本兼容的cuDNN。
  • 将下载的cuDNN文件解压并放置到CUDA Toolkit目录下。

6. 安装PyTorch

  • 访问PyTorch官网,根据你的系统和CUDA版本选择合适的安装命令。
  • 使用conda或pip安装PyTorch,确保选择带有cuda后缀的版本。
    例如,使用pip安装命令可能如下所示:
pip install torch torchvision torchaudio cudatoolkit=xx.x  # xx.x 是CUDA版本号

7. 验证PyTorch是否可以识别GPU

在Python中运行以下代码来验证PyTorch是否能够识别和使用GPU:

import torch
print(torch.cuda.is_available())

如果返回True,则表示安装成功。

8. 使用GPU进行训练

在编写PyTorch代码时,确保将你的模型和数据移动到GPU上。以下是一个简单的例子:

# 定义模型
model = YourModel().cuda()  # 将模型移至GPU
# 定义损失函数和优化器
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 训练数据
for data, target in train_loader:
    data, target = data.cuda(), target.cuda()  # 将数据移至GPU
    optimizer.zero_grad()
    output = model(data)
    loss = criterion(output, target)
    loss.backward()
    optimizer.step()

以上步骤概述了在个人笔记本上安装CUDA和PyTorch,并使用GPU进行神经网络训练的过程。每个步骤的详细说明和可能的问题解决方法,你可以在相应的官方网站找到。在安装和配置过程中,务必确保所有组件的版本兼容性。

测试CPU和GPU计算差异:
运行CPU vs GPU.py代码

import time
import torch

# 定义一个函数来测量时间
def measure_time(device, X):
    X = X.to(device)
    time_start = time.time()
    Z = torch.mm(X, X)
    time_end = time.time()
    return round((time_end - time_start) * 1000, 2), device

# 检查CUDA是否可用
if torch.cuda.is_available():
    gpu_device = 'cuda:0'
else:
    print("CUDA is not available. Using CPU instead.")
    # gpu_device = 'cpu'

# 计算量较大的任务
X_large = torch.rand((10000, 10000))
cpu_time_large, cpu_device = measure_time('cpu', X_large)
gpu_time_large, gpu_device = measure_time(gpu_device, X_large)
print(f'Large task - CPU time cost: {cpu_time_large}ms on {cpu_device}')
print(f'Large task - GPU time cost: {gpu_time_large}ms on {gpu_device}')

# 计算量很小的任务
X_small = torch.rand((5000, 5000))
cpu_time_small, cpu_device = measure_time('cpu', X_small)
gpu_time_small, gpu_device = measure_time(gpu_device, X_small)
print(f'Small task - CPU time cost: {cpu_time_small}ms on {cpu_device}')
print(f'Small task - GPU time cost: {gpu_time_small}ms on {gpu_device}')

个人笔记本运行结果

Large task - CPU time cost: 2216.92ms on cpu
Large task - GPU time cost: 15.62ms on cuda:0
Small task - CPU time cost: 297.88ms on cpu
Small task - GPU time cost: 1.64ms on cuda:0

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Node基本使用

1. 创建自定义全局指令 1.1 新建一个空的文件夹, 创建一个cli.js文件 1.2 在cli.js写入内容 /usr/bin/env就是让系统使用node来执行你的脚本文件。 #! /usr/bin/env node1.3 执行终端指令 // 在文件夹 node-project 的终端下执行指令npm init执行完后package.json结构如下,…

Python编程技巧:多变量赋值的优雅艺术

在Python编程的世界里,有许多令人惊叹的语法特性,而多变量赋值就像是一颗闪耀的明珠,它不仅让代码更优雅,还能提升程序的执行效率。今天我们就深入探讨这个看似简单却蕴含深意的编程技巧。 基础认识 传统的变量赋值方式&#xff…

Transformer架构笔记

Attention is All You Need. 3.Model Architecture 3.1 整体架构如图 3.2 Encoder与Decoder Encoder:由 N 6 N6 N6个相同的Block/Layer堆叠而成。每个Block有两个子层sub-layer:多头注意力和MLP(FFN,前馈神经网络)&…

网络安全简单入门与扫描

网络安全简单入门 内容大纲 策略制定安全工具其他 1、安全策略 1.1、安全三要素 要全面地认识一个安全问题,我们有很多种办法,但首先要理解安全问题的组成属性。前人通过无数实践,最后将安全的属性总结为安全三要素,简称CIA。 安全三要素是安全的基本组成元素,分别是机密性…

在WPF程序中实现PropertyGrid功能

使用C#开发过Windows Forms的都知道,在Windows Forms程序中,有一个PropertyGrid控件,可以用于显示对象的属性,在WPF中并没有默认提供此功能的控件,今天以一个简单的小例子,简述在WPF中借助WinForm的Propert…

大模型时代的具身智能系列专题(十四)

冯晨团队 冯晨是纽约大学的副教授。他对通过多学科使用启发研究实现机器人主动和协作感知和学习感兴趣,这些研究源自建筑、制造和运输领域。在纽约大学之前,冯晨是马萨诸塞州剑桥市三菱电机研究实验室 (MERL) 计算机视觉小组的研究科学家,专…

力扣-Hot100-栈【算法学习day.40】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

RT_Thread内核源码分析(三)——线程

目录 1. 线程结构 2. 线程创建 2.1 静态线程创建 2.2 动态线程创建 2.3 源码分析 2.4 线程内存结构 3. 线程状态 3.1 线程状态分类 3.2 就绪状态和运行态 3.3 阻塞/挂起状态 3.3.1 阻塞工况 3.4 关闭状态 3.4.1 线程关闭接口 3.4.2 静态线程关闭 3.4.3 动态线程关…

043 商品详情

文章目录 详情页数据表结构voSkuItemVo.javaSkuItemSaleAttrVo.javaAttrValueAndSkuIdVo.javaSpuAttrGroupVo.javaGroupAttrParamVo.java pom.xmlSkuSaleAttrValueDao.xmlSkuSaleAttrValueDao.javaAttrGroupDao.xmlAttrGroupServiceImpl.javaSkuInfoServiceImpl.javaSkuSaleAtt…

硬件知识 cadence16.6 原理图输出为pdf 网络名下划线偏移 (ORCAD)

1. cadence原理图输出为PDF网络名下划线偏移 生这种情况的原因 1. 设计的原理图图纸大小比正常的 A4图纸大。 2. 打印为PDF 的时候,打印机的设置有问题。 2.cadence原理图输出为 PDF网络名下划线偏移的情况 可以看到上图,网络名往上漂移。 3. 解决办法 …

Spring-boot3.4最新版整合swagger和Mybatis-plus

好家伙,今天终于开始用spring-boot3开始写项目了,以后要彻底告别1.x和2.x了,同样的jdk也来到了最低17的要求了,废话不多说直接开始 这是官方文档的要求jdk最低是17 maven最低是3.6 一. 构建工程,这一步就不需要给大家解释了吧 二. 整合Knife4j 1.大于 …

从零开始:如何使用第三方视频美颜SDK开发实时直播美颜平台

开发一个具有实时美颜功能的直播平台,能够显著提高用户体验和内容质量。而利用第三方视频美颜SDK可以大大简化开发过程,加快产品上市速度。本篇文章,小编将从零开始,详细讲解如何使用第三方视频美颜SDK开发一个实时直播美颜平台。…

ROS入门学习ONE

ros入门玩法1:控制小龟龟 终端1输入 sudo apt install ros-noetic-rqt-steering 新建终端2(快捷键CtrlAltT),打开控制台 roscore //启动ros系统 回到原终端 rosrun rosrun rqt_robot_steering rqt_robot_steering 新建终端3,…

shell脚本(二)

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

简单理解下基于 Redisson 库的分布式锁机制

目录 简单理解下基于 Redisson 库的分布式锁机制代码流程:方法的调用:具体锁的实现:riderBalance 方法:tryLock 方法(重载):tryLock 方法(核心实现): 简单理解…

小鹏汽车智慧材料数据库系统项目总成数据同步

1、定时任务处理 2、提供了接口 小鹏方面提供的推送的数据表结构: 这几个表总数为100多万,经过条件筛选过滤后大概2万多条数据 小鹏的人给的示例图: 界面: SQL: -- 查询车型 select bmm.md_material_id, bmm.material_num, bm…

LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))

【LetMeFly】3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n)) 力扣题目链接:https://leetcode.cn/problems/shortest-distance-after-road-addition-queries-ii/ 给你一个整数 n 和一个二维…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的,最近优化下无线网络,说新的设备用华为的,然后我是直到要部署的当天才知道用华为设备的,就很无语了,一点准备没有,以下为这次的实际操作记录吧&…

Fakelocation Server服务器/专业版 Windows11

前言:需要Windows11系统 Fakelocation开源文件系统需求 Windows11 | Fakelocation | 任务一 打开 PowerShell(以管理员身份)命令安装 Chocolatey Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProto…

C语言基础学习:抽象数据类型(ADT)

基础概念 抽象数据类型(ADT)是一种数据类型,它定义了一组数据以及可以在这组数据上执行的操作,但隐藏了数据的具体存储方式和实现细节。在C语言中,抽象数据类型(ADT)是一种非常重要的概念&…