python学习11-Pytorch环境安装与模型搭建

news2024/9/20 0:59:18

先查看下自己的电脑是否是英伟达显卡
在这里插入图片描述
在这里插入图片描述
如果不是就需要租用平台了,如 AutoDL算力云
https://www.autodl.com/home

CUDA

当涉及到深度学习和 Python 时,CUDA 是一个非常重要的概念,它是 NVIDIA 开发的并行计算平台和应用程序编程接口(API)。CUDA 可以用来加速深度学习任务,特别是神经网络的训练和推断,因为它允许在 NVIDIA GPU 上进行高效的并行计算。
以下是有关 CUDA 的详细解释:

什么是 CUDA?

CUDA(Compute Unified Device Architecture)是一种并行计算平台和编程模型,旨在利用 NVIDIA GPU(图形处理单元)的强大并行计算能力。它允许开发者使用 GPU 进行通用目的的高性能计算,而不仅仅是图形渲染。

  1. 为什么要使用 CUDA?
    使用 CUDA 有以下几个优点:
  • 并行计算: GPU 具有大量的处理单元和内存带宽,适用于处理大规模的并行计算任务,如深度学习的神经网络训练。
  • 加速深度学习: 深度学习中的大多数计算操作都可以受益于 CUDA 的并行性。因此,使用 CUDA 可以显著加速神经网络的训练和推断。
  • 大规模数据处理: 对于需要处理大量数据的任务,CUDA 可以加速数据处理和分析,例如图像处理、自然语言处理等。

使用 CUDA 进行深度学习

要在深度学习项目中使用 CUDA,您需要执行以下步骤:

  • 选择合适的 GPU: 首先,您需要选择适合您需求的 NVIDIA GPU。不同型号的 GPU 具有不同的计算能力和内存大小,因此您需要根据您的任务来选择。
  • 安装 CUDA 工具包和 cuDNN: 您需要安装 NVIDIA 的 CUDA 工具包和 cuDNN 库。CUDA 工具包包括编译器、运行时库和 GPU 驱动程序,cuDNN 是用于深度学习的 GPU 加速库。
  • 选择深度学习框架: 大多数流行的深度学习框架(如 TensorFlow 和 PyTorch)都支持 CUDA。您只需要确保您的框架安装正确,并配置为使用 GPU。
  • 编写 CUDA 加速的代码: 如果您希望进一步优化您的深度学习模型,可以编写 CUDA 内核(kernel)来执行特定的计算任务。这需要一些 CUDA 编程经验。
  • GPU 设备管理: 在使用 CUDA 时,您可以使用 NVIDIA 的 GPU 设备管理工具(例如 nvidia-smi)来监视 GPU 的利用率和性能,以确保任务正常运行。

CUDA 编程

如果您希望进一步深入了解 CUDA 编程,可以学习以下关键概念:

  • CUDA 核心思想: CUDA 编程的核心思想是将计算任务分解成许多线程块(thread block)和网格(grid),然后在 GPU 上并行执行这些线程。
  • CUDA C/C++ 编程: CUDA C/C++ 是一种用于编写 GPU 内核的编程语言。您可以学习如何编写 CUDA 内核,以便针对特定任务进行并行计算。
  • 共享内存和线程同步: 在 CUDA 中,共享内存用于线程之间的数据共享,线程同步用于协调线程的执行。理解这些概念对于编写高效的 CUDA 内核至关重要。
  • CUDA 库: 除了自定义 CUDA 内核,还可以使用各种 CUDA 库来执行常见的任务,如矩阵乘法、卷积等。
  • 性能优化: CUDA 编程还涉及到性能优化,包括选择合适的线程块大小、减少数据传输次数、使用共享内存等。
    要成为一名熟练的 CUDA 编程人员,通常需要深入学习和实践。CUDA 编程是一个广泛的领域,可以显著提高深度学习和其他科学计算任务的性能。如果您对深度学习和 GPU 加速感兴趣,学习 CUDA 编程是一个有价值的投资。

cuDNN

