为什么深度学习和神经网络要使用 GPU?

news2025/1/5 20:55:53

为什么深度学习和神经网络要使用 GPU?

本篇文章的目标是帮助初学者了解 CUDA 是什么,以及它如何与 PyTorch 配合使用,更重要的是,我们为何在神经网络编程中使用 GPU。

图形处理单元 (GPU)

要了解 CUDA,我们需要对图形处理单元 (GPU) 有一定的了解。GPU 是一种擅长处理 专门化 计算的处理器。

这与中央处理单元 (CPU) 形成对比,CPU 是一种擅长处理 通用 计算的处理器。CPU 是为我们的电子设备上大多数典型计算提供动力的处理器。

GPU 可以比 CPU 快得多,但并非总是如此。GPU 相对于 CPU 的速度取决于正在执行的计算类型。最适合 GPU 的计算类型是能够 并行 进行的计算。

并行计算

并行计算是一种将特定计算分解为可以同时进行的独立较小计算的计算类型。然后将得到的计算结果重新组合或同步,以形成原始较大计算的结果。

img

一个较大任务可以分解为的任务数量取决于特定硬件上包含的内核数量。内核是实际在给定处理器内进行计算的单元,CPU 通常有四、八或十六个内核,而 GPU 可能有数千个内核。

还有其他一些技术规格也很重要,但本描述旨在传达一般概念。

有了这些基础知识,我们可以得出结论,使用 GPU 进行并行计算,并且最适合使用 GPU 解决的任务是能够并行完成的任务。如果计算可以并行完成,我们就可以通过并行编程方法和 GPU 加速我们的计算。

神经网络是令人尴尬的并行

现在让我们关注神经网络,看看为何深度学习如此大量地使用 GPU。我们刚刚了解到 GPU 适合进行并行计算,而这一事实正是深度学习使用它们的原因。神经网络是 令人尴尬的并行

在并行计算中,一个 令人尴尬的并行 任务是指几乎不需要将整体任务分解为一组可以并行计算的较小任务。

令人尴尬的并行任务是那些很容易看出一组较小任务彼此独立的任务。

img

神经网络之所以令人尴尬的并行,原因就在于此。我们使用神经网络进行的许多计算可以很容易地分解为较小的计算,使得一组较小的计算彼此不依赖。一个这样的例子是卷积。

卷积示例

让我们来看一个示例,卷积操作:

img

这个动画展示了没有数字的卷积过程。我们在底部有一个蓝色的输入通道。一个在底部阴影的卷积滤波器在输入通道上滑动,以及一个绿色的输出通道:

  • 蓝色(底部) - 输入通道
  • 阴影(在蓝色上方) - 3 x 3​ 卷积滤波器
  • 绿色(顶部) - 输出通道

对于蓝色输入通道上的每个位置,3 x 3​ 滤波器都会进行一次计算,将蓝色输入通道的阴影部分映射到绿色输出通道的相应阴影部分。

在动画中,这些计算是依次一个接一个地进行的。然而,每次计算都与其他计算独立,这意味着没有计算依赖于其他任何计算的结果。

因此,所有这些独立的计算都可以在 GPU 上并行进行,并产生整体的输出通道。

这使我们能够看到,通过使用并行编程方法和 GPU,可以加速卷积操作。

Nvidia 硬件 (GPU) 和软件 (CUDA)

这就是 CUDA 发挥作用的地方。Nvidia 是一家设计 GPU 的技术公司,他们创建了 CUDA 作为一个软件平台,与他们的 GPU 硬件配合使用,使开发人员更容易构建利用 Nvidia GPU 并行处理能力加速计算的软件。

img

Nvidia GPU 是实现并行计算的硬件,而 CUDA 是为开发人员提供 API 的软件层。

因此,你可能已经猜到,要使用 CUDA,需要一个 Nvidia GPU,CUDA 可以从 Nvidia 的网站免费下载和安装。

