GPU发展

​ PC时代随着图形操作系统的出现,大量需要 3D 图形运算的工具软件和游戏对于浮点运算的要求急剧升高,传统的 X86 CPU 处理器并不擅长这类任务,于是诞生了更擅长浮点运算的 GPU。在这类应用中,系统会把图形渲染等任务 offload 到 GPU 上去。

​ 随着神经网络研究和应用的发展,GPU 中的浮点运算能力在这些领域的应用逐渐发展起来,英伟达敏感地抓住了市场机会,将其 GPU 在保留传统渲染能力的同时增加了对于通用计算和神经网络运算的能力,并称之为 GPGPU。

​ 英伟达的 GPGPU 包含渲染以及神经网络(“NN”)运算。这种架构在同时需要两个能力的应用上会有一定的优势,但很显然对于技术积累要求也非常高。目前一些 AI 芯片初创公司所自称的 GPGPU 架构是指没有渲染的 NN 运算,而有一些声称做 GPU 的公司则是狭义的渲染 GPU,二者都不是通常英伟达所指的 GPGPU。英伟达由于有长年渲染 GPU 的技术积累,同时基于先发优势通过 CUDA 积累了生态优势,因此选择了 GPGPU 路线。而其他公司在这条路线上与其正面竞争是胜算很小的,即使国际知名公司(像英特尔和 AMD)在 GPGPU 市场与其竞争都有相当的难度。

​ 然而,没有一个技术是完美的,由于 GPGPU 保留了大量神经网络运算所不需要的单元(即传统渲染), 在单纯的神经网络运算上并不是最高效的,因此谷歌基于特定域架构(DSA)为自己的特 定应用做了 TPU。DSA 架构给其他芯片公司带来了希望,包括 Intel、特斯拉等知名公司都开始在这条路线上发力。

  • 集显和独显

在注重算力的服务器和注重便携性的移动端分别采用独立和集成GPU,而汽车、游戏主机、PC等主要采用独立+集成的GPU接入方式。

  • GPU发展模式

  • 国内外CPU生产线产商

    • 设计:Nvidia、AMD几乎垄断
    • 设备、材料和EDA/IP:国内外差距较大
    • 制造:只有台积电和三星有5nm制程工艺,且需要美国设备
    • 封测:中国大陆、美国、中国台湾三分天下

基础

GPU 性能

GPU 的性能需要综合考虑两个指标:算力、通信带宽。

  • 算力

​ 算力的单位是 Flops,即每秒所执行的浮点数运算次数。浮点数运算次数就是小数的四则运算,可以简单理解为机器每秒可以做多少次小数的加减乘除。

  • 通信带宽

​ 因为 GPU 的内存大小是固定的, 而训练使用的内存要超过单个 GPU 内存,所以就需要多个 GPU 并行计算,但并行计算就需要考虑数据交换带来的通信开销,通信开销越大,GPU 之间的数据交换速度就越快, 模型训练就越快,这就是通信带宽。

​ 下面是 H100、A100 和 4090 卡的性能对比:

神经网络算力计算

神经网络一般分为:前向计算和反向计算两个步骤。

  • 前向计算

​ 以提足球为例,前向传播可以理解为球员站在任意位置踢球,然后观察足球离球框的距离,前向传播就是这个观察过程,记录球员在将足球踢向球框时的各个参数。

  • 反向传播

​ 反向传播就是根据前向传播记录的参数,再回头来改进球员的踢球的位置、踢法等参数,确保下一次踢球能命中的概率大些。

权重更新就是球员改进踢足球的方式。

​ 总结,一次前向传播需要 1 次计算(观察记录),一次反向传播需要 2 次计算(观察记录+权重更新),则完成一次神经网络的迭代需要对所有输入数据和模型参数进行 3 次计算。由于每次计算都是矩阵运算,每次矩阵运算需要 1 次乘法和加法,共计 2 次浮点运算,所以对于每个 token、每个模型参数,需要 3 * 2 flops = 6 次浮点数运算。*

​ 则总计需要 6 * token 数 * 模型参数量 flops,这就是完成一个神经网络模型需要的算力资源的大致估计,从而可以计算出所需的 GPU 数量。

大模型算力计算

​ 以上图为例,GPT3 的参数规模为 175B,训练 300B,采用稠密(Dense)模型,按照公式计算:6 * 175B * 300B = 3.15e23 flops,公开的 GPT3 的运算量为:3.1e23 flops,基本一致。

  • 所需 GPU 卡数/时

​ 已知 GPT3 的运算量为 3.1e23 flops ,再除以 312 flops (一张 A100 fp16 精度下的算力) * 46.2%(利用率) * 3600(一个小时对应的秒数) = 60.67 w 张 A100 /小时 = 2.53 w 张 A100 /天,若是 1000 张 A100 ,则训练需要大约一个月。

其他影响

​ 除了算力,还需考虑计算时的内存和通信带宽,若是单卡,只需考虑训练总内存 = 模型内存 + 优化器内存 + 激活内存 + 梯度内存。

fp32 对应 4 个字节,fp16 对应 2 个字节,精度越大,所需内存越多。

​ 通信带宽决定张量并行计算的速度,因为要多卡计算,卡之间要传递张量计算时的中间数值。

市场现状

最新最强算力芯片: H100,性能超过谷歌的 TPU。

H100 产能受限的原因:

