NVIDIA A100 和 H100 硬件架构学习

news2024/10/1 1:20:59
  1. 目前位置NV各种架构代号:

NVIDIA GPU 有多个代号和架构,这些架构对应不同的世代和硬件特性。以下是 NVIDIA 主要 GPU 架构及其计算能力(Compute Capability)代号的简要概述:

  1. Tesla 架构

  • G80、GT200

  • Compute Capability: sm_10, sm_11, sm_12, sm_13

  1. Fermi 架构

  • GF100, GF104, GF110

  • Compute Capability: sm_20, sm_21

  1. Kepler 架构

  • GK104, GK110

  • Compute Capability: sm_30, sm_32, sm_35, sm_37

  1. 4. Maxwell 架构

  • GM107, GM204, GM206

  • Compute Capability: sm_50, sm_52

  1. Pascal 架构

  • GP100, GP102, GP104, GP106

  • Compute Capability: sm_60, sm_61, sm_62

  1. Volta 架构

  • GV100

  • Compute Capability: sm_70, sm_72

  1. Turing 架构

  • TU102, TU104, TU106

  • Compute Capability: sm_75

  1. Ampere 架构

  • GA100, GA102, GA104, GA106

  • Compute Capability: sm_80, sm_86

  1. Hopper 架构

  • H100

  • Compute Capability: sm_90, sm_90a

这只是一个简要概述,具体的 GPU 型号可能会包含多种不同的子配置和强化特性,例如更多的 CUDA 核心、更高的内存带宽、更强的 NVLink 支持等。详细的功能和特性可以通过 NVIDIA 的最新文档和白皮书来获得。

举例说明

  • Tesla G80 和 GT200: 最早的 GPU 架构,主要用在基础的并行计算。

  • Fermi: 引入了新的指令集架构和硬件功能,例如 ECC 内存支持。

  • Kepler: 提升了能效,广泛应用于高性能计算和科学计算。

  • Maxwell: 进一步优化了能效并改善了执行效率。

  • Pascal: 引入了 NVLink 和统一内存,显著提高了深度学习的性能。

  • Volta: 包含全新的 Tensor Cores,用于加速深度学习任务。

  • Turing: 包含了 Ray Tracing Cores 和改进的 Tensor Cores,针对实时渲染和深度学习进行了优化。

  • Ampere: 进一步增强了 Tensor Cores 性能,改善的 memory 和计算效率。

  • Hopper: 最新的架构,进一步提升 AI 和数据中心计算的效率。

编译 CUDA 程序

编译 CUDA 程序时,可以选择适合你的 NVIDIA GPU 架构的 -arch 参数。例如,如果你有一块 Volta GPU,你可以这样编译程序:

 

nvcc -arch=sm_70 your_program.cu -o your_program

  1. Hopper 相比 Ampere 新增硬件特性

了解FlashAttentionV3的优化需要先了解Hopper的主要技术(Hopper White Paper概述)

https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/

https://developer.nvidia.com/blog/nvidia-ampere-architecture-in-depth/

  • 新的第四代的Tensor Core,整体加速了6x,单SM上的加速,SM数量的增加,频率升高,在同等数据类型上,张量内核的 MMA(矩阵乘积)计算速度是 A100 SM 的 2 倍;同时支持了fp8的数据类型,与A100 fp16数据类型相比 tensor core 性能提升了 4 倍;

  • 新的DPX指令,相比A100在动态规划算法上加速7x @黄明晓 应用场景调研;

  • IEEE FP64和F32相比A100加速3x,其中硬件计算单元提升2x,SM数量增加,频率升高;

  • 新增Thread block cluster的特性,编程层次变为:threads,thread blocks,thread block clusters, and grids。clusters 使多个thread blocks能够在多个 SMs 上并发运行,同步,协同获取和交换数据;

  • Distributed shared memory,实现SM-to-SM的通信,用于跨多个 SM 共享内存块的加载、存储和原子操作。

  • 新的异步执行的特性,包括Tensor Memory Accelerator(TMA)单元。可以将大的数据块从GMEM高效的传输到SMEM,同时支持同一个cluster内不同的Thread blocks间,异步copy数据。

  • 新的Transformer Engine(硬件+软件), 可以实现Fp16和Fp8的自动切换,训练加速9x,推理加速30x。

  • HBM3 memory subsystem提升2x的bandwidth。

  • 50MB的L2 cache的架构。

  • 第二代MIG(Multi-Instance GPU)每个GPU Instance增加3x的计算能力和2x的bandwidth;

  • 可信计算支持,保护用户数据;

  • 第四代NVIDIA NVLink,3x bandwidth 在 allreduce操作上。和50%的通用bandwidth提升的支持;

  • 第三代NVSwitch,总的switch throughput从7.2Tbits/sec提升到13.6Tbits/sec;

  • 新的NVLink Switch system;

  • PCIe Gen5支持128GB/sec的双向bandwidth(64GB/sec的单向带宽)。

疑问:TF32 并没有增加芯片的峰值算力,为什么不直接将tensor core 设计成支持fp32的类型?(降低能耗?)

  1. Hopper 更优的pipeline效果

