AMD 送了块顶级 GPU 给黑客,他能打穿英伟达 20 年的软件帝国吗?

32 阅读8分钟

引言

今天(6月5日),AI 圈流传着一则颇具黑客浪漫色彩的新闻:AMD 主动把顶级 AI 加速卡送给了传奇黑客 George Hotz——就是那个 17 岁破解 iPhone、18 岁破解 PS3 的人。

Hotz 的判断很直接:英伟达真正的护城河不是 GPU 硬件,而是 CUDA 软件生态。 他声称要用「两万行代码」撕开这道壁垒。

这句话乍听很豪气,但仔细想想会让人背脊发凉——CUDA 生态真实的代码规模,远不止两万行。

作为一个长期盯着 AI 基础设施的观察者,我想借今天这个新闻,认真讲清楚一件事:CUDA 的护城河到底建在哪里,为什么这么多年没有人能复制?


问题背景:GPU 不贵,但用 GPU 的"语言"贵

先说一个容易被忽视的事实。

从纯硬件算力论,AMD 的旗舰卡 MI300X 理论峰值算力(1307 TFLOPS FP16)已经超过英伟达 H100(989 TFLOPS),而且配备了惊人的 192GB HBM3 显存——是 H100 的 2.4 倍。

价格上,AMD 也更便宜。

但现实是:2026 年,全球 AI 训练市场英伟达占有率仍然超过 80%。

原因只有一个:硬件买来了,软件跑不起来。

这里说的"软件",不是一个 .exe 或一个 Python 包,而是一个已经运转了 20 年的完整软件生态——CUDA。


技术原理:CUDA 护城河的四层结构

要理解 CUDA 为什么难复制,需要把它拆成四层来看。

第一层:编程模型——思维方式的迁移成本

CUDA 的核心是一套 GPU 并行编程抽象。它把 GPU 计算组织成这样一个层次结构:

Thread(线程)
  └── Warp(32个线程的执行单元)
        └── Block(若干 Warp 构成的块)
              └── Grid(若干 Block 构成的网格)

这个抽象看起来简单,但"Warp 是以 32 线程为单位同步执行的"这一设计,深刻影响了全球开发者 20 年来写并行代码的方式。

比如,一个经典的矩阵乘法 CUDA Kernel:

// CUDA 矩阵乘法 Kernel(简化版)
__global__ void matmul(float* A, float* B, float* C, int N) {
    // 每个线程负责计算 C 矩阵的一个元素
    int row = blockIdx.y * blockDim.y + threadIdx.y;
    int col = blockIdx.x * blockDim.x + threadIdx.x;
    
    float sum = 0.0f;
    for (int k = 0; k < N; k++) {
        sum += A[row * N + k] * B[k * N + col];
    }
    C[row * N + col] = sum;
}

// 调用:16x16 线程块
dim3 blockSize(16, 16);
dim3 gridSize((N + 15) / 16, (N + 15) / 16);
matmul<<<gridSize, blockSize>>>(A, B, C, N);

而 AMD 的 ROCm/HIP 选择了 Wavefront = 64 线程。别看只是数字不同,这意味着所有针对 Warp=32 精心调优过的 Kernel——包括 Warp-level 原语(__shfl_sync__ballot_sync)——迁移到 AMD 都需要重写。

这不是翻译问题,这是思维模式的迁移

第二层:高性能算子库——20 年工程师心血的结晶

光有编程模型不够,AI 框架真正调用的是底层算子库。

CUDA 生态的核心库矩阵如下:

CUDA 核心库生态
├── cuBLAS     ← 矩阵运算,所有深度学习的基石
├── cuDNN      ← 卷积/注意力/归一化,已深度优化 10 年
├── cuFFT      ← 快速傅里叶变换
├── NCCL       ← 多卡通信,分布式训练的核心
├── TensorRT   ← 推理引擎,量化/融合算子
└── CUTLASS    ← 模板化矩阵乘法库,FlashAttention 的底层

这些库不是"可以用",而是"被数百万工程师踩过所有 corner case 之后的稳定产物"。

以 cuDNN 的卷积为例,它内部根据输入 shape、硬件型号、batch size 自动选择最优算法(Winograd、FFT、直接卷积),这背后是英伟达工程师逐款 GPU 手动调优的产物。

AMD 的对应物 MIOpen 也在追赶,但差距仍然明显,尤其在:

  • Transformer 注意力机制的 FlashAttention 优化
  • 混合精度(BF16 + FP8)训练
  • 动态 shape 推理

第三层:PyTorch/JAX 的深度绑定——生态的"引力场"

深度学习框架是 CUDA 护城河的"引力场"。

PyTorch 与 CUDA 的绑定已经到了分子级别:

# PyTorch 内部,几乎所有算子都走这个路径
# aten/src/ATen/native/cuda/...(数千个 CUDA 专属 kernel)

import torch

# 这一行背后:torch.Tensor 的存储、autograd 引擎、
# 算子分发、内存池,全部与 CUDA 深度集成
x = torch.randn(1024, 1024, device='cuda')
y = torch.matmul(x, x.T)  # 实际调用 cublas + cuda memory manager

