NVIDIA Volta V100 — 第一代 Tensor Core 把 AI 训练算力一夜抬 6 倍
待复核Volta 是 NVIDIA 2017 年发布的 GPU 架构(pascal-architecture-2016 之后一代),数据中心代表芯片是 GV100(Tesla V100)。它在一代之内做了三件改写底层假设的事:第一代 Tensor Core + 独立线程调度(ITS)+ NVLink 2.0——前者把 AI 训练算力相对 P100 的 FP16 packed 路径抬约 6×(营销峰值可达约 12×),中者推翻 GPU 编程”warp 步调一致”的最底层假设,后者把 Pascal 的 8 卡 DGX-1 升到 16 卡 DGX-2。
日常类比:Pascal 给工厂修了高速公路(HBM2)和厂间专线(NVLink);Volta 是在车间加一台专门拼乐高 4×4 块的机器(Tensor Core)+ 让流水线每个工人不再被强制一起抬手(ITS)+ 把厂间专线扩到 6 条(NVLink 2)——既加新硬件,又改旧规矩。
落到硅片:GV100 约 211 亿晶体管、TSMC 12nm FFN、815 mm²、300W TDP。算力侧是 80 个 SM(可当成 80 个并行工位)× 64 FP32 = 5120 FP32 + 2560 FP64,外加 640 个 Tensor Core(专门做小矩阵乘加的单元);显存 16GB / 32GB HBM2、约 900 GB/s。代表卡:Tesla V100 SXM2 / PCIe、DGX-2(16× V100 + NVSwitch)。
不理解 V100,下面这些事都没法解释:
- 为什么 2018 年 BERT / GPT-2 / T5 训练几乎全在 V100 上——Tensor Core 让 FP16 GEMM 从 P100 约 21 TFLOPS 跳到约 125 TFLOPS(≈6×)
- 为什么 CUDA 9 起代码要加
__syncwarp()——Volta ITS 让 warp 内线程不再天然同步,老代码默认假设崩了 - 为什么 DGX-2 卖约 39.9 万美元也供不应求——16 卡全互联(NVSwitch)+ 约 2.4 TB/s 级内部带宽,是当时能装下大模型的整机标杆
- 为什么 混合精度训练(AMP) 在 2018-2019 才真正普及——Tensor Core 给”FP16 输入 / FP32 累加”提供专用硬件
- 为什么 V100 32GB 直到 2024 年还在跑 LLaMA-7B 微调——sm_70 兼容 + 32GB 显存让它活了约 7 年
V100 在 pascal-architecture-2016 之上做了 四件事:
-
Tensor Core 第一代:每个 SM 内 8 个 Tensor Core,每个一拍算 D = A×B + C(A、B 为 4×4 FP16,C、D 为 4×4 FP32)——一拍 64 次 FMA。640 × 1.53 GHz × 64 FMA × 2 ≈ 125 TFLOPS。类比:通用工人改成专拼 4×4 乐高的机器。意义:训练算力代际换挡。
-
Independent Thread Scheduling(ITS):Pascal 前一个 warp 32 线程共享一个 PC,if/else 必须步调一致。Volta 给每个线程独立 PC + call stack,分歧可并发。类比:工人不再强制齐步走。意义:可写细粒度同步,但依赖 lockstep 的老代码会坏。
-
NVLink 2.0:单链路约 50 GB/s,每卡 6 条合计约 300 GB/s(Pascal 约 160)。新增 cache coherence。配合 NVSwitch(DGX-2 上 12 颗),16 卡两两约 50 GB/s 全连接。类比:厂间专线加宽并换成全交换机。
-
L1 + shared memory 合体:Pascal L1 24KB / shared 64KB 分离;Volta 合成 128KB 可配置(shared 0–96 KB,余下当 L1)。类比:两个仓库打通,空闲货架给另一方用。
这四件事怎么互为支柱
Section titled “这四件事怎么互为支柱”- 没 Tensor Core,AI 训练算力跳变发生不了
- 没 ITS,warp 内 producer-consumer 等细粒度算法难写
- 没 NVLink 2 + NVSwitch,DGX-2 16 卡训练就是带宽地狱
- 没 L1 / shared 合体,喂 Tensor Core 时 shared 更容易先打满
案例 1:cuBLAS 自动走 Tensor Core
Section titled “案例 1:cuBLAS 自动走 Tensor Core”// CUDA 9+:FP16 输入 + FP32 累加,走 Tensor CorecublasGemmEx(handle, CUBLAS_OP_N, CUBLAS_OP_N, m, n, k, &alpha, A, CUDA_R_16F, lda, B, CUDA_R_16F, ldb, &beta, C, CUDA_R_32F, ldc, CUDA_R_32F, CUBLAS_GEMM_DEFAULT_TENSOR_OP);逐部分解释:
CUDA_R_16F:A/B 用半精度喂 Tensor CoreCUDA_R_32F累加:结果用 FP32 累加,训练更稳(AMP 默认路径)_TENSOR_OP:显式选 Tensor Core;M/N/K 宜为 8 的倍数,否则可能静默回退 SIMT
案例 2:ITS 让老 reduction 必须显式同步
Section titled “案例 2:ITS 让老 reduction 必须显式同步”// Pascal 假设:warp 内 32 线程 lockstep,下面常"能跑"if (threadIdx.x < 16) sdata[threadIdx.x] += sdata[threadIdx.x + 16];// Volta ITS:两半线程可并发 → 可能读到未写完的值if (threadIdx.x < 16) sdata[threadIdx.x] += sdata[threadIdx.x + 16];__syncwarp(); // CUDA 9 起:显式 warp barrier(最小示意)逐部分解释:
- 错在哪:旧代码依赖”同 warp 天然同步”,省掉 barrier
- 为何竞态:ITS 下分歧分支可并发,读可能早于另一半写完
- 怎么修:共享读写之间加
__syncwarp();真实 port 按 CUDA 9 ITS 指南系统改
案例 3:DGX-2 — 16 卡全互联
Section titled “案例 3:DGX-2 — 16 卡全互联”DGX-2 (2018-03): 16× V100 32GB + 12× NVSwitch + 2× Xeon Platinum 8168任意两卡 ≈50 GB/s;峰值约 2 PFLOPS Tensor、512GB HBM2;标价约 399000 USD逐部分解释:16 卡 = 训练状态装得下;NVSwitch 全连接 = all-reduce 不再走 hybrid cube mesh;512GB 总显存 = 当时单机大模型标配。后续 DGX A100 / H100 仍是 N 卡 + NVSwitch + 整柜。
案例 4:BERT 时代的 V100 实验台
Section titled “案例 4:BERT 时代的 V100 实验台”Devlin et al. BERT (2018-10): 论文主报 16× Cloud TPU社区复现常见: 8× V100 32GB + Tensor Core + AMP后续 RoBERTa / T5 / GPT-2 训练集群也大量用 V100逐部分解释:32GB 扛住长序列/大 batch;Tensor Core 提供 FP16 GEMM;AMP 把混合精度落到硬件。没有这三者,2018-2020 NLP 训练门槛会高很多。
- Tensor Core 维度对齐:M/N/K 非 8 倍数时 cuBLAS 可能静默回退 SIMT——用
nsys看 kernel 名确认。 - ITS 让旧 reduction 偶发错:本地几百次没事、上线随机 NaN——warp 共享读写加
__syncwarp()。 - PCIe V100 只有 2 条 NVLink:SXM2 才 6 条;多卡前先确认形态。
- 16GB vs 32GB:2017 首发 16GB,2018-Q4 才 32GB;BERT-Large / GPT-2 通常要 32GB。
- FP16 累加追速:大模型易掉精度;AMP 默认 FP32 累加更稳。
- NVSwitch 仅 DGX-2 / HGX-2:自建 8 卡常是 hybrid cube mesh,不是全连接。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 2018-2020 大模型训练 —— BERT / GPT-2 / T5;单卡 16/32GB,多卡常见 8(DGX-1V)或 16(DGX-2)
- 混合精度训练(AMP) —— Tensor Core 是硬件支点
- HPC + AI 双负载 —— FP64 约 1/2 FP32 保留 + Tensor 加新
不适用:
- GPT-3 175B 级大规模训练 —— 需 A100 80GB / H100 + 更大互联
- BF16 / TF32 —— Ampere 起才有;V100 仅 FP16 + FP32
- Transformer Engine / FP8 —— Hopper 起才有
- 桌面入门 —— 无消费版,单卡当时约 8000+ 美元
- 2:4 结构化稀疏 —— A100 起才有
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2017-05 GTC:发布 V100 + Tensor Core,营销称 AI 算力可达约 12×
- 2017-12:V100 量产,FAIR / OpenAI / Google Brain 抢首批
- 2018-03:DGX-2 + NVSwitch,16 卡全连接整机品类诞生
- 2018-10 / Q4:BERT 发表;V100 32GB 上市
- 2019-2020:GPT-2 / RoBERTa / T5 大量用 V100;2020-05 A100 接棒(V100 仍长尾)
- 专用单元 vs 通用算力:Tensor Core 是 GPU 史上首次为矩阵乘造专用硬件,开启后续 Transformer Engine / FP4 路线
- 抽象层穿透代价:ITS 改 warp 假设 → 祖传 CUDA 必须重写
- 整机思维放大:DGX-1V → DGX-2 → SuperPOD,卡数与互联同代升级
- 兼容性是长尾根:sm_70 二进制兼容让 V100 用了约 7 年
- 白皮书:NVIDIA Tesla V100 Whitepaper(2017)
- ITS:Inside Volta
- Tensor Core:Programming Tensor Cores in CUDA 9
- pascal-architecture-2016 —— 直接前代
- tesla-architecture-2008 —— SIMT + warp=32 鼻祖
- cuda —— sm_70 /
__syncwarp()/wmma
- tesla-architecture-2008 —— SIMT 鼻祖;Volta 仍用 warp=32 但加 ITS
- fermi-architecture-2010 —— ECC + cache 路线在 Volta 延续
- pascal-architecture-2016 —— HBM2 + NVLink 前代;Volta 升到约 900 GB/s + NVLink 2 约 300 GB/s
- attention —— 2017 Transformer 与 V100 同年,后续训练主力台
- cuda —— Compute Capability 7.0 = Volta
- ampere-architecture-2020 —— NVIDIA Ampere — 第三代 Tensor Core 加 TF32 / BF16 / FP64,结构化稀疏 + MIG 重写大模型时代硬件假设
- blackwell-architecture-2024 —— NVIDIA Blackwell — 双 die NV-HBI + 第二代 Transformer Engine + FP4 让万亿参数训练日常化
- burgess-2020-turing-rt —— Burgess 2020 RTX ON — Turing 把光线追踪做进硅片
- cutlass-2020 —— CUTLASS — 把 SOTA GEMM 拆成可组合的 C++ 模板层级
- gpudirect-rdma-2014 —— GPUDirect RDMA — 让网卡直接读写 GPU 显存
- hopper-architecture-2022 —— NVIDIA Hopper — Transformer Engine + FP8 + TMA + Thread Block Cluster 把硅片为 LLM 量身定制
- lindholm-2008-tesla —— Lindholm 2008 Tesla — SM、warp、SIMT 这套词汇的官方出生证明
- nvlink-nvswitch-2018 —— NVLink 2.0 + NVSwitch — 把 16 块 GPU 拼成一台机器
- turing-architecture-2018 —— NVIDIA Turing — RT Core 把光追装进消费卡,Tensor Core 第二代下放 INT8
- unified-memory-2014 —— CUDA Unified Memory — 让 CPU 和 GPU 共享一张内存地图