cuDNN(CUDA Deep Neural Network library)是由 NVIDIA 开发的深度神经网络(DNN)加速库。它是专门为深度学习任务而设计的,旨在充分利用 NVIDIA GPU 的并行计算能力,以加速神经网络的训练和推断过程。
cuDNN 提供了一组高性能的 GPU 加速函数和优化,用于常见的深度学习操作,如卷积、池化、归一化、全连接等。这些操作是深度神经网络中的基本构建块,因此通过在 GPU 上高效执行它们,cuDNN 可以显著提高深度学习模型的性能。
以下是 cuDNN 的一些关键特性和优点:

  1. 高性能计算: cuDNN 使用了一系列高度优化的算法和数据结构,以确保在 GPU 上执行深度学习操作时能够获得最佳性能。
  2. 硬件加速: cuDNN 充分利用了 NVIDIA GPU 的硬件功能,如深度核心(Tensor Cores)和 CUDA 核心,以实现高效的矩阵计算和卷积运算。
  3. 跨平台支持: cuDNN 支持多个操作系统和 GPU 架构,因此可以在不同的硬件平台上使用,包括桌面 GPU 和数据中心 GPU。
  4. 深度学习框架集成: 大多数流行的深度学习框架,如 TensorFlow、PyTorch 和 Caffe,都集成了 cuDNN,因此您可以轻松地在这些框架中使用 cuDNN 提供的功能。
  5. 简化开发过程: cuDNN 的存在使深度学习开发者能够更专注于模型的设计和训练,而无需过多关注底层的 GPU 加速细节。
    总之,cuDNN 是深度学习领域中的一个重要工具,它使深度学习模型的训练和推断过程更加高效,同时也提供了一些性能优化和便利性的功能,有助于加速深度学习应用的开发和部署。

Cuda和Cudnn 安装教程

Cuda和Cudnn 安装教程,需要先安装Cuda才能够使用安装GPU版本的PyTorch,本文详细介绍Cuda和Cudnn的安装步骤,环境配置和测试方法。笔者在Win10进行安装操作,Cuda采用版本10.1,Cudnn 采用版本v7.6.4.38。

Cuda 安装
首先需要确认你的电脑显卡已经安装好了驱动并且是支持Cuda的,从官网https://developer.nvidia.com/cuda-downloads下载,我选择的版本是cuda_10.1.243_426.00_win10.exe

在这里插入图片描述
安装的时候建议选择自定义而不是“精简”(从下面的英文解释可以看出,其实这里的精简写成完整应该更贴切,他会安装所有组件并覆盖现有驱动,然而我并不想安装全家桶,何况我的官方显卡驱动比他的新)。

在这里插入图片描述
如下图所示,我们只需选择CUDA项(默认是全选的),这一步之后,会询问这些组件的安装路径,可以直接使用C盘的默认位置,当然我们可以可以自己定义(请记住这些安装路径,后面配置环境变量需要用到)。
在这里插入图片描述
在这里插入图片描述

环境变量和测试

检查系统变量
在这里插入图片描述
在这里插入图片描述
添加环境变量后如下图所示:
在这里插入图片描述
可以通过如下指令测试安装和配置是否成功:

nvcc --version
nvcc -V

输出结果如下所示:
在这里插入图片描述
显示cuda版本号10.1 V10.1.243,说明安装成功!

Cudnn 安装

官网下载:https://developer.nvidia.com/rdp/cudnn-archive

在这里插入图片描述
解压文件夹,显示内容如下:
在这里插入图片描述
将解压文件夹cuda目录下的文件分别复制到cuda安装目录下的对应文件夹下面,如下所示:
在这里插入图片描述
恭喜你,安装完成!!!

Anaconda 安装

1、Anaconda官网下载:https://www.anaconda.com 按需要选择版本下载
在这里插入图片描述
2、路径根据自己实际选择,点击“Next”,直到安装完成
在这里插入图片描述
3、配置环境变量
进入系统环境变量点击 Path 添加如下路径(视自己安装路径情况而定):

E:\Anaconda
E:\Anaconda\Scripts
E:\Anaconda\Library\bin
E:\Anaconda\Library\mingw-w64\bin

4、测试是否安装成功
Win+R进入cmd,输入conda --version,显示如下则安装成功
在这里插入图片描述

