Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Python

  • MLTutorials

  • 卷积神经网络

  • 循环神经网络

  • Transformer

  • VisionTransformer

  • 扩散模型

  • 计算机视觉

  • PTM

  • MoE

  • LoRAMoE

  • LongTailed

  • 多模态

  • 知识蒸馏

  • PEFT

  • 对比学习

  • 小样本学习

  • 迁移学习

  • 零样本学习

  • 集成学习

  • Mamba

  • PyTorch

  • CL

  • CIL

  • 小样本类增量学习FSCIL

  • UCIL

  • 多模态增量学习MMCL

  • LTCIL

  • DIL

  • 论文阅读与写作

  • 分布外检测

  • GPU

    • 常用命令
    • GPU相关概念
      • 概念
      • conda 与 nvidia 官方提供的 cudatoolkit 的区别
      • 计算指标与矩阵运算
      • Reference
    • GPU算力
    • GPU显存
    • GPU通信
    • GPU和显存分析
    • 内存与显存_CPU与GPU_GPU与CUDA
    • 执行脚本
    • 英伟达AI芯片科普
  • 深度学习调参指南

  • AINotes
  • GPU
Geeks_Z
2024-02-29
目录

GPU相关概念

概念

  • 显卡 :显卡,是图形处理单元(GPU)的简称,是独立的处理单元,可以进行图像处理和计算,硬件设备。

  • CUDA:英文全称是Compute Unified Device Architecture,是显卡厂商 NVIDIA 推出的运算平台。按照官方的说法是,CUDA 是一个并行计算平台和编程模型,能够使得使用 GPU 进行通用计算变得简单和优雅。对于 GPU 本身的编程,使用的是CUDA语言来实现的。但是,在我们使用 PyTorch 编写深度学习代码时,使用的CUDA又是另一个意思。在 PyTorch 使用 CUDA表示要开始要求我们的模型或者数据开始使用 GPU 了。

    1. 我们使用 GPU 时使用的是.cuda()而不是使用.gpu()。这是因为当前 GPU 的编程接口采用 CUDA,但是市面上的 GPU 并不是都支持 CUDA,只有部分 NVIDIA 的 GPU 才支持,AMD 的 GPU 编程接口采用的是 OpenCL,在现阶段 PyTorch 并不支持。
    2. 数据在 GPU 和 CPU 之间进行传递时会比较耗时,我们应当尽量避免数据的切换。
    3. GPU 运算很快,但是在使用简单的操作时,我们应该尽量使用 CPU 去完成。
    4. 当我们的服务器上有多个 GPU,我们应该指明我们使用的 GPU 是哪一块,如果我们不设置的话,tensor.cuda()方法会默认将 tensor 保存到第一块 GPU 上,等价于 tensor.cuda(0),这将有可能导致爆出out of memory的错误。
  • NVCC:CUDA的编译器,可以从CUDA Toolkit的/bin目录中获取,类似于gcc就是c语言的编译器。由于程序是要经过编译器编程成可执行的二进制文件,而cuda程序有两种代码,一种是运行在cpu上的host代码,一种是运行在 gpu上的device代码,所以nvcc编译器要保证两部分代码能够编译成二进制文件在不同的机器上执行。是 CUDA Toolkit 中的一部分

  • CUDA Driver: 运行CUDA应用程序需要系统至少有一个具有CUDA功能的GPU和与CUDA工具包兼容的驱动程序。 CUDA Driver是向后兼容的,这意味着根据 CUDA 的特定版本编译的应用程序将继续在后续发布的Driver上也能继续工作。

  • cudnn:专门为深度学习计算设计的软件库,里面提供了很多专门的计算函数,如卷积等。还有很多其他的软件库和中间件,包括实现c++ STL的thrust、实现gpu版本blas的cublas、实现快速傅里叶变换的cuFFT、实现稀疏矩阵运算操作的cuSparse以及实现深度学习网络加速的 cuDNN 等等

  • CUDA Toolkit: (nvidia): CUDA完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。nvidia的cudaToolkit会安装对应显卡驱动,.deb安装包会默认安装,.run会询问是否安装。

  • CUDA Toolkit (Pytorch): CUDA不完整的工具安装包,其主要包含在使用 CUDA 相关的功能时所依赖的动态链接库。不会安装驱动程序。

  • gpu架构指的是硬件的设计方式,例如流处理器簇中有多少个 core、是否有 L1 or L2 缓存、是否有双精度计算单元等等。每一代的架构是一种思想,如何去更好完成并行的思想

  • 芯片:就是对上述 gpu 架构思想的实现,例如芯片型号 GT200 中第二个字母代表是哪一代架构,有时会有 100 和 200 代的芯片,它们基本设计思路是跟这一代的架构一致,只是在细节上做了一些改变,例如 GK210 比 GK110 的寄存器就多一倍。有时候一张显卡里面可能有两张芯片,Tesla k80 用了两块 GK210 芯片。这里第一代的 gpu 架构的命名也是 Tesla,但现在基本已经没有这种设计的卡了,下文如果提到了会用 Tesla 架构和 Tesla 系列来进行区分。

  • 显卡系列:在本质上并没有什么区别,只是 NVIDIA 希望区分成三种选择,GeForce 用于家庭娱乐,Quadro 用于工作站,而 Tesla 系列用于服务器。Tesla 的 k 型号卡为了高性能科学计算而设计,比较突出的优点是双精度浮点运算能力高并且支持 ECC 内存,但是双精度能力好在深度学习训练上并没有什么卵用,所以 Tesla 系列又推出了 M 型号来做专门的训练深度学习网络的显卡。需要注意的是 Tesla 系列没有显示输出接口,它专注于数据计算而不是图形显示。

  • GeForce的显卡型号:是不同的硬件定制,越往后性能越好,时钟频率越高显存越大,即 G/GS<GT<GTS<GTX。

