跳转到内容

NVIDIA Volta V100 — 第一代 Tensor Core 把 AI 训练算力一夜抬 6 倍

是什么

Volta 是 NVIDIA 2017 年发布的第六代通用 GPU 架构(前代见 pascal-architecture-2016),数据中心代表芯片是 GV100(Tesla V100)。它在一代之内做了三件改写底层假设的事:第一代 Tensor Core + 独立线程调度(ITS)+ NVLink 2.0——前者把 AI 训练算力一夜跳 6-12 倍,中者推翻 GPU 编程”warp 步调一致”的最底层假设,后者把 pascal-architecture-2016 的 8 卡 DGX-1 升到 16 卡 DGX-2。

日常类比:pascal-architecture-2016 给工厂修了高速公路(HBM2)和厂间专线(NVLink);Volta 是直接在车间里加了一台专门拼乐高 4×4 块的机器(Tensor Core)+ 让流水线每个工人不再被强制一起抬手(ITS)+ 把厂间专线再扩到 6 条(NVLink 2)——既加新硬件,又改旧规矩。

落到硅片:GV100 = 211 亿晶体管、TSMC 12nm FFN、815 mm² 当时史上最大量产芯片、80 SM × 64 FP32 = 5120 FP32 + 2560 FP64 + 640 Tensor Cores、16GB / 32GB HBM2、900 GB/s 带宽、300W TDP。代表卡:Tesla V100 SXM2 / PCIeDGX-2(16× V100 + NVSwitch 全互联)

为什么重要

不理解 V100,下面这些事都没法解释:

  • 为什么 2018 年 BERT / GPT-2 / T5 训练几乎全在 V100 上——Tensor Core 让 FP16 GEMM 算力从 P100 的 21 TFLOPS 跳到 125 TFLOPS
  • 为什么 CUDA 9 起代码要加 __syncwarp()——Volta ITS 让 warp 内线程不再天然同步,老代码默认假设崩了
  • 为什么 DGX-2 卖 39.9 万美元也供不应求——16 卡全互联(NVSwitch)+ 2 PB/s 内部带宽,是当时唯一能装下大模型的整机
  • 为什么 混合精度训练(AMP) 在 2018-2019 才真正普及——Tensor Core 给”FP16 输入 / FP32 累加”提供专用硬件,AMP 不再是空中楼阁
  • 为什么 V100 32GB 直到 2024 年还在跑 LLaMA-7B 微调——架构兼容性 + 32GB 显存让它活了 7 年

核心要点

V100 在 pascal-architecture-2016 之上做了 四件事

  1. Tensor Core 第一代:每个 SM 内 8 个 Tensor Core,每个一拍算 D = A×B + C,其中 A、B 是 4×4 FP16 矩阵,C、D 是 4×4 FP32 矩阵——一拍 64 次 FMA。640 Tensor Cores × 1.53 GHz × 64 FMA × 2 ≈ 125 TFLOPS——是 P100 FP32 的 8 倍、FP16 packed 的 ~6 倍。意义:训练算力跳变,DL 硬件代际换挡。

  2. Independent Thread Scheduling(ITS):Pascal 之前一个 warp 32 线程共享一个 program counter,遇到 if/else 必须步调一致轮流跑两支。Volta 给每个线程独立 PC + call stack,分歧分支可并发。意义:可以写”线程间细粒度同步”的算法(生产者-消费者、锁),但老代码隐式依赖 lockstep 的全部坏掉

  3. NVLink 2.0:每条带宽从 40 GB/s 升到 50 GB/s,每卡从 4 条扩到 6 条,合计 300 GB/s(Pascal 160)。新增 cache coherence——CPU/GPU 可共享内存视图。配合 NVSwitch(DGX-2 上 12 颗交叉开关),16 卡两两全连接 50 GB/s,告别 hybrid cube mesh 拓扑。

  4. L1 + shared memory 合体:Pascal L1 24KB / shared 64KB 分离;Volta 合成 128KB 统一缓存可配置——shared 占 0/8/16/32/64/96 KB 自选,余下当 L1。意义:两个池子互通有无,shared 用不完的算力当 L1 加速规则访存。

这四件事怎么互为支柱

  • Tensor Core,AI 训练算力跳变发生不了——硬件 AI 化的转折点
  • ITS,更细粒度的并行算法(warp 内 producer-consumer)没法写
  • NVLink 2 + NVSwitch,DGX-2 16 卡训练 GPT-2 就是带宽地狱
  • L1 / shared 合体,Tensor Core 喂数据时 shared memory 先打满

实践案例

案例 1:cuBLAS 自动走 Tensor Core

// CUDA 9+ cuBLAS GEMM,FP16 input + FP32 accumulate
cublasGemmEx(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); // 走 Tensor Core

只要矩阵维度是 8 的倍数、走 _TENSOR_OP 算法,cuBLAS 自动用 Tensor Core——开发者无需写汇编。这是 PyTorch / TensorFlow 在 V100 上一夜加速的底座。

案例 2:ITS 让老代码必须显式同步

// Pascal 时代:warp 内 32 线程天然 lockstep
if (threadIdx.x < 16) { sdata[threadIdx.x] += sdata[threadIdx.x + 16]; }
// Volta 上:分歧分支可并发,上面这行可能在另一半线程写完之前读
// 必须改成:
if (threadIdx.x < 16) { sdata[threadIdx.x] += sdata[threadIdx.x + 16]; }
__syncwarp(); // 显式 warp 内 barrier,CUDA 9 新增

意义:所有 CUDA 9 之前写的”省掉同步”reduction / scan kernel 在 V100 上是错的,可能 99% 跑对偶尔崩。NVIDIA CUDA 9 文档专门给一章讲怎么 port 老代码。