Pytorch安装

(一)GPU版本安装
方法一
在线安装
1、打开Anaconda Powershell Prompt,输入conda info --envs,查看安装的环境

在这里插入图片描述
2、进入Pytorch官网:https://pytorch.org/,找到合适自己电脑的版本
https://download.pytorch.org/whl/torch/

在这里插入图片描述
3、复制Run this Command:conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia(视自己情况而定)到Anaconda Powershell Prompt 确认下载在这里插入图片描述

4、测试是否安装成功
在Anaconda Powershell Prompt依次输入

python
import torch
torch.__version__
torch.cuda.is_available()

显示如下即安装成功

在这里插入图片描述
Torch和Torchvision的版本对应
在这里插入图片描述
到Pytorch离线下载资源网站下载对应版本(CPU版本和GPU版本):https://download.pytorch.org/whl/torch_stable.html

在这里插入图片描述
下载好后复制并切换到Anaconda所在目录,使用“pip”命令安装
pip install “文件名"

在这里插入图片描述
在这里插入图片描述
测试是否安装成功
结果与在线安装测试结果相同
(二)CPU版本安装
参考博主:https://blog.csdn.net/weixin_44904136/article/details/123285884

添加清华源:
在cmd下执行如下语句

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/
conda config --set show_channel_urls yes
conda config --set ssl_verify false

在Anaconda安装文件下找到.condarc文件(一般在C盘用户目录下)

在这里插入图片描述
恢复默认源:
conda config --remove-key channels

Pytorch实现第一个案例

准备数据

Income1.csv

"","Education","Income"
"1",10,26.6588387834389
"2",10.4013377926421,27.3064353457772
"3",10.8428093645485,22.1324101716143
"4",11.2441471571906,21.1698405046065
"5",11.6454849498328,15.1926335164307
"6",12.0869565217391,26.3989510407284
"7",12.4882943143813,17.435306578572
"8",12.8896321070234,25.5078852305278
"9",13.2909698996656,36.884594694235
"10",13.7324414715719,39.666108747637
# 获取数据,使用Pandas库
import numpy as np
import pandas as pd
import torch

#读取csv
data = pd.read_csv('./datasets/Income1.csv')

data.head()

在这里插入图片描述

# print(data.Education,data.Income)
import matplotlib.pyplot as plt
#绘制散点,看看教程支出与收入之间的关系
plt.scatter(data.Education,data.Income)
# 设置x轴标签
plt.xlabel('Eduction')
# 设置y轴标签
plt.ylabel('Income')

plt.show()

在这里插入图片描述

#将pandas的数据转为pytorch的数据(张量)

# data.Education.to_numpy().reshape(-1,1)
X = torch.from_numpy(data.Education.to_numpy().reshape(-1, 1)).type(torch.FloatTensor)


# torch.from_numpy
Y = torch.from_numpy(data.Income.to_numpy().reshape(-1, 1)).type(torch.FloatTensor)


# 导入专门用于搭建神经网络的模型
from torch import nn

class EasyModel(nn.Module):
    #初始化模型,实现1层线性网络
    def __init__(self):
        #调用父类进行初始化
        super(EasyModel,self).__init__()
        #定义中间的一层线性层,输入的维度是1,输出的维度也是1
        self.linear = nn.Linear(in_features=1,out_features=1)
        
    #定义1个前向传播函数,告诉模型如何一层一层往下输出的逻辑
    def forward(self,inputs):
        #设置将输入的教育支出,输入到线形层
        logits = self.linear(inputs)
        return logits

#实例化1个模型,用于训练和预测
model = EasyModel()


#定义均方误差为损失函数
loss_fn = nn.MSELoss()
#定义优化器,设置模型参数进来,让优化器修改模型参数,使得误差最小。lr,学习率,调节学习速度快慢
opt = torch.optim.SGD(model.parameters(),lr=0.0001)

#训练

