ccAI 精读(一):为什么 GPU 跑 AI 需要保密?
论文:ccAI: A Compatible and Confidential System for AI Computing(MICRO 2025)
作者想让普通的、老的 GPU/NPU(统称 xPU)也能安全地跑 AI,同时尽量不改原来的软件和硬件。
这是 ccAI 论文精读系列 的第一篇,只回答两个问题:为什么 AI 计算需要保密?为什么 GPU 是其中的短板?
🏢 一个场景:模型上云,GPU 是云厂商的
假设你是公司,把自己训练的大模型放到云服务器上跑推理。数据链路长这样:
1 | 你的 AI 模型 + 用户数据 |
模型参数、用户输入、中间计算结果、最终输出——都要经过云厂商的 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 | Host OS |
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 | A100 ──┐ |
于是作者的思路是:
我不管 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 | CPU 内存 ── DMA Read ──→ GPU ← 模型/输入(1.2GB)被读走 |
所以论文说:DMA 用于 data/code exchange(搬数据/代码)。
MMIO:控制设备的
GPU 内部有一堆寄存器(控制、状态、命令)。CPU 要下达开始计算的命令,或查询 GPU 当前的状态,就要访问这些寄存器。MMIO(Memory-Mapped I/O) 的做法是把寄存器伪装成内存地址:
1 | 地址 0x1000 → 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 | PCIe Packet |
- 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 的入门精读笔记。)