您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

时间:2023-11-17 11:39:26  来源:CSDN  作者:

随着传统的顺序算法到日益流行的并行算法,GPU 将成为加速复杂计算不可或缺的工具。在 AI 和机器学习任务等具有海量数据集和复杂的神经网络的架构中,GPU 的并行处理能力具有很大的优势。本文将深入探讨学习。

原文链接:https://journal.hexmos.com/gpu-survival-toolkit/

作者 | Rijul Rajesh译者| 弯月

责编 | 夏萌

出品 | CSDN(ID:CSDNnews)

为什么仅有 CPU 的知识还不够

在如今的 AI 时代,大多数开发人员接受过 CPU 相关知识的培训。这些知识已成为教学内容的一部分,因此一般我们都会以面向 CPU 的方式思考和解决问题。

然而,CPU 的问题在于它们依赖于顺序架构。在当今世界,我们依赖于大量并行任务,而 CPU 并不适合这些情况。

开发人员面临的问题包括:

执行并行任务

传统的 CPU 是线性运行的,一次执行一条指令。有这种限制是因为 CPU 通常拥有若干针对单线程性能进行过优化的强大核心。

在面对多个任务时,CPU 会分配资源来依次处理每个任务,即顺序执行指令。在需要同时关注大量任务的情况下,这种方法会变得效率低下。

虽然我们可以通过多线程等技术来提高 CPU 的性能,但其基本设计理念优先考虑的是顺序执行。

高效运行 AI 模型

AI模型采用 Transformer 等先进架构,利用并行处理来提高性能。与顺序运行的旧式循环神经网络 (RNN)不同,GPT 等现代Transformer 可以同时处理多个单词,从而提高训练的效率和能力。因为当我们并行训练时,就可以得到更大的模型,而更大的模型会生成更好的输出。

并行性的概念超越了自然语言处理,扩展到了图像识别等其他领域。例如,图像识别架构 Ale.NET 可以同时处理图像的不同部分,展现出了并行处理的强大功能,从而实现了准确的模式识别。

然而,以单线程性能为重心设计的 CPU 很难充分发挥并行处理的潜力。它们无法有效地分配和执行复杂的 AI 模型所需的大量并行计算。

因此,GPU 的开发变得越来越普遍,为的是满足 AI 应用程序中并行处理的特定需求,从而实现更高的效率和更快的计算。

如何利用 GPU 驱动开发解决这些问题

GPU 核心的大规模并行性

与 CPU 的核心相比,工程师们设计的 GPU 具有更小、高度专业化的核心。这种架构允许 GPU 同时执行多个并行任务。

GPU中的大量核心非常适合依赖于并行性的工作负载,例如图形渲染和复杂的数学计算。

在本文中,我们将演示如何利用 GPU 的并行性来缩短完成复杂的任务所需的时间。

AI 模型中使用的并行性

AI模型,特别是基于 TensorFlow 等深度学习框架构建的模型,展现出了高度的并行性。神经网络的训练涉及大量矩阵运算,而 GPU 凭借其庞大的核心数量,能够并行化这些运算。TensorFlow 以及其他流行的深度学习框架都进行了优化,能够利用 GPU 的能力来加速模型的训练和推理。

在本文中,我们将展示如何利用 GPU 的强大功能来训练神经网络。

CPU与 GPU 有何不同?CPU

顺序架构

中央处理单元(CPU)的设计重心是顺序处理。它们擅长线性执行一组指令。

CPU针对需要高单线程性能的任务进行了优化,例如

  • 通用计算
  • 系统操作
  • 处理涉及条件分支的复杂算法

处理并行任务的核心数量有限

CPU的核心数量较少,消费级的处理器通常有 2~16个核心。每个核心都能够独立处理自己的指令集。

GPU

并行架构

图形处理单元(GPU)采用并行架构设计,能够高效地执行并行处理任务。

适合于:

  • 渲染图形
  • 执行复杂的数学计算
  • 运行可并行的算法

GPU通过将多个任务分解为更小的并行子任务来同时处理多个任务。

数千个用于并行任务的核心

与 CPU 不同,GPU 拥有大量核心,通常高达数千个。这些核心组织成了流式多处理器(SM)或类似的结构。

丰富的核心使 GPU 能够同时处理大量数据,非常适合并行任务,例如图像和视频处理、深度学习和科学模拟等。

AWS GPU 实例:初学者指南

