乐于分享
好东西不私藏

AI原理 12.超级引擎 英伟达GPU与CUDA相关的必备知识点

AI原理 12.超级引擎 英伟达GPU与CUDA相关的必备知识点

> 本节为原理课,偏硬件与生态,难度低、易理解。

> 实操中可能数月才用一次,但面对显卡选型、国产替代、公司技术讨论时无法回避,

> 对建立"AI 专家形象"价值很高,属于"必须知道"的知识。

一、简介英伟达

 1.1 市值飞跃

- 2023-06:市值首次突破 1 万亿美元;此前长期是盈利尚可但不炸裂的普通上市公司。

- 2024-06-05:突破 3 万亿美元——一年时间体量翻三倍(对任何量级的公司都极难)。

- 2024-06-19:市值达 3.34 万亿美元,短暂超越微软成为全球市值第一。

1.2 财报:恐怖的净利率

- FY24/25:总营收约 1305 亿美元(同比 +114%),归母净利润约 728.8 亿美元(同比 +145%)。

- 净利率从早年的 20%~30% 提升到约 50%,在硬件公司中极为罕见。

- 横向对比:谷歌、苹果、微软年净利润也就大几百亿美元级别,英伟达已与之并肩且利润率更高。

1.3 历史抉择:回到 2006 年

2006 年前后英伟达连续约 10 年净利润仅个位数亿美元(4~5 亿/年),甚至 2008、2009 两年亏损。当时面临两个新增长方向的选择:

方向
结果
手机芯片
推出 Tegra 系列(2008 年起第一代,2010 第二代,2011 第三代/四核 Tegra 3,2013 Tegra 4 用于小米 3)。手机发热等问题严重,很快淡出。本行毕竟是显卡,新业务线做得一般。
AI / 高性能科学计算
押注 GPU 并行计算 + 推出 CUDA。当时被华尔街和股东集体否决,黄仁勋一度濒临被董事会驱逐。

>补充:GPU 显卡领域当年主要是 NVIDIA 与 ATI 两家竞争,ATI 后被 AMD 收购。

1.4 转折点

- 2006 年,顶着巨大压力,当年立项、当年推出第一版 CUDA

- 2012 年,Ilya(前 OpenAI 首席科学家)与其导师(诺奖得主 Hinton)及同学在英伟达显卡上训练出 AlexNet,在计算机视觉领域一飞冲天——业界才意识到"在 GPU 上做 AI"的潜力。

- 2006→2012 是英伟达最难熬的阶段:用户也抱怨显卡塞了大量玩游戏用不上的计算核心、价格虚高,销量一度不如 ATI。

二、GPU 的计算方式有何不同

 2.1 CPU vs GPU 架构差异

> CPU 是电脑的中央处理器;GPU 是显卡上的计算核心,英伟达给它起了名字。

维度
CPU
GPU
计算密度
低(Low compute density)
高(High compute density)
控制逻辑
复杂(大量 Control 模块)
简单(Control 模块很小)
缓存 Cache
大(L1/L2 等)
核心数
少(如 8/16/32 核)
极多(数千个)
擅长
串行、复杂逻辑
大规模简单并行运算

形象比喻

- CPU 是少数"业务能力强的成年人",能处理复杂逻辑(启动软件、断点续传等)。

- GPU 是几千个"小学生",只会做加减乘除,无法独立完成复杂逻辑操作(连帮你打开微信点登录都做不到)。

关键结论:过去 PC 上几乎所有软件都基于 CPU 开发,基于 GPU 的极少(仅游戏能用上)。这正是 2006 年股东质疑"GPU 除了玩游戏还能干什么"的根源——黄仁勋的回答是"科学计算",但当时无法回答"怎么赚钱"。

三、CUDA 是什么

3.1 定义

CUDA = Compute Unified Device Architecture(统一计算设备架构)

- 英伟达推出的并行计算平台 + 编程模型,包含 CUDA 指令集架构(ISA)与 GPU 内部并行计算引擎。