开发人员通过下载 CUDA 工具包来使用 CUDA。工具包中包含专门的库,如 cuDNN,CUDA 深度神经网络库。

img

PyTorch 内置 CUDA

使用 PyTorch 或任何其他神经网络 API 的一个好处是并行性已经内置在 API 中。这意味着作为神经网络程序员,我们可以更多地专注于构建神经网络,而不是性能问题。

对于 PyTorch 来说,CUDA 从一开始就内置其中。不需要额外下载。我们只需要有一个支持的 Nvidia GPU,就可以使用 PyTorch 利用 CUDA。我们不需要直接了解如何使用 CUDA API。

当然,如果我们想在 PyTorch 核心开发团队工作或编写 PyTorch 扩展,那么直接了解如何使用 CUDA 可能会很有用。

毕竟,PyTorch 是用所有这些编写的:

  • Python
  • C++
  • CUDA

在 PyTorch 中使用 CUDA

在 PyTorch 中利用 CUDA 非常容易。如果我们希望某个特定的计算在 GPU 上执行,我们可以通过在数据结构 (张量) 上调用 cuda()​ 来指示 PyTorch 这样做。

假设我们有以下代码:

> t = torch.tensor([1,2,3])
> t
tensor([1, 2, 3])

以这种方式创建的张量对象默认在 CPU 上。因此,使用这个张量对象进行的任何操作都将在 CPU 上执行。

现在,要将张量移动到 GPU 上,我们只需编写:

> t = t.cuda()
> t
tensor([1, 2, 3], device='cuda:0')

这种能力使 PyTorch 非常灵活,因为计算可以选择性地在 CPU 或 GPU 上执行。

GPU 可能比 CPU 慢

我们说我们可以选择性地在 GPU 或 CPU 上运行我们的计算,但为何不将 每个 计算都运行在 GPU 上呢?

GPU 不是比 CPU 快吗?

答案是 GPU 只对特定 (专门化) 任务更快。我们可能会遇到的一个问题是瓶颈,这会降低我们的性能。例如,将数据从 CPU 移动到 GPU 是代价高昂的,所以在这种情况下,如果计算任务很简单,整体性能可能会更慢。

将相对较小的计算任务移动到 GPU 上不会让我们加速很多,实际上可能会让我们变慢。记住,GPU 适合将任务分解为许多较小任务,如果计算任务已经很小,我们将不会通过将任务移动到 GPU 上获得太多好处。

因此,通常在刚开始时只使用 CPU 是可以接受的,随着我们解决更大更复杂的问题,开始更频繁地使用 GPU。

GPGPU 计算

起初,使用 GPU 加速的主要任务是计算机图形,因此得名图形处理单元,但在近年来,出现了许多其他种类的并行任务。我们已经看到的一个这样的任务是深度学习。

深度学习以及许多其他使用并行编程技术的科学计算任务,正在导致一种新的编程模型的出现,称为 GPGPU 或通用 GPU 计算。

GPGPU 计算现在更常见地仅称为 GPU 计算或加速计算,因为现在在 GPU 上执行各种任务变得越来越普遍。

Nvidia 在这个领域一直是先驱。Nvidia 的 CEO 黄仁勋很早就设想了 GPU 计算,这就是 CUDA 在大约十年前被创建的原因。

尽管 CUDA 已经存在很长时间了,但它现在才真正开始腾飞,Nvidia 直到目前为止在 CUDA 上的工作是 Nvidia 在深度学习 GPU 计算方面处于领先地位的原因。

当我们听到黄仁勋谈论 GPU 计算栈时,他指的是 GPU 作为底部的硬件,CUDA 作为 GPU 顶部的软件架构,最后是像 cuDNN 这样的库位于 CUDA 顶部。

这个 GPU 计算栈支持在芯片上进行通用计算能力,而芯片本身是非常专门化的。我们经常在计算机科学中看到像这样的栈,因为技术是分层构建的,就像神经网络一样。