for epoch in range(5000):
    for x,y in zip(X,Y): # Python中的zip函数可以将多个可迭代对象打包成一个元组序列,常用于数据处理和数据分析中。zip函数的作用是将多个列表、元组或其他可迭代对象中对应的元素打包成一个元组,然后返回一个由这些元组组成的列表。
        #先让模型做预测
        y_pred = model(x)
        # 预测了,看看误差咋样,计算损失函数
        loss = loss_fn(y,y_pred)
        #复原,梯度归零
        opt.zero_grad()
        # 根据误差,倒推应该怎么修改参数,反向传播
        loss.backward()
        # 使用优化器,更新参数
        opt.step()

#预测结果
#detach用于前向传播计算
Y_pred = model(X).detach()
Y_pred = Y_pred.numpy()


#在绘制散掉图
plt.scatter(data.Education,data.Income,c='r',label='real data')
plt.scatter(data.Education,Y_pred,c='g',label='pred data')

# 设置x轴标签
plt.xlabel('Eduction')
# 设置y轴标签
plt.ylabel('Income')

plt.show()       

在这里插入图片描述

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

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

相关文章

【WiFi主要技术学习2】

WiFi协议学习2 WiFi SPEC理解频段信道带宽协商速率安全与加密WiFi主要技术理解BP直接序列扩频(Direct Sequence Spread Spectrum,DSSS)BPSKQPSK正交幅度调制(Quadrature Amplitude Modulation,QAM)互补码键控(Complementary Code Keying,CCK)正交频分复用(Orthogonal…

如何选择合适的JDK:功能、性能与适用场景的全面解析

如何选择合适的JDK:功能、性能与适用场景的全面解析 前言 在 Java 开发领域,开发者有众多的 JDK 选择,如 OpenJDK、GraalVM、Oracle JDK、Dragonwell、Kona、Bisheng、Corretto、Zulu、Liberica、SapMachine、Semeru、Temurin、Mandrel等。 …

YOLOv8改进 | Conv篇 | YOLOv8引入SAConv模块

1. SAConv介绍 1.1 摘要: 许多现代物体检测器通过使用三思而后行的机制表现出出色的性能。 在本文中,我们在目标检测的主干设计中探索了这种机制。 在宏观层面,我们提出了递归特征金字塔,它将特征金字塔网络的额外反馈连接合并到自下而上的骨干层中。 在微观层面,我们提出…

24数学建模国赛助攻中!!!(11——时间序列模型)

需要资料和助攻的建模宝子们可以加企鹅呢!!!!!具体方式在文章末尾 点击链接加入群聊获取完整版资料和助攻https://qm.qq.com/q/NGl6WD0Bky

基于微信小程序的挂号管理系统-web管理端

流量和预约挂号数可视化功能 系统具备人流量和预约挂号数的可视化功能,能够实时展示各项数据,通过图表等形式直观呈现。这有助于医疗机构快速了解服务状况,优化资源配置,提升运营效率,为患者提供更为便捷的挂号服务。 …

每天五分钟计算机视觉:Siamese深度神经网络模型和FaceNet的关系

本文重点 在前面的课程中,我们学习了Siamese深度神经网络模型和FaceNet,二者都可以完成人脸识别任务,本文进行整理学习,理清二者的区别和联系。 基本概念与原理 Siamese深度神经网络模型 Siamese网络,又称孪生网络,由两个结构相同且权重共享的神经网络组成。这两个网络分…

[引人深思]博彩用户真的赢了吗?——多维度揭示赌博危害

1.项目背景 博彩业,作为全球经济中一个庞大而复杂的行业,吸引了无数用户参与其中,然而,在巨大的利益诱惑背后,博彩业对个人和社会造成的潜在危害却不容忽视,尽管博彩活动常被包装为“娱乐”或“休闲活动”…

10款文档管理系统,助力降本增效

比较好用的 10 款文档管理系统推荐:PingCode、Worktile、语雀、联想Filez企业网盘、360亿方云、DocuPhase 、M-Files 、LogicalDOC、Revver、Box。 在现代企业环境中,管理大量文档和数据往往让人头疼。不仅需要维护信息的更新和可访问性,还要…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(六)- 参考标准

一、引言: 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划,是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析(一&#xff…

【Godot4.3】绘图函数的类化封装尝试——CanvasShape

概述 这是2024年7月份的一项工作,在研究外XML和SVG解析与生成过后,想到可以将自己写的绘图函数库ShapePoints拆分为图形类,于是就有了CanvasShape类。它包含了从填充、轮廓、阴影、虚线、顶点和中心点绘制的全部要素。只需要给定points属性和…

【微处理器系统原理与应用设计】微处理器的基本架构之组成原理和系统结构

本文首先讲解微处理器的重要组成部分,之后会穿插数电的知识进行相关功能电路的设计,以达到从理论到实践的效果。 一. 组成原理 1. 运算器 ALU是微处理器中执行所有算术和逻辑操作的部件。主要的功能是加减乘除,与或非异或比较等。&#xff…

Vue3、ElementPlus速通

Vue基础 Vue介绍 原生的JS在程序开发的过程中书写起来是十分麻烦的&#xff0c;因此很多的前端的框架(半成品)就应运而生了&#xff0c;目前比较知名的是下面三个 Vue是一个用于构建用户界面的渐进式框架&#xff0c;目前企业中流行的版本有两个 入门案例 <!DOCTYPE html…

C++笔记14•二叉树之二叉搜索树•

二叉搜索树 1.二叉搜索树 概念&#xff1a; 二叉搜索树又称二叉排序树也叫二叉查找树&#xff0c;它可以是一棵空树。 二叉树具有以下性质: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都…

小小论坛系统测试报告

1.项目背景 论坛博客系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;同时将其部署到云服务器上。前端主要有四个页面构成&#xff1a;登录页、列表页、详情页以及编辑页&#xff0c;以上模拟实现了简单的论坛系统。其结合后端将支持…

【Bigtop】Ambari2.8.0编译及安装

Ambari2.8.0编译及安装 Ambari2.8.0编译及安装编译Ambari编译Ambari-metrics搭建Ambari镜像准备 Ambari2.8.0编译及安装 编译Ambari 安装必要工具&#xff1a; yum -y install gcc-c git psutils python-devel rpm-build 克隆仓库并切换到2.8.0-rc1分支 git checkout relea…

Vmware扩容空间不见的问题

很多同志在使用Vmware的时候&#xff0c;刚开始分配的磁盘空间过小&#xff0c;后面扩容的时候&#xff0c;扩容是成功了&#xff0c;但是进入虚拟机还是之前的空间大小&#xff0c;我来给你介绍怎么找到扩容的部分容量&#xff1b; 1、进入虚拟机&#xff0c; 左下角搜索“创…

人工智能和机器学习5 (复旦大学计算机科学与技术实践工作站)语言模型相关的技术和应用、通过OpenAI库,调用千问大模型,并进行反复询问等功能加强

前言 在这个日新月异的AI时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术正以前所未有的速度改变着我们的生活方式和工作模式。作为这一领域的佼佼者&#xff0c;OpenAI不仅以其强大的GPT系列模型引领风骚&#xff0c;还通过其开放的API接口&#xff0c;让全球开…

贪心算法例题—最短路径

第一个空&#xff0c;从题意可以知道&#xff0c;每次选择最短路线&#xff0c;也就是说每次选择最优选择&#xff0c;很明显就是贪心算法 第二个空&#xff0c;第一次从n个路线选择最短的&#xff0c;接下来每次都是从n-1个路线中选择最短的&#xff0c;因此每次运算次数是n^…

字符编码简介

目录 1. ASCLL 2. GB2312 3. GBK/gbk 4. GB18030 5. Unicode 6. 总结 1. ASCLL 在计算机刚开始被美国人发明的时候&#xff0c;需要将字符存储到计算机进行运算或打印&#xff0c;于是选取了95 个可见字符&#xff08;数字0-9&#xff0c;英文字母&#xff0c;标点符号&…

时序约束进阶二:set_max_time_borrow详解

目录 一、前言 二、set_max_time_borrow 2.1 工程设计 2.2 无set_max_time_borrow 2.3 set_max_time_borrow约束值偏小 2.4 set_max_time_borrow约束值偏大 2.5 hold路径 2.6 setup不违例 三、总结 四、参考资料 一、前言 ​Set_maximum_time_borrow约束是设置锁存器…