H100芯片需要使用SK海力士的HBM内存,以及台积电的CoWoS封装,两者都因过于昂贵,此前并没能大规模市场化,预备产能并不多。

GPU操作

这是电脑上的显卡,就2G,我说显示很不清晰。

参考

  1. GPU研究框架 ——行业深度报告(方正证券)
  2. 大模型所需算力笔记

GPU-笔记的更多相关文章

  1. Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)

    0.检查配置 1. VMWare上运行的Ubuntu,并不能支持真实的GPU(除了特定版本的VMWare和特定的GPU,要求条件严格,所以我在VMWare上搭建好了Caffe环境后,又重新在Windo ...

  2. 【Todo】【转载】深度学习&神经网络 科普及八卦 学习笔记 & GPU & SIMD

    上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...

  3. Udacity并行计算课程笔记-The GPU Hardware and Parallel Communication Patterns

    本小节笔记大纲: 1.Communication patterns gather,scatter,stencil,transpose 2.GPU hardware & Programming ...

  4. 学习笔记︱深度学习以及R中并行算法的应用(GPU)

    笔记源于一次微课堂,由数据人网主办,英伟达高级工程师ParallerR原创.大牛的博客链接:http://www.parallelr.com/training/ 由于本人白痴,不能全部听懂,所以只能把 ...

  5. 【Udacity并行计算课程笔记】- Lesson 2 The GPU Hardware and Parallel Communication Patterns

    本小节笔记大纲: 1.Communication patterns gather,scatter,stencil,transpose 2.GPU hardware & Programming ...

  6. Unity3D学习笔记6——GPU实例化(1)

    目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成两次 ...

  7. Unity3D学习笔记7——GPU实例化(2)

    目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 3. 参考 1. 概述 在上一篇文章<Unity3D学习笔记6--GPU实例化(1)>详细介绍了Unity3d中GPU实例化的 ...

  8. Unity3D学习笔记8——GPU实例化(3)

    目录 1. 概述 2. 详论 2.1. 自动实例化 2.2. MaterialPropertyBlock 3. 参考 1. 概述 在前两篇文章<Unity3D学习笔记6--GPU实例化(1)&g ...

  9. caffe学习笔记(一),ubuntu14.04+GPU (用Pascal VOC2007训练数据,并测试)

    把源代码跑起来了,将实验过程记录如下,用于新手入门. 今天和师兄师姐才跑通,来分享下心得.(预训练网络:ImageNet_model,训练集:PASCAL VOC2007, GPU) 首先,整个tra ...

  10. 虚幻引擎4笔记20160821 - 使用GPU粒子做雪花旋转镜头雪花忽有忽无的问题

    在使用GPU进行雪花制作的时候,雪花总是在镜头旋转的时候,一会有,一会无的情况,后来下载别人的例子才知道,原来要给粒子加上边界,具体解决方法如下图

随机推荐

  1. 全网最适合入门的面向对象编程教程:59 Python并行与并发-并行与并发和线程与进程

    全网最适合入门的面向对象编程教程:59 Python 并行与并发-并行与并发和线程与进程 摘要: 在 Python 中,"并行"(parallelism)与"并发&quo ...

  2. gitlab之配置文件.gitlab-ci.yml

    自动化部署給我们带来的好处 自动化部署的好处体现在几个方面 1.提高前端的开发效率和开发测试之间的协调效率 Before 如果按照传统的流程,在项目上线前的测试阶段,前端同学修复bug之后,要手动把代 ...

  3. Tornado框架之深入(二)

    知识点 Application设置 debug模式 路由设置扩展 RequestHandler的使用 输入方法 输出方法 可重写接口 目录: Application settings 路由映射 输入 ...

  4. Django之gunicorn部署

    安装: pip install gunicorn 启动应用: gunicorn -w 3 -k gthread -e DJANGO_SETTINGS_MODULE=settings.prod Serv ...

  5. Java Class 文件中Method的存储

    class文件是java编译后的文件类型.其代表一个类,其有专门的存储格式.其中会存放数据也会存放方法,而所谓的方法存放就是将方法中的调用都转换成java字节码指令.所方法调用从机器的角度看就是对于寄 ...

  6. ZCMU_1117

    /相当于看墙,投影之类的东西让我数多少个建筑物/ 解释感觉还不到位,以后再看看 先强调这不是我原创的,只是加了注释.找到原作者后会加链接.以及改变布局 #include <cstdlib> ...

  7. mongo设置可选的唯一索引

    对于一些可能为空但必须唯一的字段,mongo支持创建部分索引,使用 partialFilterExpression 字段. MongoDB version >= 3.2 下面以 unique_a ...

  8. go build tags使用

    转载请注明出处: 在 Go 语言中,构建标签(Build Tags)是一种用于条件编译的机制,可以帮助开发者根据不同的条件选择性地编译特定的代码块.它们在处理多平台和多环境的代码时特别有用,例如为不同 ...

  9. vue中this.$nextTick()

    this.$nextTick()是在下一次DOM更新后执行其指定回调函数 this.$nextTick(回调函数) 使用场景:在改变数据后,要对更新后的DOM进行操作时使用

  10. Centos中keytool不起作用的解决方法

    ​keytool是Java开发中用于管理密钥和证书的工具,可以用于生成密钥.创建证书请求.导入和导出证书等操作.你可以在Oracle官网上下载和安装JDK,然后在JDK的 bin目录下找到 keyto ...