Amazon Web Services(AWS)提供各种用于机器学习等任务的 GPU 实例。

以下是不同类型的 AWS GPU 实例及其用例:

通用 GPU 实例

  • P3 和 P4 实例作为多功能通用 GPU 实例,非常适合各种工作负载。
  • 其中包括机器学习训练和推理、图像处理和视频编码。它们的各方面能力都很平衡,因此成为了各种计算任务的可靠选择。
  • 价格:p3.2xlarge实例的费用为每小时 3.06 美元。
  • 提供 1 个 16 GB GPU 内存的 NVIDIA Tesla V100 GPU。

推理优化 GPU 实例

  • 推理指的是通过训练好的 AI 模型运行实时数据以进行预测或解决任务的过程。
  • P5 和 Inf1 实例专门针对机器学习推理,在十分注重低延迟和成本的场合中有着出色表现。
  • 价格:p5.48xlarge实例的费用为每小时 98.32 美元。
  • 提供 8 个 NVIDIA H100 GPU,每个 GPU 80 GB 内存,共计 640 GB 显存。

图形优化 GPU 实例

  • G4 实例主要用于处理图形密集型任务。
  • 视频游戏开发人员可以使用 G4 实例来渲染视频游戏的 3D 图形。
  • 价格:g4dn.xlarge的费用为每小时 0.526 美元。
  • 提供 1 个 16 GB 内存的 NVIDIA T4 GPU。

托管 GPU 实例

  • Amazon SageMaker是一项机器学习托管服务。提供支持各种 GPU 实例的访问,包括 P3、P4 和 P5 实例。
  • 对于希望接触机器学习,同时不想操心底层基础设施管理的组织来说,SageMaker 是一个不错的选择。
  • 价格:https://aws.amazon.com/sagemaker/pricing/?ref=journal.hexmos.com

使用 Nvidia 的 CUDA 进行GPU 驱动开发CUDA是什么?

CUDA是一款 NVIDIA 开发的并行计算平台和编程模型,可帮助开发人员利用 GPU 加速器的强大功能来提高应用程序的速度。

下面,我们将使用 CUDA 来展示一个示例。

设置 CUDA