位于 CUDA 和 cuDNN 顶部的是 PyTorch,这是我们将会工作的框架,最终支持顶部的应用程序。

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

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

相关文章

工厂模式与抽象工厂模式在Unity中的实际应用案例

一、实验目的 实践工厂模式和抽象工厂模式的实际应用。 创建一个小型的游戏场景,通过应用这些设计模式提升游戏的趣味性和可扩展性。 掌握在复杂场景中管理和使用不同类型的对象。 比较在实际游戏开发中不同设计模式的实际效果和应用场景。 学习如何进行简单的性…

jrc水体分类对水体二值掩码修正

使用deepwatermap生成的水体二值掩码中有部分区域由于被云挡住无法识别,造成水体不连续是使用jrc离线数据进行修正,jrc数据下载连接如下:https://global-surface-water.appspot.com/download 选择指定区域的数据集合下载如图: 使…

计算机网络 (20)高速以太网

一、发展背景 随着计算机技术和网络应用的不断发展,传统的以太网速率已逐渐无法满足日益增长的带宽需求。因此,高速以太网应运而生,它以提高数据传输速率为主要目标,不断推动着以太网技术的发展。 二、技术特点 高速传输&#xff…

基于SpringBoot的校园二手交易平台的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

2024年中国新能源汽车用车发展怎么样 PaperGPT(二)

用车趋势深入分析 接上文,2024年中国新能源汽车用车发展怎么样 PaperGPT(一)-CSDN博客本文将继续深入探讨新能源汽车的用车强度、充电行为以及充电设施的现状。 用车强度 月均行驶里程:2024年纯电车辆月均行驶超过1500公里&…

antd-vue - - - - - a-date-picker限制选择范围

antd-vue - - - - - a-date-picker限制选择范围 1. 效果展示2. 代码展示 1. 效果展示 如图&#xff1a;限制选择范围为 今年 & 去年 的 月份. 2. 代码展示 <template><a-date-picker:disabledDate"disabledDate"picker"month"/> &l…

滑动窗口、流量控制和拥塞控制

1. 确认应答机制 确认应答机制是计算机网络中&#xff0c;用于确保数据可靠传输的一种方法。 它通过发送 ACK 数据段来通知对方&#xff0c;每一个 ACK 数据段都有一个确认序号&#xff0c;表明&#xff1a; 确认序号之前的所有数据都已被接收&#xff0c;接下来从确认序号开…

TCP粘/拆包----自定义消息协议

今天是2024年12月31日&#xff0c;今年的最后一天&#xff0c;希望所有的努力在新的一年会有回报。❀ 无路可退&#xff0c;放弃很难&#xff0c;坚持很酷 TCP传输 是一种面向二进制的&#xff0c;流的传输。在传输过程中最大的问题是消息之间的边界不明确。而在服务端主要的…

前端,npm install安装依赖卡在sill idealTree buildDeps(设置淘宝依赖)

输入npm i后&#xff0c;一直卡在sill idealTree buildDeps&#xff0c;一动不动 cnpm可以安装成功&#xff0c;但使用cnpm不会生成package-lock.json文件 设置淘宝依赖&#xff0c;依然卡住&#xff0c;挂梯子也不行 解决方法&#xff1a; // 取消ssl验证 set strict-ssl …

【有作图代码】Highway Network与ResNet:skip connection如何解决深层网络欠拟合问题

【有作图代码】Highway Network与ResNet&#xff1a;skip connection如何解决深层网络欠拟合问题 关键词&#xff1a; #Highway Network #ResNet #skip connection #深层网络 #欠拟合问题 具体实例与推演 假设我们有一个深层神经网络&#xff0c;其层数为L&#xff0c;每一…

目标检测入门指南:从原理到实践