核心思想:减少data_load、cuda core、tensor core对寄存器资源的竞争关系,加大pipeline hide latency效果

疑问:根据register file大小,理论上每个thread 最多可以访问到512*32bit 的registers(为什么文档说最多是256个registers? Flash attention3中register分配数量超过了256,达到264个)

  1. TMA 硬件单元

TMA的引入解放了load 数据 和 计算,TMA 不再和计算单元抢占register/thread资源,hide load 数据的latency;

(类似biren br104 TDA硬件单元)

说明:

(1)通过copy descriptor的方式只需一次issue就可以完成global memory 到share memory之间的async copy;

(2) TMA(只用到一个thread)解放了thread和register资源,去做其他independent工作;

(3) 支持一种全新的更高效的异步事务屏障(asynchronous transaction barrier)来处理数据copy和exchange,cluster 内不同SM之间的数据通信也是基于这种新特性。

  1. WGMMA 指令

WGMMA指令的引入,合并SM里面的4个tensor core 效果类似于一个大的tensor core,减少load tensor次数(A/B tensor 共用),同时支持Tcore core 的inputs 来源于share memory(A100架构及之前的架构,inputs 必须from registers),具体的WGMMA指令inputA from registers or share memory,inputB must from share memory PTX ISA 8.5;减少了register的抢占,更有利于cuda core pipeline 并行计算,hide cuda core 计算的latency;

(类似biren br104 cwarps/Tmode 概念)

  1. setmaxnreg指令

setmaxnreg指令的引入,支持动态重新分配每个warp group 可用register数量(from register pool);

说明:Hopper架构新特性的指令大部分都是在PTX ISA version 8.0引入的 PTX ISA 8.5

(类似biren br104 cwarps/Tmode下手都分配register用法)

  1. fp8 tensor core

Hopper 整体上支持FP8, FP16, BF16, TF32, FP64这些dtype类型的tensor core的计算,相比Ampere,fp8是新增加的数据类型:

FP8 Tensor Core支持FP32 and FP16 两种类型的累加器, 并且支持两种FP8的输入类型:

  • E4M3 with 4 exponent bits, 3 mantissa bits, and 1 sign bit(范围较小,精度较高)

  • E5M2, with 5 exponent bits, 2 mantissa bits, and 1 sign bit(范围较大,精度较低)

flash attention3 论文上也提到两点关于FP8在flash attention3上使能的工程细节:

(1)A,B tensor 必须在K维度连续(V in-kernel transpose);

(2)FP32 accumulator register layout is different from operand A FP8 operand register layout(QK 结果permute)

H100 FP8 相比 A100 FP16 提升了6x的吞吐量

横向对比tensor core计算,H100 相比 A100 都有3x吞吐量的提升

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

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

相关文章

未授权访问漏洞(漏洞复现合集)

目录 一:Redis未授权访问漏洞 * 步骤一:进入vulhub目录使用以下命令启动靶机... 步骤二:在Kali上安装redis程序进行服务的链接 步骤三:可以直接连接执行命令且不需要认证说明存在未授权访问漏洞...下载以下攻击项目... 步骤四:使用工具执行以下命令获取目标的命…

LeetCode.572.另一棵树的子树

题目描述: 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。…

E24.【C语言】练习:求一个整数存储在内存中的二进制中1的个数(两种方法)

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int n 0;int sum 0;scanf("%d", &n);while (n!0){if (n % 2 1)sum;n n / 2;}printf("%d", sum); } 代码可以更简洁 while (n!0)直接写成while (n) 对于正整数&#xff1…

探索Python文档自动化的奥秘:MkDocs的神奇之旅

文章目录 **探索Python文档自动化的奥秘&#xff1a;MkDocs的神奇之旅**第一部分&#xff1a;背景为什么选择MkDocs&#xff1f; 第二部分&#xff1a;MkDocs是什么&#xff1f;MkDocs&#xff1a;文档生成的瑞士军刀 第三部分&#xff1a;如何安装MkDocs&#xff1f;一键安装&…

C++中的宏

文章目录 第一个简单宏示例宏定义可包括分号宏定义符号正常使用案例Debug版本和release版本的宏定义使用定义宏开关为某个数值而不仅仅是定义【注意】预处理定义规范代码折叠反斜杠实现多行宏的书写 第一个简单宏示例 发生在编译的预处理阶段。 不建议下面这么写&#xff0c;下…

3.9.转置卷积

转置卷积 ​ 目前为止&#xff0c;在卷积神经网络层中&#xff0c;通常会减少下采样输入图像的空间维度&#xff08;高和宽)。然而如果输入和输出图像的空间维度相同&#xff0c;在以像素级分类的语义分割中将会很方便&#xff1a;输出像素所处的通道维可以保有输入像素在同一…

Linux应用编程——实现SPI通信(基于百问网6ULL开发板)

1.SPI简介 SPI 通常指串行外设接口&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;它是一种高速、全双工、同步的通信总线。 SPI 总线在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;也为 PCB 的布局节省了空间。这四根线分别是&…