你可以按照以下步骤操作,在计算机上设置 CUDA。

  • 下载CUDA(https://developer.nvidia.com/cuda-downloads?ref=journal.hexmos.com)
  • 通过上面的链接,下载基本的安装程序以及驱动程序安装程序。
  • 打开主文件夹中的.bashrc,将以下内容添加到文件中: export PATH="/usr/local/cuda-12.3/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH"
  • 执行以下命令 sudo apt-get install cuda-toolkit sudo apt-get install nvidia-gds
  • 重启系统。
基本命令

在安装好 CUDA 后,你可以尝试以下命令。

LSPCI | grep VGA

此命令可识别并列出系统中的 GPU。

nvidia-smi

此命令为 NVIDIA System Management Interface(NVIDIA 系统管理界面)的缩写,可提供系统中有关 NVIDIA GPU 的详细信息,包括利用率、温度、内存使用情况等。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

sudo lshw -C display

此命令可提供系统中有关显示控制器(包括显卡)的详细信息。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

inxi -G

此命令可提供有关图形子系统的信息,包括有关 GPU 和显示器的详细信息。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

sudo hwinfo --gfxcard

此命令可提供系统中有关显卡的详细信息。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

使用 CUDA 框架

下面,我们来展示 CUDA 的一些具体功能。

数组加法问题

数组加法问题很适合演示 GPU 并行化。

考虑以下数组:

  • 数组 A = [1,2,3,4,5,6]
  • 数组 B = [7,8,9,10,11,12]
  • 我们需要计算每个元素之和,并存储在数组C中。
  • 即 C = [1+7,2+8,3+9,4+10,5+11,6+12] = [8,10,12,14,16,18]

如果由 CPU 来执行整个操作,则代码如下:

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

前一个循环遍历数组的每个元素,并依次执行加法。当需要处理大量数字时,这种方法就会由于其顺序执行的性质而变得缓慢。

为了克服这个限制,GPU 提供了一种解决方案:并行化加法运算。不同于依次执行运算的 CPU,GPU 可以同时执行多项加法。

例如,运算 1+7、2+8、3+9、4+10、5+11 和 6+12 可以借助 GPU 并行化同时执行。

利用 CUDA,实现并行加法的代码如下:

我们将使用内核文件(.cu)进行演示。

我们来逐行讲解代码。

  • __global__ 表明该函数是一个内核函数,将在 GPU 上调用。
  • vectorAdd 接受三个整数指针(a、b 和 c)作为参数,代表相加的向量。
  • threadIdx.x 获取当前线程的索引(在一维网格中)。
  • 向量 a 和 b 的相应元素之和存储在向量 c 中。

下面,我们来看看 main 函数。

创建指针 cudaA、cudaB 和 cudaC,指向 GPU 上的内存。

我们使用 cudaMalloc,为向量 cudaA、cudaB 和 cudaC 分配 GPU上的内存。

使用 cudaMemcpy 将向量 a 和b 的内容从主机复制到 GPU。

使用一个块和多个(数量等于向量大小)线程调用内核函数 vectorAdd。

将结果向量 cudaC 从 GPU 复制回主机。

然后就可以正常输出结果了:

我们使用 nvcc 命令执行这段代码。

输出如下:

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

完整的代码,请参见这里(https://Github.com/RijulTP/GPUToolkit/tree/main/array-addition?ref=journal.hexmos.com)。

使用 GPU 优化 Python/ target=_blank class=infotextkey>Python 中的图像生成

下面,我们来探讨如何使用 GPU 处理来优化性能密集型任务,例如图像生成。

曼德博集合是一种数学结构,可根据指定方程中特定数字的行为形成复杂的视觉模式。生成这种集合是一项资源密集型操作。

通过下面的代码片段,你可以了解到使用 CPU 处理生成曼德博集合的传统方法,该方法的速度很慢。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

上面的代码生成结果需要耗费 4.07 秒。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

为了提高速度,我们可以通过 Numba 库利用 GPU 的并行化。具体方法如下。

首先,我们导入 Numba 库的即时编译、用于 GPU 加速的 CUDA 以及其他实用程序。

@jit指示 Numba 执行即时编译,将 Python 代码转换为机器代码,以提高执行速度。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

  • mandel_gpu 是使用cuda.jit 创建的 mandel 函数的 GPU 兼容版本。它可以将 mandel 的逻辑卸载到 GPU。
  • 为此,我们需要使用@cuda.jit,并指定函数参数的数据类型(f8 表示浮点数,uint32 表示无符号整数)。
  • device=True 参数表示该函数将在GPU 上运行。

根据定义,mandel_kernel 将在 CUDA GPU 上执行。负责跨 GPU 线程并行生成曼德博集合。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

接下来,我们可以在 create_fractal_gpu 函数中使用 GPU 加速的曼德博集合生成。create_fractal_gpu 函数需要分配 GPU 内存,启动 GPU 内核 (mandel_kernel),并将结果复制回 CPU。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

上述代码只需 0.0046 秒内就能执行完成。比之前的 CPU 的代码要快许多。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

完整的代码,请参见这里(https://github.com/RijulTP/GPUToolkit/tree/main/mandelbrot?ref=journal.hexmos.com)。

使用 GPU 训练区分猫狗的神经网络

GPU在 AI 领域的应用是如今的热门话题之一,出于演示的目的,下面我们来创建一个用于区分猫和狗神经网络。

准备工作

  • CUDA
  • 安装Tensorflow:pip install tensorflow[and-cuda]
  • 我们将使用kaggle 的猫狗数据集。
  • 下载完成后,解压,将训练文件夹中的猫狗图片整理到不同的子文件夹,如下所示:

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

导入库:

  • pandas 和 numpy:用于操作数据。
  • Sequential:用于创建神经网络中叠放的线性层。
  • Convolution2D、MaxPooling2D、Dense 和 Flatten:构建卷积神经网络(CNN)的各层。
  • ImageDataGenerator:用于在训练期间进行实时数据增强。

初始化卷积神经网络(CNN)

加载训练数据

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

构建 CNN 架构

编译模型

训练模型

训练完成后,使用 classifier.save 将模型存储在 .h5 文件中。

在下面的代码中,我们将使用 trained_model.h5 来识别猫和狗。

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

输出如下:

AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识

完整的代码,请参见这里(https://github.com/RijulTP/GPUToolkit/tree/main/neural-network?ref=journal.hexmos.com)。

总结

在即将到来的 AI 时代,GPU 是不容忽视的存在,我们应该深入了解它的能力。

随着我们从传统的顺序算法过渡到日益流行的并行算法,GPU 将成为加速复杂计算不可或缺的工具。在 AI 和机器学习任务等具有海量数据集和复杂的神经网络的架构中,GPU 的并行处理能力具有很大的优势。

此外,GPU 已超出传统的机器学习领域,在科学研究、模拟和数据密集型任务中也有找到了应用。事实证明,GPU 的并行处理能力有助于解决药物发现、气候建模以及金融模拟等各个领域的难题。



Tags:GPU   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
颠覆GPU、打倒英伟达!深扒12家AI芯片独角兽
谁将成为屠龙者?2024开年,去年大涨的科技股一片惨跌,但引领AI浪潮的总龙头英伟达依然势头不减。没有哪家芯片公司不眼红英伟达的地位,随着AI产业的蛋糕越做越大,硬件赛道也肉眼可...【详细内容】
2024-01-16  Search: GPU  点击:(74)  评论:(0)  加入收藏
三分钟搞懂CUDA和GPU编程
CUDA(Compute Unified Device Architecture)是由NVIDIA开发的并行计算平台和编程模型,支持开发人员利用GPU的强大计算能力进行通用计算任务。本文介绍使用CUDA进行GPU编程的基...【详细内容】
2023-12-06  Search: GPU  点击:(159)  评论:(0)  加入收藏
GPU架构知识
图形处理单元(或简称GPU)会负责处理从PC内部传送到所连接显示器的所有内容,无论你在玩游戏、编辑视频或只是盯着桌面的壁纸,所有显示器中显示的图像都是由GPU进行渲染的。对普通...【详细内容】
2023-11-24  Search: GPU  点击:(214)  评论:(0)  加入收藏
GPU架构与渲染性能优化
Labs 导读在开发图形渲染应用时,渲染性能优化是一个绕不开的主题,开发者往往遵循一些优化准则来构建自己的应用程序,包括数据合并、模型减面、减少采样次数、减少不必要渲染等...【详细内容】
2023-11-20  Search: GPU  点击:(175)  评论:(0)  加入收藏
AI 时代的 GPU 生存工具包:每个开发人员必须了解的基本知识
随着传统的顺序算法到日益流行的并行算法,GPU 将成为加速复杂计算不可或缺的工具。在 AI 和机器学习任务等具有海量数据集和复杂的神经网络的架构中,GPU 的并行处理能力具有很...【详细内容】
2023-11-17  Search: GPU  点击:(213)  评论:(0)  加入收藏
S-LoRA:一个GPU运行数千大模型成为可能
编辑:蛋酱一般来说,大语言模型的部署都会采用「预训练 — 然后微调」的模式。但是,当针对众多任务(如个性化助手)对 base 模型进行微调时,训练和服务成本会变得非常高昂。低...【详细内容】
2023-11-16  Search: GPU  点击:(206)  评论:(0)  加入收藏
CPU vs GPU:谁更适合进行图像处理?
CPU 和 GPU 到底谁更适合进行图像处理呢?相信很多人在日常生活中都会接触到图像处理,比如修图、视频编辑等。那么,让我们一起来看看,在这方面,CPU 和 GPU 到底有什么不同,哪个更胜...【详细内容】
2023-11-14  Search: GPU  点击:(191)  评论:(0)  加入收藏
借助Python库CuPy,发掘GPU的威力
译者 | 布加迪审校 | 重楼CuPy简介CuPy是一个Python库,与NumPy和SciPy数组兼容,为GPU加速计算而设计。通过将NumPy换成CuPy语法,您可以在英伟达CUDA或AMD ROCm平台上运行代码。...【详细内容】
2023-11-07  Search: GPU  点击:(352)  评论:(0)  加入收藏
TensorDB:高性能向量数据库与GPU加速的未来
向量检索是一项强大的信息处理技术,它将文本、图像、音频等数据转化为数学向量,从而实现高效的搜索和分析功能,向量数据库作为大模型的一项重要基础设施已经被广泛应用。当前,全...【详细内容】
2023-11-03  Search: GPU  点击:(148)  评论:(0)  加入收藏
深入了解:图形处理器GPU的工作原理及应用
在计算机科学领域,图形处理器(GPU)是一种专门用于处理图形和图像的硬件设备。随着计算任务的日益复杂和对图形处理能力的需求增加,GPU作为一种强大的计算工具,正逐渐崭露头角。本...【详细内容】
2023-09-11  Search: GPU  点击:(287)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(5)  评论:(0)  加入收藏
站内最新
站内热门
站内头条