ccAI 精读(一):为什么 GPU 跑 AI 需要保密?

论文:ccAI: A Compatible and Confidential System for AI Computing(MICRO 2025)

作者想让普通的、老的 GPU/NPU(统称 xPU)也能安全地跑 AI,同时尽量不改原来的软件和硬件。

这是 ccAI 论文精读系列 的第一篇,只回答两个问题:为什么 AI 计算需要保密?为什么 GPU 是其中的短板?

🏢 一个场景:模型上云,GPU 是云厂商的

假设你是公司,把自己训练的大模型放到云服务器上跑推理。数据链路长这样:

1
2
3
4
5
你的 AI 模型 + 用户数据
↓
云服务器
├── CPU
└── GPU ← 云厂商的 GPU

模型参数、用户输入、中间计算结果、最终输出——都要经过云厂商的 GPU。如果云服务器里存在恶意的特权软件(云厂商的运维人员、被攻破的管理程序,都属于威胁模型的一部分),理论上它可能尝试读取这些数据。而模型参数和用户数据,都是商业机密。

我们希望的是:

即使云服务器的某些软件是恶意的,也不能偷看到 AI 数据。

这就是 Confidential Computing(机密计算) 要解决的问题。论文把它落到加速器上,叫 confidential xPU computing:让 GPU/NPU 执行 AI 时,数据和模型仍然保持机密。

🔐 CPU 侧已经有答案,GPU 侧没有

CPU 这一侧的机密计算已经比较成熟,思路概括:

给程序划一个别人不能看的房间。

比如 Intel SGX、AMD SEV,都是这种 TEE(Trusted Execution Environment)。论文里使用的是 TVM = Trusted Virtual Machine(受保护的虚拟机)。

1
2
3
4
5
6
7
8
9
10
11
          Host OS
↓
┌──────────────────────┐
│ TVM │ ← 受保护虚拟机(TEE)
│ │
│ 1. AI Application │ ← 明文:AI 应用
│ 2. Model & User Data │ ← 明文:模型 / 用户数据(别人看不了)
│ 3. GPU Driver │ ← xPU 驱动
└────────────┬─────────┘
↓
GPU

TVM 把 CPU 侧的软件栈(AI 应用、驱动、库)保护起来了。但问题马上出现:

数据一旦离开 TVM,通过 PCIe 传给 GPU,就是明文裸奔。

模型参数在 PCIe 总线上传输时,谁都能看、谁都能改。这就是这篇论文真正要解决的痛点:

怎么让老 GPU 也能安全地参与机密 AI 计算?

❌ 为什么不直接换新 GPU / 改 GPU?

最直觉的方案:给 GPU 加上安全硬件。新 GPU 确实可以这么做(比如某些新卡自带内存加密、安全启动、远程证明)。但现实是:

  • 云服务器里存量大多是 A100、T4、RTX 4090 这类没有专门安全硬件的设备;
  • 还有国产 GPU、NPU、FPGA,架构各不相同;
  • 为了安全把所有 GPU 换成 H100 —— 成本不可接受。

插一句,论文实验里用到的 xPU 包括 NVIDIA A100、RTX 4090 Ti、T4、Tenstorrent N150d(NPU)、Enflame S60(国产 GPU),就是为了证明这套方案不是只能保护一种 GPU。

所以作者把问题反了过来:

能不能不改 GPU 本身、不改 GPU 软件,只在外面加一层东西,把普通 GPU 保护起来?

💡 突破口:PCIe 是所有 xPU 的共同通道

GPU 内部差别很大,但有一个共同点——它们都通过 PCIe 插在主机上,跟 CPU/内存通信:

1
2
3
4
5
A100 ──┐
T4 ────┤
4090 ──┤── PCIe ── CPU
NPU ───┤
FPGA ──┘

于是作者的思路是:

我不管 GPU 内部怎么实现,我只管 PCIe 上跑的数据。

论文里的原话是 leveraging the PCIe interconnect as a common abstraction layer——把 PCIe 当成不同 xPU 的统一接口。这是理解全文最关键的一句。

📚 背景小课:DMA / MMIO / PCIe Packet

在讲 ccAI 怎么拦之前,得先知道 PCIe 上到底跑什么。xPU 和 CPU 之间主要有两类交互。

DMA:搬数据的