- 让开发者能用 C 语言(早期仅 C/C++,CUDA 3.0 起支持 C++ 和 FORTRAN)为 GPU 编写通用计算程序。

有 CUDA 之前

1. 在 GPU 上编程必须借助 OpenGL、Direct3D(DirectX),这些是为图形渲染(计算机图形学)而设计,而非通用计算。

2. 全球仅约几百人懂得如何利用 GPU 底层能力做科学计算。

CUDA 之后:极大降低门槛,可方便地把天气预测、核聚变、生物蛋白/分子模拟等科学计算搬到 GPU。CUDA 推出后逐渐成为深度学习框架(PyTorch/TensorFlow)、云 ML 服务、部署工具的底层核心。

 3.2 案例一:图像逐像素相减(理解并行)

任务设定:一张 2 万 × 3 万 的图片,每像素是 0~255 的整数。计算"当前像素 − 下一个像素",结果存入 B 矩阵。

算图片大小

- 像素总数 = 20000 × 30000 = 6 亿 个像素

- 每像素 0~255,是 8 位二进制 = 1 byte(字节)

- 6 亿像素 = 6 亿字节

- 单位换算:1KB = 1024 byte,1MB = 1024 KB,1GB = 1024 MB → 1GB = 1,073,741,824 bytes

- 600,000,000 / 1,073,741,824 ≈ 0.5588 G

- A 矩阵约 0.56G,结果 B 矩阵同样大小,两矩阵合计约 1 G

(需要储存计算后的结果,所以需要2个矩阵)

CPU 的计算方式(串行 / 分时)

- 图片加载到内存存为 A 矩阵,共 6 亿个任务,CPU 单核心串行计算。

- CPU 的"多任务"本质是分时计算(假并行):把 1 秒切成很多时间片,每片只处理一个任务。8 核 CPU 真正同时并行的只有 8 个任务,16 核则 16 个。软件开多了会卡,原因即此。(以前xp系统是5毫秒分片)

GPU 的计算方式(真并行)

1. 由 CPU 程序把图片加载到内存(A 矩阵)——GPU 无法独立做这类逻辑操作。

2. 把 A 矩阵从内存复制到显存,得到 A1 矩阵。

3. GPU 数千个核心并行计算 6 亿个任务,结果存入显存的 B1 矩阵。

4. 再由 CPU 把 B1 从显存复制回内存得到 B 矩阵。

> 此流程从 2006 年沿用至今未变。"显存"即显卡上的内存。

3.3 案例:以 RTX 4090 演示任务分配

RTX 4090 规格:24GB 显存,16,384 个 CUDA 计算核心(约两三万元一块)。

- 6 亿任务分给 16,384 核心 → 平均每核 36,621.0938 个任务

- 向上取整:每核 36,622 个;36,622 × 16,384 = 600,014,848(略多于 6 亿)

- 即最后一个核心不必做满 36,622 个,只需做 2 万多个

每个核心如何取属于自己的数据(CUDA 难点之一):

- CUDA 给每个核心一个编号,核心据此知道自己是"第几号小学生"。

- 把 6 亿像素平铺为长序列。注意:做减法需取"下一个像素",所以取数据要向后多取一个

- 第 1 核:取前 36,623 个像素(做 36,622 个任务,多取 1 个)

- 第 2 核:从第 36,623 个起,到 36,622×2+1

- 第 i 核:取第 36,622×(i−1)+1 至 36,622×i+1 的像素值

>工程警示:取数下标差一位(36623 还是 36622)就会让某个线程取到别人的数据。这类错误往往不会导致系统崩溃,而是让模型"变得不准"且难以排查——可能整个训练全错。这正是早年算法工程师天天要算的工作。

另一种取数方式(更常用,尤其 CNN):不拉成长条,保持矩阵形态,用一个可平移的小方格(3×3、5×5、30×30、512×512 等)让每个核心取一个小块。需精确计算每核取哪块、取多大,否则数据重叠或核心忙闲不均。