大模型学习笔记 - InstructGPT中的微调与对齐

LLM 微调 之 InstructGPT中的微调与对齐 LLM 微调 之 InstructGPT中的微调与对齐 技术概览 InstructGPT中的微调与对齐 大体步骤标注数据量模型训练 1. SFT 是如何训练的2. Reward Model是如何训练的3. RLHF 是如何训练的具体讲解RLHF 的loss 函数 模型效果参考链接&#xf…

数据结构实验报告-图

桂 林 理 工 大 学 实 验 报 告 一、实验名称&#xff1a; 实验7 图 二、实验内容&#xff1a; 1.已知一个有向图的顶点集V和边集E分别为:V (0,1,2,3,4,5,6,7,8};E{<0,2>&#xff0c;<1,3>,<1,4>,<2,4>,<2,5>,<3,6>,<3,7>.&l…

计算机的错误计算(五十二)

摘要 用错数解释计算机的错误计算&#xff08;五十一&#xff09;中案例 的错误计算原因。 首先&#xff0c;由计算机的错误计算&#xff08;二十七&#xff09;知&#xff0c;错数公式是 上式表示&#xff0c;函数值的错误数字个数 比自变量的错误数字个数 多约 位。其中…

为智能改造赋能,提升运营效率的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 AI是新形势下数…

稳稳的年化10%,多任务时序动量策略——基于pytorch的深度学习策略(附python代码)

原创文章第608篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 做因子挖掘这段时间&#xff0c;有一个观感。 传统的因子挖掘&#xff0c;尤其是手工构造因子&#xff0c;到遗传算法因子挖掘。——本身也是一种”拟合“&#xff0c;或者说试图”…

6 定时器

6 定时器 1、基本概念2、使用库函数实现 1、基本概念 定时器的基本工作框架 STM32F103共支持8个定时器 假如分频器PSC的值0,则PSC分频系数1,表示输入1个时钟信号,CNT计数器加1,1S加1&#xff0c;当CNT计数器的值3&#xff0c;跟ARR自动重载寄存器的值21相等时&#xff0c;就…

Linux基于设备树的字符设备驱动框架

掌握设备树是 Linux 驱动开发人员必备的技能&#xff01;因为在新版本的 Linux 中&#xff0c;ARM 相关的驱动全部采用了设备树(也有支持老式驱动的&#xff0c;比较少)&#xff0c;最新出的 CPU 其驱动开发也基本都是基于设备树的&#xff0c;比如 ST 新出的 STM32MP157、NXP的…

【React】详解 index.js 文件

文章目录 一、index.js文件的基本结构1. 引入必要的模块2. 渲染根组件3. 注册服务工作者&#xff08;可选&#xff09; 二、index.js文件的详细解析1. ReactDOM.render的作用2. 为什么使用React.StrictMode3. 服务工作者的注册 三、index.js文件的最佳实践1. 使用模块化引入2. …

缓存常见问题总结

目录 一&#xff1a;缓存穿透 解决方案 1.对请求增加校验机制 2.缓存空值或者特殊值 3.使用布隆过滤器 布隆过滤器原理图​编辑 哈希函数的基本特性 布隆过滤器为什么会存在误判 如何降低误判率 如何使用布隆过滤器 布隆过滤器的应用场景 如何使用布隆过滤器 第一…

QT 建立tcp服务端 TcpServer TcpSocket

基于正点原子教程&#xff0c;个人改编一点点(先写着&#xff0c;还没学客户端来验证) QTcpServer 服务端&#xff0c;下控制多个socket QTcpSocket 可以理解为一个TCP连接 使用客户端的流程为 1.包含network和include 2.声明QTcpServer信号 整个流程都要使用QTcpServer对象&a…

搭建pxe网络安装环境实现服务器自动部署

1.首先配置自动化脚本工具 根据自己的主机设置自己的IP 这张图选择红框下面的选则剩余空间 红帽7的初始网卡为ens33&#xff0c;所以部署后新机器的网卡为ens33 根据自己所要部署的版本编写合适的脚本 使用vim.ks.cfg进入脚本编写 2.配置DHCP 使用vim编写/etc/dhcp/dhcpd.conf …

深入研究Java的String常量池

文章目录 一、StringTable分析一段代码示例一示例二示例三 二、 intern1、StringTable位置2、StringTable 性能调优3、intern深入分析3.1 思考3.2 JDK6中的解释3.3 JDK7中的解释3.4 详细分析3.5 intern正确使用的例子3.6 intern使用不当的例子 一、StringTable 常量池中的字符…

清华计算几何-ElementUniqueness, MinMap, MaxGap

ElementUniqueness问题(EU) 给出一组数给出一组数据,, 判断每个数都是唯一性的或者说判断是否存在重复的. 算法思路很简单, 快速排序 遍历判断: Max(O(nlogn) O(n)) O(nlogn)算法复杂度 代码实现 bool IsEelementUniqueness(const vector<float>& Elemnts) {vect…