GPU 算 AI 需要把模型、输入数据从 CPU 内存拿过来。如果让 CPU 一字节一字节搬,会很慢。于是有了 DMA(Direct Memory Access):设备自己去内存里拿数据,CPU 只需告诉它源地址、目标地址、长度。

类比:搬家。没有 DMA 是你自己一箱一箱搬;有 DMA 是叫搬家公司,你报个地址就行。🚚

1
2
3
4
CPU 内存 ── DMA Read ──→ GPU    ← 模型/输入(1.2GB)被读走
│
↓
计算

所以论文说:DMA 用于 data/code exchange(搬数据/代码)。

MMIO:控制设备的

GPU 内部有一堆寄存器(控制、状态、命令)。CPU 要下达开始计算的命令,或查询 GPU 当前的状态,就要访问这些寄存器。MMIO(Memory-Mapped I/O) 的做法是把寄存器伪装成内存地址:

1
2
3
地址 0x1000 → GPU 控制寄存器
地址 0x1004 → GPU 状态寄存器
地址 0x1008 → GPU 命令寄存器

CPU 写 0x1000,看起来像写内存,实际是在操作 GPU 寄存器。

类比:DMA 是 🚚 搬货,MMIO 是 🎮 按按钮。

DMA MMIO
干什么 搬大量数据 控制设备
典型内容 模型、输入数据、代码 命令、寄存器状态
数据量 通常很大 通常很小

为什么不能直接保护 DMA/MMIO?

因为每个 xPU 的 DMA/MMIO 实现都不一样:有的 GPU 带 MMU,有的 TPU 不带;驱动更是各家各写(NVIDIA Driver、Xilinx Driver……)。想设计一个统一的 DMA/MMIO 安全机制,几乎不可能。

但它们的 DMA/MMIO 流量,最终都会变成同一个东西,在同一个通道上跑:

PCIe Packet:高速公路上的一辆辆货车

把 PCIe 想成 CPU↔︎xPU 之间的高速公路,Packet 就是路上的货车。每辆货车两部分:

1
2
3
4
5
6
PCIe Packet
┌────────────┬─────────────┐
│ Header │ Payload │
└────────────┴─────────────┘
↑ ↑
物流单 真正的货
  • Header = 物流单:这是什么包、谁发的、发给谁、访问哪块地址、多大。具体包括 Format、Type、Data Length、Requester ID、Completer ID、Address/Routing Info 等字段。
  • Payload = 真正的数据:比如一段 AI 模型数据、一批输入。

这就是 ccAI 下手的粒度:

ccAI 工作在 PCIe packet level,而不是针对某一种 xPU 的内部结构。

🎯 威胁模型与三个设计目标

保护对象很明确——在 PCIe 上跑来跑去的:

1
输入数据 / AI 模型 / 中间结果 / 输出结果

论文给自己立了三个目标:

目标 含义
G1 Compatibility 不改 GPU、不改 Driver、不改 Application、不换特殊 CPU
G2 Security 数据、模型、代码、中间结果全部受保护,可远程证明
G3 Performance 不能为了安全把 GPU 拖成蜗牛 🐌

关于 G2 有个直觉问题:PCIe 上跑的东西重要程度不一样——有模型数据,也有中断、控制信息。全都加密既浪费又没必要。所以论文设计了 细粒度安全控制(fine-grained security),按数据包属性给四种处置:禁止 / 完整性+加密 / 完整性+安全校验 / 直接通过(A1~A4)。具体怎么判断,是下一篇的主题。

📌 本篇小结

先记住这 5 个词,后面全靠它们:

东西 要点
xPU GPU/NPU/FPGA 等 AI 加速器的统称
TVM 受保护的虚拟机,保护 CPU 侧软件
PCIe CPU ↔︎ xPU 的共同高速通道
PCIe Packet PCIe 上的一条条消息,有 Header(物流单)和 Payload(货)
Confidential xPU Computing 让普通加速器执行 AI 时数据/模型仍保密

下一篇进入正题:作者往 CPU 和 GPU 之间塞了一个门卫 PCIe-SC,又写了一个翻译员 Adaptor,看它们怎么做到不换 GPU、不改驱动还能保护数据——ccAI 精读(二):不换 GPU 也能机密计算。

(本系列为 MICRO 2025 论文 ccAI: A Compatible and Confidential System for AI Computing 的入门精读笔记。)