>显卡利用率:业界能到 80% 已属优秀,95% 极牛。利用率低(如 50%)意味着一半卡常年闲置——既浪费又无法出租。提升利用率的关键就是把任务/数据分配算清楚,让所有核心活均、不取错。

3.4 案例二:自注意力机制如何用 CUDA 并行

设定:序列含 2048 个向量(上下文窗口 2048),任务是预测第 2049 个 token。计算资源 24GB 显存、16,384 核心。

步骤 1:QKV 映射任务

- 每个向量要做 3 次映射(Q、K、V),还要映射成 96 个头

- 映射任务总数 = 2048 × 3 × 96 = 589,824 个

- 各向量映射相互独立,可完全并行,分给 16,384 核心很容易

进一步拆解(100 张卡场景)

- 100 张 4090 共约 160 多万核心,而映射任务才 58 万——核心过剩,需再拆。

- 每个映射任务:输入 12,288 维向量(即 1×12288 矩阵)× (12288×128) 权重矩阵 → 128 维向量(该权重矩阵即 Wq 等神经网络)。

- 一次"1×12288 与 12288×128 相乘"可拆成 128 次向量点乘(两个万维向量点乘得 1 个数字)。

- 于是总任务数 = 589,824 × 128 ≈ 7000 多万 个点乘任务,正好可分给 160 多万核心。

步骤 2:相似度(相关度系数)计算

- 自注意力中,每两个 token 之间都要做一次相似度计算。

- 单个头内:2048 × 2048 ≈ 4,194,304 次相似度

- 96 个头共计:2048 × 2048 × 96 = 402,653,184(约 4 亿)次相似度

- 4 亿任务分给 100 张卡的 160 多万核心,也分得了。

> 至今很多做预训练的公司仍有专人天天做这种任务/数据拆分工作。但更难的往往不是核心分配,而是显存问题新算子问题

3.5 显存计算(以 GPT-3 / 175B 为例)

单层注意力的参数量

- Wq、Wk、Wv 各为 12289×128,共 96 个头;再加输出矩阵 Wo(12289×12288)。

- 这四个矩阵合计 = 12289 × 12288 × 4 = 604,028,928 个参数(约 6 亿)。

- 每个参数为 32 位浮点数,占 4 byte → 2,416,115,712 字节 ≈ 2.25 G

- 再加上 FFN 的 W1、W2(W1 尺寸 = Wq+Wk+Wv+Wo 之和),单层共约 6.75 G

整模型

- 96 层全部加载 = 6.75 × 96 ≈ 648 G

- 加上 embedding、linear 等其他层 ≈ 651 G

推理 vs 训练

-推理:中间计算数据较少(GPT-3 约额外 10G)→ 满打满算约 670 G 显存。

-训练(全量参数微调等同训练):中间计算过程(如每个参数都要存梯度方向,梯度也是浮点数)大约是参数显存的 3 倍。所以训练 GPT-3 总需求 ≈ 651 G ×(1+3)≈ 2400~2600 G 显存。

>显存是瓶颈:用 24G 的卡,先算模型多少 G,再除以单卡显存即可估算所需卡数。

> 训练与推理的卡数通常差约 4 倍(推理 1 卡 → 训练约 4 卡)。

> 训练时间可拉长换卡数,但前提是单批训练数据 + 全部参数 + 中间结果必须能塞进显存。

>参数量单位提醒:B = 10 亿。7B = 70 亿参数(约 20 多 G 显存,单卡可跑);70B = 700 亿;175B = 1750 亿。

3.6 CUDA 之上的关键库与工具

为免去手写任务拆分/数据重组/结果重组的繁琐与易错,英伟达提供了一系列库:

