这篇文章最初发表在 NVIDIA 技术博客上。
硬件虚拟化是将虚拟机( VM )中的工作负载与物理硬件以及彼此隔离的有效方法。这提供了改进的安全性,特别是在多租户环境中。然而,带内攻击、侧通道攻击和物理攻击等安全风险仍然可能发生,从而损害数据和应用程序的机密性、完整性或可用性。
直到最近,保护数据还仅限于运动中的数据 ,例如在互联网上移动有效载荷,以及静止数据,例如存储介质的加密。然而,使用中的数据仍然很脆弱。
NVIDIA 机密计算 提供了一种安全处理使用中的数据和代码的解决方案,防止未经授权的用户访问和修改。在运行人工智能训练或推理时,必须保护数据和代码。通常,输入数据包括个人可识别信息( PII )或企业机密,并且训练的模型是非常有价值的知识产权( IP )。机密计算是保护人工智能模型和数据的理想解决方案。
NVIDIA 站在保密计算的前沿,与 CPU 合作伙伴、云提供商和独立软件供应商( ISV )合作,确保从传统的加速工作负载向保密的加速工作负荷的转变是平稳和透明的。
NVIDIA H100 Tensor Core GPU 是有史以来第一个引入对机密计算的支持的 GPU。它可以在虚拟化环境中使用,既可以与传统的虚拟机一起使用,也可以在 Kubernetes 部署中使用,使用 Kata 在 microVM 中启动机密容器。
这篇文章的重点是使用机密计算的传统虚拟化工作流程。
使用硬件虚拟化的 NVIDIA 机密计算
Confidential computing 是根据 Confidential Computing Consortium 的定义。
NVIDIA H100 GPU 符合这一定义,因为其 TEE 固定在片上硬件信任根( RoT )中。当它在 CC On 模式下启动时, GPU 启用代码和数据的硬件保护。通过以下方式建立信任链:
- GPU 引导序列,具有安全且经过测量的引导
- 安全协议和数据模型( SPDM )会话,用于安全连接到 CPU TEE 中的驱动器
- 生成一组加密签名的测量值,称为证明报告。
机密计算环境的用户可以检查证明报告,并且只有在其有效和正确的情况下才可以继续。
跨硬件、固件和软件保护人工智能
NVIDIA 在每一代产品中都不断提高其 GPU 的安全性和完整性。自 NVIDIA Volta V100 Tensor Core GPU 以来, NVIDIA 已为设备上运行的固件提供 AES 身份验证。此身份验证确保您可以相信启动固件既没有损坏也没有被篡改。
通过 NVIDIA Turing 架构和 NVIDIA Ampere 架构, NVIDIA 增加了额外的安全功能,包括加密固件、固件撤销、故障注入对策,现在,在 NVIDIA Hopper 中,还增加了片上 RoT 和测量/验证引导。
为了在 NVIDIA H100 GPU 上实现保密计算,NVIDIA 需要创建新的安全固件和微码,以及在 CUDA 驱动中启用支持保密计算的路径,并建立认证验证流程。此硬件、固件和软件堆栈提供了一个完整的机密计算解决方案,包括代码和数据的保护和完整性。
使用 CUDA 12.2 Update 1 的发布,NVIDIA H100 Tensor Core GPU 成为了第一款机密计算 GPU。通过我们的早期访问版本,它已经准备好运行机密计算工作负载。
NVIDIA H100 的硬件安全 GPU
NVIDIA Hopper 架构首先在 NVIDIA H100 产品中推向市场,该产品包括 H100TensorCore GPU 芯片和 80GB 高带宽存储器 3 ( HBM3 )。有多种使用 NVIDIA H100 GPU 的产品可以支持机密计算,包括以下产品:
- NVIDIA H100 PCIe
- NVIDIA H100 NVL
- NVIDIA HGX H100
有三种支持的机密计算操作模式:
- **CC-off:**这是标准的 NVIDIA H100 操作。没有任何特定于机密计算的功能处于活动状态。
- **CC-open:**NVIDIA H100 的硬件、固件和软件已完全激活所有机密计算功能。所有防火墙都处于活动状态,并且所有性能计数器都已禁用,以防止在侧通道攻击中使用它们。
- **CC-Devtools:**开发人员可以依赖 NVIDIA Developer Tools 来分析和跟踪他们的代码,以便了解系统瓶颈并提高整体性能。在 CC DevTools 模式中,GPU 处于部分 CC 模式,该模式将与 CC On 模式的工作流相匹配,但禁用了安全保护并启用了性能计数器。这使得 NSys 跟踪工具能够运行并帮助解决 CC On 模式下出现的任何性能问题。
启用或禁用机密计算的控制是作为带内 PCIe 命令从系统管理程序主机提供的。
在机密计算模式下操作 NVIDIA H100 GPU
NVIDIA H100 GPU 在机密计算模式下与支持机密虚拟机( CVM )的 CPU 协同工作。基于 CPU 的机密计算使用户能够在 TEE 中运行,这可以防止访问系统管理程序甚至系统本身的操作员访问 CVM 或机密容器的内存内容。然而,由于 GPU 被 CPU 硬件阻止直接访问 CVM 存储器,因此将 TEE 扩展为包括 GPU 会带来一个有趣的挑战。
为了解决这个问题,位于 CPU TEE 内部的 NVIDIA 驱动程序与 GPU 硬件一起在 GPU memory 之间移动数据。它通过加密的反弹缓冲区来实现这一点,该缓冲区分配在共享系统内存中,可供 GPU 访问。类似地,所有命令缓冲区和 CUDA 内核也在穿过 PCIe 总线之前进行加密和签名。
在 CPU TEE 的信任扩展到 GPU 之后,运行 CUDA 应用程序与在 CC 关闭的 GPU 上运行它们相同。 CUDA 驱动程序和 GPU 固件在 CC-On 模式下透明地处理所需的加密工作流程。
需要特定的 CPU 硬件 SKU 才能使用 NVIDIA H100 GPU 实现机密计算。以下 CPU 具有机密计算所需的功能:
- 所有 AMD 热那亚或米兰 CPU 都启用了安全嵌套寻呼( SEV-SNP )的安全加密虚拟化
- Intel Sapphire RAPIDS CPU 使用 Trusted Domain eXtensions ( TDX ),它处于早期访问状态,仅对特定客户启用。
NVIDIA 进行了广泛的工作,以确保您的 CUDA 代码在启用保密计算的情况下"正常工作"。当采取这些步骤以确保您拥有一个具有适当硬件、驱动程序和合格证明报告的安全系统时,您的 CUDA 应用程序应在没有任何更改的情况下运行。
NVIDIA H100 GPU 需要特定的硬件和软件版本才能实现机密计算。下表显示了可以与我们的第一个软件版本一起使用的示例堆栈。
组成部分 | 版本 |
CPU | AMD 米兰+ |
GPU | H100 PCIe |
SBIOS | ASRockRack : BIOS 固件版本 L3 . 12C 或更高版本Supermicro : BIOS 固件版本 2 . 4 或更高版本对于其他服务器,请向制造商咨询最低 SBIOS ,以启用机密计算。 |
Hypervisor | Ubuntu KVM / QEMU 22 . 04 + |
OS | Ubuntu 22 . 04 + |
内核 | 5 . 19-rc6 _ v4 (主机和来宾) |
模拟器 | >= 6 . 1 . 50 (分支-- snp-v3 ) |
ovmf | >=提交( b360b0b589 ) |
NVIDIA VBIOS | VBIOS 版本: 96 . 00 . 5E . 00 . 01 及更高版本 |
NVIDIA 驱动程序 | 535 . 86 卢比 |
表 1. NVIDIA H100 GPU 软件和硬件堆栈示例的机密计算
表 1 概述了硬件和软件需求。有关使用 nvidia-smi
的详细信息,以及各种操作系统和 BIOS 级别设置,请参阅 NVIDIA Confidential Computing Deployment Guide。
NVIDIA Hopper H100 机密计算为值得信赖的人工智能带来的好处
NVIDIA H100 GPU 的保密计算能力增强了安全性和隔离性,可抵御以下范围内的威胁向量:
- 软件攻击
- 身体攻击
- 软件回滚攻击
- 加密攻击
- 重放攻击
由于 NVIDIA H100 GPU 基于硬件的安全性和隔离性、设备认证的可验证性以及防止未经授权的访问,组织可以提高这些攻击载体的安全性。可以在不更改应用程序代码的情况下进行改进,以获得尽可能好的 ROI 。
在以下部分中,我们将讨论 NVIDIA H100 GPU 的机密计算功能是如何在虚拟化环境中启动和维护的。
虚拟机上基于硬件的安全性和隔离
为了实现本地、云中或边缘虚拟机的完全隔离, CPU 和 NVIDIA H100 GPU 之间的数据传输是加密的。通过内置硬件防火墙创建物理隔离的 TEE ,确保 NVIDIA H100 GPU 上的整个工作负载安全。
NVIDIA H100 GPU 的机密计算初始化过程是多步骤的。
- 启用 CC 模式:
- 主机请求持续启用 CC 模式。
- 主机触发 GPU 重置以使模式生效。
- 引导设备:
- GPU 固件擦除 GPU state 和内存。
- GPU 固件配置硬件防火墙以防止未经授权的访问,然后启用 PCIe 。
- 初始化租户:
- GPU PF 驱动程序将 SPDM 用于会话建立和证明报告。
- 租户证明服务使用 NVML API 收集测量值和设备证书。
- CUDA 程序被允许使用 GPU 。
- 关闭租户:
- 主机触发物理功能级别重置( FLR )以重置 GPU 并返回设备引导。
- GPU 固件擦除 GPU state 和内存。
图 1 。 NVIDIA H100 机密计算初始化过程
图 1 显示,系统管理程序可以在供应期间根据需要设置 NVIDIA H100 GPU 的机密计算模式。启用或禁用机密计算的 API 作为来自主机的带内 PCIe 命令和带外 BMC 命令提供。
设备认证的可验证性
认证是用户或依赖方,希望挑战 GPU 硬件及其相关的驱动程序、固件和微码,并在继续之前接收响应有效、可信和配置正确的确认。
在 CVM 使用 GPU 之前,它必须将 GPU '验证为真实的,然后才能将其包含在其信任边界中。它通过从设备中检索设备身份证书(使用设备唯一的 ECC-384 密钥对签名)或调用 NVIDIA 设备身份服务来完成此操作。 CVM 可以使用nvidia-smi
.
根据 NVIDIA 证书颁发机构验证此证书将验证该设备是否由 NVIDIA 制造。设备唯一的专用身份密钥烧入每个 H100 GPU 的保险丝中。将保留公钥,以便提供设备证书。
此外, CVM 还必须确保 GPU 证书不会被吊销。这可以通过调用 NVIDIA 在线证书服务协议( OCSP )来完成。
我们提供 NVIDIA 远程认证服务( NRAS )作为验证 GPU 认证报告的主要方法。您还可以选择对气隙情况执行本地验证。当然,关于验证器的撤销状态或完整性的陈旧的本地数据在本地验证中仍然可能发生。
没有应用程序代码更改
利用机密计算的所有好处,无需对 GPU 进行代码更改---在大多数情况下都可以加速工作负载。使用 NVIDIA GPU 优化软件加速 H100 GPU 端到端人工智能工作负载,同时保持安全、隐私和法规遵从性。当采取这些步骤以确保您拥有一个安全的系统、适当的硬件、驱动程序和通过的证明报告时,执行 CUDA 应用程序应该对您透明。
使用机密计算加速计算性能
NVIDIA GPU 保密计算体系结构与那些 CPU 体系结构兼容,这些体系结构还提供了从非保密计算环境到保密计算环境的应用程序可移植性。
当计算量与输入数据量相比较大时, GPU 上的机密计算工作负载执行接近非机密计算模式,这并不奇怪。
当每输入数据字节的计算量较低时,通过非安全互连进行通信的开销会限制应用程序的吞吐量。这是因为在机密计算模式下运行 CUDA 应用程序时,加速计算的基础保持不变。
在保密计算模式下,以下性能原语与非保密模式相当:
- **GPU 原始计算性能:**计算引擎会对驻留在 GPU 存储器中的明文数据执行明文代码。
- **GPU 内存带宽:**封装在 HBM 内的 GPU 内存被认为是安全的,不受日常物理攻击工具的攻击,并且没有加密。
以下性能基元会受到额外的加密和解密开销的影响:
- CPU -- GPU 互连带宽:受 CPU 加密性能的限制,我们目前测量的加密性能约为 4 GB / 秒。
- **跨非安全互连的数据传输吞吐量:**这种原语会导致在未受保护的内存中用于临时存储机密数据的加密反弹缓冲区的延迟开销。
图 2 :具有 GPU 机密计算配置的四个 GPU '系统的拓扑示例
加密 GPU 命令缓冲区、同步原语、异常元数据和其他内部驱动程序数据会带来额外的开销,这些数据在 GPU '和运行在 CPU 上的机密 VM 之间交换。对这些数据结构进行加密可以防止对用户数据的侧通道攻击。
CUDA 统一内存长期以来一直被开发人员用于使用 CPU 和 GPU 中相同的虚拟地址指针,极大地简化了应用程序代码。在保密计算模式下,统一内存管理器对通过非安全互连迁移的所有页面进行加密。
为 NVIDIA H100 提供早期访问保密计算的安全 AI 工作负载
机密计算提供了一种安全保护使用中的数据和代码的解决方案,同时防止未经授权的用户访问和修改。 NVIDIA Hopper H100 PCIe 或 HGX H100 8- GPU 现在将保密计算功能作为早期访问功能。
要开始在 NVIDIA H100 GPU 上进行机密计算,请参阅Deployment Guide for Trusted Environments 中的配置步骤、支持的版本和代码示例。NVIDIA Hopper H100 GPU 具有几个新的基于硬件的功能,这些功能实现了这种级别的保密性,并可与主要 CPU 供应商的 CVM TEE 进行互操作。有关详细信息,请参阅Confidential Compute on NVIDIA Hopper H100 白皮书。
由于 NVIDIA H100 GPU 基于硬件的安全性和隔离性、通过设备认证的可验证性以及防止未经授权的访问,客户和最终用户可以在不更改应用程序代码的情况下提高安全性。