一句话:CUDA 先是 NVIDIA 的 GPU 编程平台;「CUDA 生态」是围着它锁出来的库、框架、工具链和人才圈。 有 GPU ≠ 有 CUDA。Apple Silicon 没有 CUDA;AI 圈真正吃饭的也很少是手写 kernel,而是库和引擎。
CUDA(Compute Unified Device Architecture)是 NVIDIA 给自家 GPU 的并行计算栈:编程模型、编译器、运行时、驱动接口。你写一个在 GPU 上跑的函数,启动成千上万个线程,对同一件事做一遍。
它不是「所有显卡编程」的统称。AMD 走 ROCm,Apple 走 Metal / MLX / PyTorch MPS,跨厂商还有 OpenCL、Vulkan compute、SYCL。2026 年的训练和推理默认路径,在绿卡上几乎等于 CUDA;换厂要换一整圈软件,不只换驱动。
游戏用图形管线(三角形、着色器)。CUDA 把同一块硅当通用计算器。同一张卡可以打游戏,也可以跑矩阵乘。AI 里真正吃肉的是 Tensor Core(矩阵乘法硬件);普通 CUDA Core 是边角。
别混三个版本 Driver 是系统里的 NVIDIA 驱动;CUDA Toolkit 是 nvcc、头文件、runtime(开发用);Compute Capability 是这张卡的硬件代数(如 8.9、9.0)。软件写「需要 CUDA 12.x」指 toolkit/runtime ABI,不是「有块绿卡就行」。驱动太旧,新 toolkit 起不来。
这四个词在 CUDA / AI 语境里被用滥,但层级不同。封面就是按这个顺序画的。
库是别人写好、你调用的函数集合。cuBLAS 给你矩阵乘,cuDNN 给你卷积和注意力,NCCL 给你多卡同步。框架(PyTorch)会再把这些库包一层,所以你日常写 tensor.cuda() 时,真正干活的经常是库里的 kernel,不是你自己的 .cu 文件。
库不是框架,也不是引擎。框架管训练循环、自动微分、模块拼装;库管「这一步在 GPU 上怎么算最快」。没有库,CUDA 只是一门语言;有了库,它才变成能吃饭的生态。
中文「核心」在这里至少有三个完全不同的东西:
营销说「某卡有 1 万 CUDA Core」,说的是硬件工人数量。论文说「我们写了一个 attention kernel」,说的是一段 GPU 程序。Compute Capability 则决定这代核心能用哪些指令(有没有某代 Tensor Core)。
引擎是针对这张卡、这个模型编好的执行体:算子融合、内存规划、精度(FP16 / FP8 / INT8)都冻在里面,然后反复跑。TensorRT 产出的叫 engine;vLLM 把自己叫 inference engine。训练框架一般不叫引擎——训练要改权重、要反传,形状和路径一直在变。
可以记:库是零件目录,引擎是组装好的机器。同一份权重,换成另一张卡或另一套精度,常常要重新编一版引擎。
吞吐是单位时间处理量:大模型推理常写 tokens/s,图像写 images/s,训练写 samples/s。对立面是延迟(latency):从发请求到第一个结果回来要多久。
两者经常打架。把 64 条请求打成一个 batch,吞吐上去,单条等待变长。vLLM 这类引擎的工作,很大一部分就是在延迟约束下把吞吐打满——让 GPU 别闲着。卡上核心再多、库再快,batch 太小,吞吐照样难看:工人都在等数据。
一句串起来:核心提供算力 → 库把算力变成可调用的算子 → 引擎把模型和卡编成一条管线 → 吞吐是这条管线跑出来的成绩。缺任何一层,上一层的数字都是空的。
CPU 这边叫 Host(主机 + 内存),GPU 这边叫 Device(设备 + 显存)。数据先拷到显存,kernel 在 GPU 上算,结果再拷回来。拷贝经常比计算还慢——所以库和引擎拼命减少来回、把算子融在一起。
启动一个 kernel,运行时把它切成 grid → block → thread。每个 thread 处理数组里的一小块。几万个 thread 同时跑,靠的是「同一套指令、不同数据」(SIMT),不是 CPU 那种少数聪明核。
狭义 CUDA 只到 runtime 和编译器。大家说生态,指缺一块软件整条链就不转。它不是 Linux 那种开放生态,更像单厂商护城河:硬件 → CUDA → 库和框架 → 人才。
AMD 的 ROCm、Apple 的 Metal 都能「算」,但接不住这圈库和默认路径,所以换卡的成本是生态成本,不是插槽成本。
按「它干什么 / 你什么时候会碰到」记。先库和引擎,再框架,再工具链。
| 名词 | 它是什么 | 你什么时候碰到 |
|---|---|---|
| cuBLAS | GPU 线性代数库。矩阵乘、向量加,网络的底。 | 几乎所有 dense 层;PyTorch 的 matmul 底下常是它。 |
| cuDNN | 深度学习原语库。卷积、注意力、归一化、激活。 | 训练/推理框架的默认 GPU 后端。 |
| NCCL | 多卡通信库(读 Nickel)。梯度同步、拆 batch。 | 一张卡装不下、要 DDP / 张量并行时。 |
| TensorRT | 推理编译器,产出针对这张卡的 engine。 | 部署、降精度、融算子;训练一般不走它。 |
| PyTorch | 主流训练框架(也常推理)。NVIDIA 上默认 CUDA。 | 写模型、反传、.cuda() / .to(device)。 |
| vLLM | 大模型推理引擎。高吞吐、paged attention。 | 生产里对外提供 Llama / Qwen 这类服务。 |
| nvcc | NVIDIA 编译器。把 .cu 编成 GPU 二进制。 |
自写 CUDA C++,或装带 CUDA 扩展的包。 |
| Nsight | 官方 profiler / 调试器。 | kernel 慢:算力、显存还是在等待。 |
| Driver | 操作系统里的 NVIDIA 内核模块。 | 卡要被认出、runtime 要能说话。太旧则新 CUDA 起不来。 |
| Compute Capability | 卡的硬件代数(8.9、9.0…)。决定指令和 Tensor Core 代际。 | 软件写 sm_90 指这个,不是 CUDA 版本号。 |
| kernel | 在 GPU 上启动的函数(软件)。 | 写 CUDA、读论文、看 Nsight 火焰图。 |
| CUDA Core / Tensor Core | 硬件计算单元。前者通用,后者矩阵乘。 | 看规格、屋顶线、为什么 FP8 更快。 |
人和课:新模型/新 kernel 论文默认读者懂这套词(occupancy、NCCL、sm_xx)。岗位写 CUDA 工程师,招的是会写/调 kernel、会挖 Nsight、会把模型和卡对齐的人,不是会调 PyTorch API 就够。
训练路径多停在 PyTorch + cuDNN/cuBLAS +(多卡)NCCL。部署再分叉:要极致单卡延迟/融合,走 TensorRT engine;要大模型在线服务和高吞吐,走 vLLM 这类引擎。两者都坐在同一代 Compute Capability 的硅上,由驱动托着。
你写 PyTorch
→ 调 cuDNN / cuBLAS(库,核心上跑 kernel)
→ 多卡走 NCCL
→ 部署经 TensorRT 或 vLLM(引擎)
→ 成绩用吞吐 / 延迟衡量
→ 全跑在某代 Compute Capability 的卡上
这台 Mac mini Lume VM 是 arm64,没有 CUDA。学概念、读这篇够;要动手写 kernel 或跑 vLLM 的 NVIDIA 路径,需要 Win11 上的绿卡,或云上租一张。
只做 OpenClaw / 本地小模型,优先 MLX 和 Ollama,别为 CUDA 改机器。CUDA 生态的护城河对 NVIDIA 是资产,对你是选型约束:选定绿卡栈,再享受库和引擎;选定 Apple 栈,就不要用 CUDA 的词当验收标准。
收束:CUDA 是 API;CUDA 生态是 NVIDIA 把加速计算焊在自己卡上的那套。库提供算子,核心提供工人,引擎提供编好的机器,吞吐是成绩单。