库 / 工具
全称
作用
cuBLAS
CUDA Basic Linear Algebra Subroutines
高性能基础线性代数库:矩阵乘法、向量运算、矩阵分解等。自动处理显存/任务分配优化。
cuDNN
CUDA Deep Neural Network Library
深度学习加速库:卷积、池化、归一化、激活函数等算子的优化实现。改层数/神经元数/激活函数后无需重新手算分配。
NCCL
NVIDIA Collective Communications Library
多 GPU 高效通信库,处理卡间数据交换与同步(如 4 卡换 8 卡)。
TensorRT
推理加速库:把训练好的模型转为高效推理模式,利用冗余计算消除与缓存(如 KV Cache)提速。
NVLink
多 GPU 高速互连(硬件+软件),高带宽低延迟,允许多 GPU 直接共享显存。解决工作站间/卡间数据传输与同步瓶颈。
NVSwitch
连接多 GPU 的硬件交换机(类比网络交换机),每个 GPU 经 NVLink 接入,由 NVSwitch 调度卡间传输。

>KV Cache 原理:推理时窗口滑动,相邻两次预测中约 2047 个 token 两两间的相似度是公共的,无需每次重算 96 层——缓存下来即可大幅提升推理效率。这类优化由英伟达"软(CUDA)+ 硬(GPU)结合"内置实现。

> 一台工作站通常插 8 张卡;超过 8 卡需跨工作站,传输与同步成为大规模(万卡)训练的最大瓶颈。

四、英伟达为什么这么不可替代

国产已有类 CUDA 框架:寒武纪 Cambricon Neuware、燧原 SWA、华为昇腾 CANN,且都支持 TensorFlow / PyTorch。但仍难替代,原因有五:

 4.1 硬件技术差距(含光刻机)

- 被美国禁止对华出口:A100(7nm 制程,约 8~10 万元)、H100(4nm 制程,约 25~50 万元)。

- "纳米制程"指单位面积可容纳的晶体管数量,越小越强。

- 国产现状:14nm 没问题;7nm 能造但良品率不足(成本高、难量产,华为用多重曝光技术);5nm/3nm 尚未突破。

- 进口依赖:2023 年中国进口集成电路约 3493 亿美元(约 2 万亿人民币,超过原油进口的 3374 亿美元);出口约 1000 亿美元(以低端芯片为主)。

核心卡点:光刻机(ASML)

-ASML(荷兰公司)生产能造 7nm 以下制程的 EUV(极紫外光)光刻机,中国买不到。

- 工作原理:用激光击打锡(Sn)液滴产生极紫外光,再经特制镜面收集后打到硅板上"雕刻"芯片。

- 锡液滴直径约 1/3000 万米,真空环境每秒喷射约 5 万次,每颗被激光打两次(先升温、再爆炸发光)。

- 关键供应商:

- 德国 通快(Trumpf) 造激光生成器:散热需求催生磁悬浮轴承风扇**(每秒数千转、无物理摩擦)。

- 德国 蔡司(ZEISS) 造特制反射镜:堆叠数百层、每层几纳米,反射率与平整度极高(放大到德国国土面积,凹凸不超过 1 毫米)。

- 一台 EUV 光刻机约含 45 万个元器件,仅约 15% 由 ASML 自造,其余 85% 来自约 1000 多家供应商(各自研发某元器件十几到二十年)。整机售价约几十亿美元。

- 研发周期约 30 年(按欧洲工作节奏)。最早出资方是 Intel(Intel 认为芯片是好生意、光刻机投产比不划算,遂把技术与资金给了 ASML)。

> 讲者观点:中国虽落后约 10~15 年,但以中国工程师效率(10~15 年的活 3~5 年干完)+ 不按欧洲工时计,3~5 年突破有希望。

4.2 库和工具的成熟度

- CUDA 已发展 18 年(2006 至今),cuBLAS/cuDNN/NCCL/TensorRT/NVLink/NVSwitch 等全、稳定、易用,软硬件磨合多年,深度学习性能极佳。

- "有"和"好用"差距巨大:国产基本都"有"对应库,但与 18 年打磨的成熟度差很多。

典型案例:8 张 A100 打败一座超算中心