注:CUDA Toolkit 完整和不完整的区别:在安装了 CUDA Toolkit (Pytorch)后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,不需要重新进行编译过程。如需要为 Pytorch 框架添加 CUDA 相关的拓展时(Custom C++ and CUDA Extensions),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit。

conda 与 nvidia 官方提供的 cudatoolkit 的区别

Nvidia 官方提供的 CUDA Toolkit 是一个完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。使用 Nvidia 官网提供的 CUDA Toolkit 可以安装开发 CUDA 程序所需的工具,包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。

Nvidia 官方提供安装的 CUDA Toolkit 包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行( Pytorch 本身与 CUDA 相关的部分是提前编译好的 ),就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。故而,Anaconda 在安装 Pytorch 等会使用到 CUDA 的框架时,会自动为用户安装 cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit .

通过 Anaconda 安装的应用程序包位于安装目录下的 /pkg 文件夹中,如笔者的目录即为 /home/xxx/anaconda3/pkgs/ ,用户可以在其中查看 conda 安装的 cudatoolkit 的内容,如下图所示。可以看到 conda 安装的 cudatoolkit 中主要包含的是支持已经编译好的 CUDA 程序运行的相关的动态链接库。 严格说 Linux 下面其实没有动态连接库一说,Windows 下面是 DLL 文件(dynamic link library),而 Linux 下面类似的概念是 SO 文件(sharing object)

计算指标与矩阵运算

  • FLOPS:"FLOPS" 是 "Floating Point Operations Per Second" 的缩写,意为每秒浮点运算次数。它是衡量计算机系统或处理器性能的一种常见指标,特别是在科学计算、工程领域和高性能计算中。例如,一个处理器的性能为 1 TFLOPS,意味着它可以每秒执行 1 万亿次浮点运算。

  • TFLOPS 是 "TeraFLOPS" 的缩写,其中 "Tera" 表示万亿(10^12),TFLOPS 就是指每秒万亿次浮点运算。

  • Latency

    • 生成第一个 Token 的时间(Time To First Token (TTFT)

    • 生成每一个输出 Token 的时间(Time Per Output Token (TPOT)

    • Latency = TTFT + TPOT *(要生成的 Token 数 - 1)

    • Latency 可以转换为 Tokens Per Second (TPS):TPS = (the number of tokens to be generated) / Latency。

    • 优化:

      • 通信时延对 MACs 的影响 >> 优化带宽
      • Batch Size 大小与内存大小 >> 多级缓存设计

Reference

  • 一文讲清楚 CUDA、CUDA toolkit、CUDNN、NVCC 关系 (opens new window)
  • 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn 到底是什么? (opens new window)
  • GPU 基础知识 (opens new window)
#GPU
上次更新: 2025/06/25, 11:25:50
常用命令
GPU算力

← 常用命令 GPU算力→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式