# ROCm 路径虽然存在,但:
# 1. 版本滞后 1-2 个月
# 2. 部分自定义算子(Triton kernel)ROCm 不支持
# 3. CUDA Graph 在 ROCm 上支持不完整

更致命的是 Triton——OpenAI 开源的 GPU 编程语言,现在大量 FlashAttention、混合精度 Kernel 都用 Triton 写,而 Triton 的主要优化目标是英伟达 GPU。

第四层:工具链生态——"调试 GPU 程序"的能力壁垒

这一层最容易被忽视,却是实战中最痛苦的。

  • Nsight Compute:可以精确到每个 SM(流处理器)的指令级性能分析
  • cuda-gdb:GPU 代码调试器,支持断点、内存检查
  • CUDA sanitizer:检测内存越界、数据竞争

AMD 的对应工具(rocgdb、rocProf、Omniperf)虽然在进步,但与英伟达工具链在文档质量、Stack Overflow 资源、企业支持上的差距,用"代际差"来形容并不夸张。


代码示例:tinygrad 的反叛哲学

George Hotz 的 tinygrad 是目前最有趣的"反 CUDA"尝试。

它的核心设计哲学是:用最少的代码支持最多的硬件后端

# tinygrad 的极简设计理念
# 整个框架核心只有约 2000 行 Python

from tinygrad.tensor import Tensor
from tinygrad.helpers import Timing

# 同一套代码,可以跑在:
# - CUDA(英伟达)
# - Metal(苹果 M 系列)
# - ROCm(AMD)
# - WebGPU(浏览器)
# - CPU

# 设置后端:AMD GPU
import os
os.environ['GPU'] = '1'  # AMD ROCm 后端

# 定义一个简单神经网络
class TinyNet:
    def __init__(self):
        self.w1 = Tensor.randn(784, 128)
        self.w2 = Tensor.randn(128, 10)
    
    def forward(self, x):
        # 所有操作都是懒计算(lazy evaluation)
        # tinygrad 会自动生成对应后端的 kernel
        return x.dot(self.w1).relu().dot(self.w2)

model = TinyNet()
x = Tensor.randn(32, 784)  # batch_size=32

with Timing("forward pass: "):
    out = model.forward(x)
    out.realize()  # 触发真正的计算

# tinygrad 的"对抗 CUDA"方式:
# 不是复制 CUDA,而是绕过它
# 用 LLVM IR / PTX / Metal shader 直接生成硬件指令
# 证明"高性能不一定需要 CUDA"

tinygrad 的意义不在于性能,而在于证明了一个可能性:用干净的抽象,可以以极小的代码量支持多种硬件后端。这是 CUDA 的反面——CUDA 用复杂性换性能,tinygrad 用简洁换可移植性。


个人观点:黑暗森林中的软件帝国

我一直觉得,英伟达是科技史上最成功的软件公司之一——只是恰好用 GPU 作为发行媒介

CUDA 诞生于 2006 年,距今整整 20 年。这 20 年里,英伟达干了一件很聪明的事:把软件生态做成了迁移成本

你不是在买 GPU,你是在买"过去 20 年所有 CUDA 代码的可运行权"。

这是一种极其高级的"技术锁定"——不是靠专利壁垒(CUDA 的很多底层概念已被学术界广泛理解),而是靠生态惯性

  1. 所有 AI 论文的代码都用 CUDA 跑
  2. 所有 AI 工程师都学 CUDA
  3. 所有 AI 框架都为 CUDA 优化
  4. → 所有新公司都选英伟达
  5. → 英伟达继续投资优化 CUDA
  6. → 回到第 1 步

这个飞轮一旦转起来,AMD 再强的硬件也很难打破。

但 George Hotz 的思路是对的:不要正面复制 CUDA,而是找到一个新的抽象层,让硬件后端可插拔。这是更有价值的方向。

AMD 赠送芯片给 Hotz,本质上是在投资"CUDA 替代叙事"——哪怕成功率只有 10%,对 AMD 来说也值得押注。

问题是:两万行代码能撬动两千万行代码的生态吗?

我的答案是:短期不能,但方向是对的。 真正的破局点不在于复制 CUDA,而在于等待下一个范式跃迁——比如光子计算、存内计算——让所有人都重新站在同一起跑线上。

到那时,谁的软件抽象层更干净,谁才是真正的赢家。


总结

维度CUDA(英伟达)ROCm/HIP(AMD)
编程模型Warp=32,成熟 20 年Wavefront=64,迁移有代价
核心算子库cuDNN/cuBLAS 深度优化MIOpen/rocBLAS 追赶中
框架生态PyTorch/JAX 原生滞后 1-2 版本,部分不稳定
工具链Nsight 全套rocProf,文档较弱
护城河来源软件惯性 + 生态锁定硬件性价比,显存领先

核心结论:GPU 硬件是可以被复制的,但 20 年深度优化的软件生态不能。CUDA 的护城河本质上是迁移成本,而非技术门槛。George Hotz 的挑战有象征意义,但真正的破局需要等待范式级别的跃迁。