- 无锡某超算中心总算力远高于 8 张 A100,但在 GPT 类细粒度任务上败给后者。

- 原因在 NVLink:卡间任务调度可达 40 GB/s,且不经操作系统(直连内存控制器,甚至与 L2 直连),细粒度任务调度性能比传统分布式 IO 调度(约 10 万级)高约 5 个数量级

- 即便 Llama 用一万多张 H100 训练,最易出问题的也是 NVLink 处的传输/同步,英伟达需派工程师与之一起逐个调算子。

 4.3 庞大的开发者社区

- CUDA 生态全球约 400 万开发者,已使用十余年。

- 广泛的社区、教程、文档;开发中几乎任何问题都能找到成熟解决方案。

- 认证体系健全,全球已有数万名认证专家。

- 大量现成模块/代码可在英伟达 GPU 上直接运行;众多第三方模型/应用都基于英伟达生态。

> 讲者认为这是最难逾越的门槛:芯片可大力出奇迹突破,但 400 万人趟过所有坑的生态无法速成。同样 10 人团队,在英伟达生态可量化(3 个月能干什么很清楚),在全新生态可能"一年才干完一个月的活"。

4.4 TensorFlow 和 PyTorch 针对 CUDA 的深度优化

两大框架(均开源,发展近十年):

-TensorFlow:Google Brain 团队开发,2015 发布。可在 CPU/GPU/TPU 上运行。

-PyTorch:Facebook(Meta)AI Research 2016 发布,因动态计算图直观灵活而流行。

- 国产对应:百度 PaddlePaddle(飞桨)

层层封装关系(自底向上)

Hugging Face(Transformer 库,专注大语言模型,几十~100 行代码即可微调)
TensorFlow / PyTorch(管理模型、训练流程、数据;面向所有机器学习/深度学习)
CUDA(+ cuBLAS/cuDNN 等库;负责把小计算单元任务分布到大量显卡)
GPU(显卡硬件)

> "封装 = 抽象":你双击打开软件无需直面操作系统底层指令,因为操作系统和软件做了封装。

两框架对 CUDA 的深度优化

-自动检测 GPU:自动选择可用英伟达 GPU 并切换到 CUDA 后端。

-向量运算加速:利用 CUDA 核心做高效矩阵/向量化计算。

-自动微分:梯度计算(即求梯度,对应微积分的微分)由 CUDA 并行自动完成。

-深度集成 cuDNN/cuBLAS:加速矩阵运算、卷积层、RNN 层等。

-显存自动优化:减少碎片、提升利用率。

-多 GPU 并行优化:通过 NCCL 优化多卡/多节点通信。

-Tensor Core 加速:针对英伟达 GPU 专用矩阵运算硬件单元优化。

> TensorFlow 也支持 Google 自家 TPU 等其他芯片,但与英伟达的深度联合优化最多。国产芯片即便支持两框架,也很难获得这种 10 年以上的深度绑定优化。

4.5 稳健的企业发展

- 英伟达在 GPU 市场(尤其 AI 与高性能计算)占据巨大份额,供应链成熟,能长期稳定供货。

- 强大实力带来快速软硬件迭代,总能最先匹配市场需求(从大模型训练到单个算子支持)。

- 企业采购需考虑供应商存续性:买几十张卡是大投入,必须考虑厂商是否会突然消失(类比"威马"电动车厂商消失的风险)。

五、云解决方案的现状

5.1 GPU 算力的三种常见方案

方案
适用阶段
说明
1. 本地自建 GPU 机器
频繁、反复做模型训练
算账后买比租划算时自建服务器。
2. GPU 在线租赁
产品上线初期 / 验证业务模式
如 AutoDL 等共享平台,只租显卡,其余工作自理。面对流量暴增束手无策。
3. GPU 云服务
真正运营产品
完整云服务(含周边服务),可 7×24 小时响应扩容,应对 AI 产品"一夜暴增"。

