当前位置:   article > 正文

AI 时代的 GPU:每个开发人员都必须知道的知识_人工智能 gpu编程

人工智能 gpu编程

在这里插入图片描述
翻译:原文链接

为什么 CPU 知识已经不够用了

大多数开发人员学习的基本是 CPU 的知识,然而在当今世界,我们依赖于大量并行任务,CPU 在这些场景中无法正常工作。

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

执行并行任务

CPU 传统上是线性运行的,一次执行一条指令。当面对多个任务时,CPU 会分配其资源来一个接一个地处理每个任务,从而导致指令的顺序执行。在需要同时关注多个任务的情况下,这种方法变得效率低下。

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

高效运行 AI 模型

AI 模型采用 Transformer 等高级架构,利用并行处理来提高性能。与按顺序运行的旧递归神经网络 (RNN) 不同,GPT 等现代转换器可以同时处理多个单词,从而提高训练效率和能力。因为当我们并行训练时,它会产生更大的模型,而更大的模型将产生更好的输出。

例如,AlexNet是一种图像识别架构,它通过同时处理图像的不同部分来展示并行处理的强大功能,从而实现准确的模式识别。

然而,以单线程性能为重点的 CPU 难以充分发挥并行处理潜力。他们面临着有效分发和执行复杂 AI 模型所需的大量并行计算的困难。

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

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

与 GPU 内核的大规模并行性

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

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

我们很快将演示如何使用 GPU 并行性来减少复杂任务所需的时间。

在这里插入图片描述

AI 模型中使用的并行性

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

我们很快就会展示一个演示,如何使用 GPU 的强大功能来训练神经网络。

在这里插入图片描述

CPU 与 GPU:有什么区别?

中央处理器 (CPU) 的设计侧重于顺序处理。它们擅长线性执行一组指令。

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

  • 通用计算
  • 系统操作
  • 处理涉及条件分支的复杂算法
并行任务的内核有限

CPU 具有较少的内核数量,在消费级处理器中通常在 2-16 个内核范围内。每个内核都能够独立处理自己的一组指令。

GPU 并行架构

图形处理单元 (GPU) 采用并行架构设计,使其在并行处理任务中非常高效。

  • 渲染图形
  • 执行复杂的数学计算
  • 运行可并行化算法
数千个用于并行任务的内核

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

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

使用 Nvidia 的 CUDA 进行 GPU 驱动的开发

CUDA 是 NVIDIA 开发的并行计算平台和编程模型,使开发人员能够利用 GPU 加速器的强大功能来加速其应用程序。

下面用实际示例演示如何使用 CUDA。

如何在您的机器上设置 Cuda

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

-下载 CUDA

  • 从上面的链接下载基本安装程序以及驱动程序安装程序
  • 转到主文件夹中的 .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
  • 1

此命令的目的是识别和列出系统中的 GPU。

在这里插入图片描述

nvidia-smi
  • 1

它代表“NVIDIA 系统管理界面”,它提供有关系统中 NVIDIA GPU 的详细信息,包括利用率、温度、内存使用情况等。

在这里插入图片描述

sudo lshw -C display
  • 1

目的是提供有关系统中显示控制器(包括图形卡)的详细信息。

在这里插入图片描述

inxi -G
  • 1

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

在这里插入图片描述

sudo hwinfo --gfxcard
  • 1

其目的是获取有关系统中显卡的详细信息。

在这里插入图片描述

开始使用 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 要执行此类操作,它将执行如下代码所示的操作。
#include <stdio.h>
int a[] = {
   1,2,3,4,5,6};
int b[] = {
   7,8,9,10,11,12};
int c[6];

int main() {
   
    int N = 6;  // Number of elements

    for (int i = 0; i < N; i++) {
   
        c[i] = a[i] + b[i];
    }

    for (int i = 0; i < N; i++) {
   
        printf("c[%d] = %d", i, c[i]);
    }

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

前面的方法涉及逐个遍历数组元素并按顺序执行添加。然而,在处理大量数字时,由于其顺序性,这种方法变得迟钝。

为了解决这一限制,GPU 通过并行化加法过程提供了一种解决方案。与一个接一个地执行操作的 CPU 不同,GPU 可以同时执行多个加法。

例如,操作 1+7、2+8、3+9、4+10、5+11 和 6+12 可以在 GPU 的帮助下通过并行计算同时执行。

利用 CUDA,实现此并行加法的代码如下,我们将使用内核文件 (.cu) 进行演示。

让我们一一浏览代码:

__global__ void vectorAdd(int* a, int* b, int* c)
{
   
    int i = threadIdx.x;
    c[i] = a[i] + b[i];
    return;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • __global__ specifier 表示此函数是内核函数,将在 GPU 上调用。
  • vectorAdd 将三个整数指针(a、b 和 c)作为参数,表示要添加的向量。
  • threadIdx.x 检索当前线程的索引(在一维网格中)。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/758940
推荐阅读
相关标签
  

闽ICP备14008679号