目录 1. 数据准备与预处理 2. 模型架构设计 2.1 特征提取网络原理 2.2 区域提议网络(RPN)原理 2.3 特征金字塔网络(FPN)原理 2.4 边界框回归原理 2.5 非极大值抑制(NMS)原理 2.6 多尺度训练与测试原理 2.7 损失函数设计原理 3. 损失函数设计 4. 训练策略优化 5. 后…

搭建开源版Ceph分布式存储

系统&#xff1a;Rocky8.6 三台2H4G 三块10G的硬盘的虚拟机 node1 192.168.2.101 node2 192.168.2.102 node3 192.168.2.103 三台虚拟机环境准备 1、配置主机名和IP的映射关系 2、关闭selinux和firewalld防火墙 3、配置时间同步且所有节点chronyd服务开机自启 1、配置主机名和…

租用服务器还是服务器托管:哪种方案更适合您?

随着企业对网络服务质量要求的不断提高&#xff0c;租用服务器和服务器托管是两种常见的选择&#xff0c;各自具备独特的优势和适用场景。这篇文章将从多个维度对这两种方案进行详细分析&#xff0c;帮助大家进行对比选择。 租用服务器的优劣势分析 优点 无需大额初始投入 租用…

LDD3学习6--Scull的变种

1 整体介绍 之前在LDD3学习1里面就提过scull的变种&#xff0c;LDD学习1--启程-CSDN博客&#xff0c;大概的变种有这些&#xff1a; 名称全名说明对应章节scullSimple Character Utility for Loading Localities基础版本3scullcScull with Slab cache使用基于slab高速缓存8.2.…

设计模式の状态策略责任链模式

文章目录 前言一、状态模式二、策略模式三、责任链模式 前言 本篇是关于设计模式中的状态模式、策略模式、以及责任链模式的学习笔记。 一、状态模式 状态模式是一种行为设计模式&#xff0c;核心思想在于&#xff0c;使某个对象在其内部状态改变时&#xff0c;改变该对象的行为…

【网络协议】路由信息协议 (RIP)

未经许可&#xff0c;不得转载。 路由信息协议&#xff08;Routing Information Protocol&#xff0c;简称 RIP&#xff09;是一种使用跳数&#xff08;hop count&#xff09;作为路由度量标准的路由协议&#xff0c;用于确定源网络和目标网络之间的最佳路径。 文章目录 什么是…

linux下安装达梦数据库v8详解

目录 操作系统、数据库 1、下载达梦数据库 2、安装前准备 2.1、建立数据库用户和组 2.2、修改文件打开最大数 2.3、挂载镜像 2.4、新建安装目录 3、数据库安装 4、配置环境变量 5、初始化数据库实例 6、注册服务 7、使用数据库 8、卸载数据库 9、多实例管理 10、…

小程序租赁系统的优势与应用探索

内容概要 小程序租赁系统&#xff0c;听起来很高大上&#xff0c;但实际上它比你想象的要实用得多&#xff01;设想一下&#xff0c;几乎所有的租赁需求都能通过手机轻松解决。这种系统的便捷性体现在让用户随时随地都能发起租赁请求&#xff0c;而不再受制于传统繁琐的手续。…

(leetcode算法题)​122. 买卖股票的最佳时机 II​ 和 123. 买卖股票的最佳时机 III

这两个题都可以进行转化&#xff0c;转换成等价问题求解 对于122的等价转换 求出所有能够赚钱的区间&#xff0c;这些区间满足一下特点 1. 首尾相接&#xff0c; 2. 区间末尾的值大于区间开头的值 3. 每个区间尽可能的小 新的问题只要用贪心的思想就能求得问题的解 只要求出上…

oceanbase集群访问异常问题处理

1.报错现象 2.问题排查 检查obproxy状态发现为不可用状态 重启obproxy 依次重启Obproxy集群 观察任务状态 重启完成 Obproxy状态正常 3.验证登录 登录成功