案例 3:DGX-2 — 16 卡全互联

DGX-2 (2018-03): 16× V100 32GB + 12× NVSwitch + 2× Xeon Platinum 8168
NVSwitch 拓扑: 任意两卡 50 GB/s(NVLink 2 全速)
峰值: 2 PFLOPS Tensor Core 算力、512GB HBM2 总显存
价格: 399000 USD

意义:第一台单机能装下 GPT-2(1.5B)训练状态的整机。后续 DGX A100 / DGX H100 / DGX SuperPOD 全是这个套路:N 卡全互联 + NVSwitch + 整柜出货

案例 4:BERT 论文实验台

Devlin et al., "BERT: Pre-training of Deep Bidirectional Transformers", 2018-10
BERT-Large: 16× Cloud TPU 训 4 天(论文报告)
Hugging Face / NVIDIA 复现: 8× V100 32GB + Tensor Core + AMP
后续 RoBERTa / T5 / GPT-2 训练几乎全部 V100

V100 32GB + Tensor Core + AMP 是 2018-2020 NLP 模型训练标配——没有它,BERT 的 1024 batch / 512 seq 跑不动。

踩过的坑

  1. Tensor Core 维度对齐:M / N / K 必须是 8 的倍数,不对齐 cuBLAS 静默 fallback 到普通 SIMT 路径——你看见 GEMM 时间没变,以为 Tensor Core 没坏,其实根本没用上。nsys / nvprof 看 kernel 名才能确认。

  2. ITS 让旧 reduction 偶发错:内部测过几百次没事,上线后某次随机 NaN——根因是 warp 内分歧分支不再 lockstep。修法:所有 warp 内共享读写之间加 __syncwarp()

  3. PCIe V100 只 2 条 NVLink:买 PCIe 形态以为也是 6 条 NVLink → SXM2 才 6 条,PCIe 仅 2 条且需主板支持。多卡部署前必须确认形态。

  4. 16GB vs 32GB:2017 首发 16GB,2018-Q4 才 32GB。BERT-Large / GPT-2 必须 32GB,16GB 卡训练要做 gradient checkpointing。买二手 V100 必须看清显存。

  5. Tensor Core FP16 累加 vs FP32 累加:cuBLAS CUBLAS_GEMM_DEFAULT_TENSOR_OP 默认 FP32 累加(推荐),但有些教程让用 FP16 累加追性能——大模型训练精度会掉,loss 发散。AMP 默认 FP32 累加是对的。

  6. NVSwitch 仅 DGX-2 / HGX-2 有:自建集群 8 卡 V100 走 NVLink hybrid cube mesh(同 DGX-1V),不是全连接——多卡 all-reduce 拓扑要按 mesh 写。

适用 vs 不适用场景

适用

  • 2018-2020 大模型训练 —— BERT / GPT-2 / T5 / RoBERTa 主力卡
  • 混合精度训练(AMP) —— Tensor Core 是 AMP 的硬件支点
  • 多卡训练 8-16 卡规模 —— DGX-1V / DGX-2 + NVLink 2 + NVSwitch
  • HPC + AI 双负载 —— FP64 1/2 FP32 保留 + Tensor Core 加新

不适用

  • LLM 大规模训练(GPT-3 175B 起) —— 需要 A100 80GB / H100 + BF16 + 更大 NVLink
  • BF16 / TF32 精度 —— Ampere A100 才支持,V100 只有 FP16 + FP32
  • Transformer Engine / FP8 —— Hopper H100 起才有
  • 桌面 DL 入门 —— V100 没消费版,单卡 8000+ 美元
  • 第二代 Tensor Core 稀疏加速 —— A100 起才有 2:4 结构化稀疏

历史小故事(可跳过)

  • 2017-05 GTC:黄仁勋发布 V100 + Tensor Core,“AI 算力跳变 12 倍”——业界第一次看见专用 AI 加速单元
  • 2017-12:V100 量产,FAIR / OpenAI / Google Brain 抢首批
  • 2018-03:DGX-2 + NVSwitch 发布,16 卡全连接整机品类诞生
  • 2018-10:BERT 论文发表,V100 + Tensor Core + AMP 成 NLP 训练标配
  • 2018-Q4:V100 32GB 上市,BERT-Large / GPT-2 训练门槛降低
  • 2019:GPT-2 / RoBERTa / T5 几乎全在 V100 集群训练
  • 2020-05:Ampere A100 发布,V100 王座让位(但仍长尾)
  • 2024:V100 32GB 在 Kaggle / Colab Pro / 二手市场仍跑 LLaMA-7B 微调

学到什么

  1. 专用单元 vs 通用算力:Tensor Core 是 GPU 历史上第一次”为单一负载(矩阵乘)造专用硬件”——和 tesla-architecture-2008 时代”通用 SIMT 跑万物”的理念分叉,开启 H100 Transformer Engine / Blackwell FP4 的专用化路线
  2. 抽象层穿透代价:ITS 改 warp 调度 → CUDA 编程模型最底层假设变 → 所有用 warp lockstep 的代码必须改。架构升级有时会让”祖传代码”必须重写
  3. 整机思维继续放大:DGX-1V → DGX-2 → SuperPOD,每代卡数翻倍 + 互联升级,AI 工厂概念越做越大
  4. AI 硬件代际由”算力跳变”定义:Pascal → Volta = 6× FP16 训练算力跳变,是行业公认的代际分水岭。后续 Ampere / Hopper 也都靠”算力大跳”换代
  5. 兼容性是长尾的根:V100 用了 7 年,因为 sm_70 二进制兼容、CUDA 持续维护——架构师设计时考虑”7 年后还在跑”是值得的

延伸阅读

关联