> 三种方案对应不同阶段,需按业务发展动态切换:种子用户期可租 → 全面上线用云服务 → 推理量/营收增大、训练频次提高后,自建可能又更划算。

5.2 LLM 是云计算的一种服务(行业共识)

做基座模型的公司,其提供的本质是云计算服务的一种(微软云、阿里云、腾讯云皆如此)。选云厂商与选大模型厂商应合在一起看。

 5.3 传统云计算厂商体量(营收)

厂商
营收
备注
阿里云
2023 约 1053 亿元
互联网云头部
华为云
2023 约 553 亿元
偏正企客户
腾讯云
未公开
财报已不单独披露
百度云
2022 约 177 亿元;2024 Q2 约 51 亿元
天翼云(中国电信)
2023 约 972 亿元
正企客户为主,已与阿里云不相上下
移动云(中国移动)
2023 约 833 亿元
正企客户为主
联通云(中国联通)
2023 约 510 亿元
正企客户为主

> 即便买不到 A100/H100,在这些云平台的某些方案里仍可租到 A100、H100。

5.4 选型视角与讲者观点

核心原则:先想清楚做的是什么生意(2C / 2B / 2G),再决定选什么云、在哪租卡、用谁家大模型。

- 中国 2B 市场中,信息化/数字化/IT 采购金额约 80% 来自正企客户(欧美不同)。做 2B 真正赚钱的多是正企客户方向。

- 公司技术系统部署在哪种云(华为云/天翼云等),就决定了符合相应保密级别的云选择。

讲者个人观点(2C 视角):看好阿里的整体战略与持续性——

- 阿里组合:传统云服务 + GPU 云服务 + Qwen(通义千问)开源模型

- 阿里云已盈利,租其 GPU 做部署能带来额外收入,并反哺传统云(服务器与 GPU 同在阿里云、互相调用性能更好)。因此 Qwen 不必急于靠模型本身赚钱,其开源属性更有持续性

- 对比:智谱 AI(GLM 系列,GLM-4 仅开源 9B 版本,更大版本转向按 token 收费)作为单独创业公司,开源商业模式跑通有难度,持续性不如阿里体系。

- 对比:Llama(Meta)虽开源、投入大(工程师数量近似 OpenAI),但母公司靠社交广告盈利、无自有云计算生态,开源持续性也不如阿里。

> 结论金句:"阿里是卖铲子,不是淘金"——有云计算生态做支撑,开源模型的持续性更值得信任。

> 另一现实约束:云服务一旦用上(Azure/AWS/阿里云),切换成本极高;模型同理,调好的版本不会轻易换。

 学习要点速记

1.CPU vs GPU:CPU 少核强逻辑、串行(分时假并行);GPU 多核弱逻辑、真并行,只擅长简单运算。

2.CUDA:让 GPU 通用计算变简单的并行计算平台 + 编程模型,是英伟达生态的底层基石。

3.会算显存与卡数(最实用):参数量 × 4 byte → 单层 → 总层 → 推理(约 +10G)/训练(约 ×4)→ 除以单卡显存。推理与训练卡数约差 4 倍。

4.生态六件套:cuBLAS、cuDNN、NCCL、TensorRT、NVLink、NVSwitch。

5.封装层级:GPU → CUDA → TensorFlow/PyTorch → Hugging Face。

6.不可替代五因:硬件(光刻机)、库工具成熟度、开发者社区、框架深度优化、企业稳定性——其中生态门槛最难逾越

7.云三方案:本地自建 / 在线租赁 / GPU 云服务,按阶段动态切换。

8.选型逻辑:先定生意类型(2C/2B/2G),再选云、卡、模型。

计算模型使用显存,模糊计算为(多少B)*(使用精度,1字节还是4字节)G,显存需要多少,内存也要比显存多,需要从内存传递到显存。

比如7B模型,16位精度需要显存 7*2=14G显存,推理可以使用8位的就只要7G显存啦,加上其他程序 也需要一点。