NVIDIA Snapshot 是 NVIDIA DSX AI Factory Platform 的一个新的开源组件,它使已初始化的 GPU 工作负载可在推理副本之间复用——从而加速启动和恢复。
当推理需求激增或副本发生故障时,可用的 GPU 并不能立即转化为服务容量。初始化一个 LLM 工作负载——这一过程称为冷启动——可能需要数分钟,从而延迟扩缩容和恢复。
Snapshot 是一个用于 Kubernetes 上 GPU 工作负载的检查点与恢复系统。它捕获一个完全初始化的工 作负载——包括 CPU 和 GPU 内存——并在兼容的基础设施上恢复该状态,使推理容量在数秒而非数分钟内上线。图 1 展示了启动序列。Snapshot 跳过了重复的工作负载初始化;基础设施配置和容器镜像加载仍不在测量的恢复路径之内。

本文解释了 Snapshot 如何对 GPU 工作负载进行检查点和恢复、平台团队如何集成它,以及在三种推理引擎上恢复时间与冷启动的对比。
用于 AI 工厂运营的 Snapshot
Snapshot 最初为 NVIDIA Dynamo 推理工作器开发,提供了其他推理引擎、调度器、控制器和平台可以集成的检查点与恢复能力。
Snapshot 为 GPU Pod 提供两种操作:
- 检查点:一旦工作负载完全初始化,将其 CPU 和 GPU 内存捕获为可移植的工件。
- 恢复:从该工件在任何具有相同 GPU 型号和驱动的节点上启动一个新的 Pod。进程从检查点处继续,因此权重加载、编译和图捕获都被跳过。
两种操作都使用 Kubernetes 自定义资源。要对一个已在运行的 Pod 进行检查点,创建一个命名它的 PodSnapshot。要从模板启动一个 Pod 并在其就绪后立即进行检查点,则创建一个 SnapshotJob。要恢复,向新 Pod 添加注解 nvidia.com/restore-from,命名要从中恢复的 PodSnapshot。工作负载只需要一个小的握手来在检查点前暂停并在恢复后继续。仓库中有 vLLM、SGLang 和 NVIDIA TensorRT LLM 的现成示例。
Snapshot 可以将单节点上跨多个 GPU 的兼容工作负载作为跨 rank 的单个检查点工件进行检查点和恢复。这支持使用张量并行(TP)、数据和专家并行(DEP)以及解码上下文并行(DCP)等并行策略的大型混合专家(MoE)模型的快速启动。工作负载必须满足 Snapshot 的 检查点/恢复和运行时兼容性要求。参见示例配置。
基准测试
设计合作伙伴也在自己的工作负载上评估了 Snapshot:
- Crusoe,Snapshot 的上游贡献者,在 NVIDIA HGX B300 上将 GLM-5.3 Pod 就绪时间从大约 8 分钟减少到 31 秒。
- Saturn Cloud,一个 token 工厂平台,对 NVIDIA Snapshot 进行了从零扩展推理的基准测试,在 NVIDIA HGX B300 上将 vLLM 启动时间从 2–8.5 分钟缩短到 6–34 秒。
以下基准测试展示了 Snapshot 如何在 vLLM、SGLang 和 NVIDIA TensorRT LLM(TRT-LLM)上加速推理启动——模型范围从 6 亿参数到在 8 个 GPU 上具有 1 TB 检查点的混合专家(MoE)模型。在所有测试配置中,Snapshot 都能在 45 秒内恢复一个副本,比冷启动快 8 倍到 36 倍。
方法
每个配置都在相同的硬件和软件栈上使用两种策略进行测试:
- 冷启动:工作负载从头开始。计时从进程启动到引擎初始化返回(推理之前)为止。测量分为四个阶段(表 2):
- 启动:启动引擎和工作进程、导入 Python 库,以及设置 GPU 之间的通信。一些即时(JIT)内核编译也在此发生。
- 模型加载:读取模型权重并构建模型的张量,包括加载时进行的任何引擎特定的转换或重新打包。
- 初始化:准备加载的模型以提供服务:内存分析、分配键值(KV)缓存和运行时缓冲区,以及其他内核和运行时准备。
- 编译、自动调优和图捕获:编译内核(例如,使用
torch.compile)、为 GPU 自动调优它们,以及捕获 CUDA 图。
- Snapshot:工作负载从其检查点恢复。计时从要求 Snapshot 恢复的那一刻开始,到工作负载再次提供服务为止。测量分为四个阶段(表 3):
- 代理设置:节点上的 Snapshot 代理定位检查点工件并准备目标 Pod 和 GPU。
- 用户空间检查点/恢复(CRIU)恢复:CRIU 是用于进程检查点的标准 Linux 工具,它将进程映像从存储读入主机内存。速度主要由存储后端决定。
- CUDA 恢复:将 GPU 状态复制回 GPU 内存。
- 唤醒/重映射:使进程适应新节点并唤醒引擎。
两项测量都不包括拉取容器镜像和设置容器运行时。KV 缓存在每次检查点前被释放,因此它不是工件的一部分。
表 1 还报告了检查点时间和大小:捕获一个完全初始化的副本需要多长时间,以及存储的工件需要多少存储空间。这是每个模型和配置的一次性成本。
设置
- GPU:NVIDIA B200
- NVIDIA 驱动:615.71.09
- 存储后端:VAST(NFS)
- 推理引擎:
- vLLM 0.31.0
- SGLang 0.5.21
- TensorRT LLM 1.3.0
结果
基准测试显示出四项主要发现。
- 恢复时间保持在 43 秒以内:在所有测试配置中,Snapshot 在 3.6 至 42.7 秒内恢复副本——比冷启动快 8 倍至 36 倍。最大的 MoE 模型在八块 GPU 上的检查点约为 600 GB 至 1 TB,恢复时间不到 43 秒,而冷启动时间为 6 至 19 分钟。
- 恢复跳过的不仅是权重加载:冷启动时间包括加载权重、编译和自动调优内核,以及捕获 CUDA 图。Snapshot 恢复已初始化的负载,跳过这些重复步骤。
- 检查点在第一个恢复的副本上即可收回成本:在每个测试配置中,检查点时间加恢复时间都短于单次冷启动。检查点创建耗时 15 秒至 5.5 分钟,具体取决于模型和配置。
- 移动 GPU 状态在大规模恢复中占主导:对于八 GPU 的 MoE 配置,恢复 GPU 状态耗时 18 至 29 秒。使用 CRIU 恢复 CPU 进程状态耗时 4.2 至 10.8 秒。
图 2 至图 4 比较了 vLLM、SGLang 和 TensorRT LLM 在测试模型和并行配置下的冷启动与 Snapshot 恢复时间。表 1 提供了每种配置的数据,包括检查点时间和大小。所有时间均以秒为单位。在图表中,TEP8 表示跨八块 GPU 的张量和专家并行。



表 1. 在配备 VAST(NFS)存储的 NVIDIA B200 上、使用 1 至 8 块 GPU 时冷启动与 Snapshot 恢复的对比。检查点时间是每种配置的一次性成本。加速比是冷启动时间除以 Snapshot 恢复时间
| 模型 | 引擎 | 并行 | 权重大小(GB) | 检查点大小(GB) | 检查点时间(s) | 冷启动(s) | Snapshot agent 恢复(s) |
加速比 |
|---|---|---|---|---|---|---|---|---|
| Qwen3-0.6B | vLLM | TP1 | 1.50 | 8.13 | 15.30 | 104.43 | 4.66 | 22.40x |
| Qwen3-0.6B | SGLang | TP1 | 1.50 | 9.42 | 20.71 | 87.08 | 3.59 | 24.26x |
| Qwen3-0.6B | TRT-LLM | TP1 | 1.50 | 8.04 | 20.07 | 121.26 | 8.15 | 14.88x |
| Qwen3-14B | vLLM | TP1 | 29.54 | 37.71 | 19.98 | 122.76 | 5.72 | 21.45x |
| Qwen3-14B | vLLM | TP2 | 29.54 | 48.29 | 38.37 | 139.63 | 6.19 | 22.55x |
| Qwen3-14B | SGLang | TP1 | 29.54 | 40.19 | 26.17 | 106.26 | 5.60 | 18.96x |
| Qwen3-14B | SGLang | TP2 | 29.54 | 51.93 | 33.88 | 124.72 | 7.45 | 16.75x |
| Qwen3-14B | TRT-LLM | TP1 | 29.54 | 36.38 | 23.72 | 127.02 | 12.50 | 10.16x |
| Qwen3-14B | TRT-LLM | TP2 | 29.54 | 47.97 | 42.90 | 158.66 | 15.99 | 9.92x |
| gpt-oss-120b | vLLM | TP1 | 65.25 | 81.56 | 44.37 | 172.80 | 10.09 | 17.12x |
| gpt-oss-120b | vLLM | TP4 | 65.25 | 119.69 | 133.01 | 155.66 | 11.62 | 13.40x |
| gpt-oss-120b | SGLang | TP1 | 65.25 | 172.32 | 55.63 | 268.96 | 15.94 | 16.87x |
| gpt-oss-120b | SGLang | TP4 | 65.25 | 693.89 | 174.20 | 240.17 | 29.64 | 8.10x |
| gpt-oss-120b | TRT-LLM | TP1 | 65.25 | 77.87 | 29.98 | 200.55 | 7.79 | 25.75x |
| gpt-oss-120b | TRT-LLM | TP4 | 65.25 | 111.34 | 85.29 | 223.96 | 18.58 | 12.05x |
| GLM-5.3-NVFP4 | vLLM | TEP8 | 464.82 | 604.00 | 282.80 | 393.65 | 28.64 | 13.74x |
| GLM-5.3-NVFP4 | SGLang | TEP8 | 464.82 | 669.49 | 327.20 | 426.70 | 35.34 | 12.07x |
| GLM-5.3-NVFP4 | TRT-LLM | TEP8 | 464.82 | 628.30 | 231.33 | 363.90 | 33.55 | 10.85x |
| DeepSeek-V4.1-Flash | vLLM | TEP8 | 510.30 | 647.18 | 274.75 | 1110.65 | 30.96 | 35.87x |
| DeepSeek-V4.1-Flash | SGLang | TEP8 | 510.30 | 743.35 | 286.77 | 953.09 | 36.54 | 26.08x |
| DeepSeek-V4-Pro-NVFP4 | vLLM | TEP8 | 913.09 | 996.53 | 193.84 | 908.48 | 39.56 | 22.96x |
| DeepSeek-V4-Pro-NVFP4 | SGLang | TEP8 | 913.09 | 1039.09 | 253.72 | 621.55 | 42.69 | 14.56x |
表 2 分解了冷启动时间,展示了恢复过程跳过了哪些初始化阶段。
表 2. 冷启动时间按阶段划分(单位:秒)。由于四舍五入或日志与插桩未捕获的间隔,各阶段耗时之和可能与总计不同
| 模型 | 引擎 | 并行度 | 启动时间(秒) | 模型加载(秒) | 初始化(秒) | 编译、自动调优与图捕获(秒) | 总计(秒) |
|---|---|---|---|---|---|---|---|
| Qwen3-0.6B | vLLM | TP1 | 31.37 | 17.27 | 14.58 | 41.21 | 104.43 |
| Qwen3-0.6B | SGLang | TP1 | 33.74 | 11.67 | 8.41 | 33.26 | 87.08 |
| Qwen3-0.6B | TRT-LLM | TP1 | 25.79 | 3.79 | 40.64 | 51.04 | 121.26 |
| Qwen3-14B | vLLM | TP1 | 31.16 | 26.15 | 15.30 | 50.15 | 122.76 |
| Qwen3-14B | vLLM | TP2 | 42.18 | 18.96 | 15.29 | 63.20 | 139.63 |
| Qwen3-14B | SGLang | TP1 | 33.45 | 20.79 | 8.28 | 43.74 | 106.26 |
| Qwen3-14B | SGLang | TP2 | 47.62 | 18.93 | 8.29 | 49.88 | 124.72 |
| Qwen3-14B | TRT-LLM | TP1 | 25.35 | 11.54 | 39.36 | 50.77 | 127.02 |
| Qwen3-14B | TRT-LLM | TP2 | 27.42 | 8.88 | 70.62 | 51.74 | 158.66 |
| gpt-oss-120b | vLLM | TP1 | 35.15 | 38.69 | 10.49 | 88.47 | 172.80 |
| gpt-oss-120b | vLLM | TP4 | 49.91 | 24.71 | 12.13 | 68.91 | 155.66 |
| gpt-oss-120b | SGLang | TP1 | 42.54 | 34.44 | 0.36 | 191.62 | 268.96 |
| gpt-oss-120b | SGLang | TP4 | 57.97 | 49.06 | 1.33 | 131.81 | 240.17 |
| gpt-oss-120b | TRT-LLM | TP1 | 26.21 | 47.50 | 42.85 | 83.99 | 200.55 |
| gpt-oss-120b | TRT-LLM | TP4 | 34.28 | 42.72 | 22.34 | 124.62 | 223.96 |
| GLM-5.3-NVFP4 | vLLM | TEP8 | 65.47 | 65.88 | 48.88 | 213.42 | 393.65 |
| GLM-5.3-NVFP4 | SGLang | TEP8 | 60.77 | 73.98 | 2.66 | 289.29 | 426.70 |
| GLM-5.3-NVFP4 | TRT-LLM | TEP8 | 31.58 | 90.39 | 120.43 | 121.50 | 363.90 |
| DeepSeek-V4.1-Flash | vLLM | TEP8 | 63.96 | 184.90 | 77.25 | 784.54 | 1110.65 |
| DeepSeek-V4.1-Flash | SGLang | TEP8 | 56.18 | 74.21 | 38.50 | 784.20 | 953.09 |
| DeepSeek-V4-Pro-NVFP4 | vLLM | TEP8 | 64.42 | 95.14 | 64.87 | 684.05 | 908.48 |
| DeepSeek-V4-Pro-NVFP4 | SGLang | TEP8 | 58.80 | 87.68 | 42.55 | 432.52 | 621.55 |
表 3 将恢复时间分解为 agent 设置、CRIU 恢复、CUDA 恢复以及唤醒/重映射。
表 3. Snapshot 恢复时间按阶段划分(单位:秒)。四个阶段合计构成表 1 中的 Snapshot 列
| 模型 | 引擎 | 并行度 | Snapshot:agent 设置 | Snapshot:CRIU 恢复 | Snapshot:CUDA 恢复 | Snapshot:唤醒/重映射 | 总计(秒) |
|---|---|---|---|---|---|---|---|
| Qwen3-0.6B | vLLM | TP1 | 2.30 | 1.36 | 0.78 | 0.22 | 4.66 |
| Qwen3-0.6B | SGLang | TP1 | 0.24 | 1.33 | 1.02 | 0.99 | 3.59 |
| Qwen3-0.6B | TRT-LLM | TP1 | 5.72 | 1.43 | 0.84 | 0.16 | 8.15 |
| Qwen3-14B | vLLM | TP1 | 0.13 | 1.58 | 3.16 | 0.85 | 5.72 |
| Qwen3-14B | vLLM | TP2 | 0.57 | 2.03 | 3.43 | 0.17 | 6.19 |
| Qwen3-14B | SGLang | TP1 | 0.24 | 1.35 | 3.67 | 0.34 | 5.60 |
| Qwen3-14B | SGLang | TP2 | 0.92 | 2.17 | 3.49 | 0.87 | 7.45 |
| Qwen3-14B | TRT-LLM | TP1 | 6.80 | 2.70 | 2.82 | 0.18 | 12.50 |
| Qwen3-14B | TRT-LLM | TP2 | 9.65 | 3.52 | 2.41 | 0.41 | 15.99 |
| gpt-oss-120b | vLLM | TP1 | 0.48 | 2.60 | 6.71 | 0.30 | 10.09 |
| gpt-oss-120b | vLLM | TP4 | 1.02 | 4.40 | 5.57 | 0.62 | 11.62 |
| gpt-oss-120b | SGLang | TP1 | 0.26 | 1.69 | 13.46 | 0.54 | 15.94 |
| gpt-oss-120b | SGLang | TP4 | 2.69 | 4.34 | 21.69 | 0.93 | 29.64 |
| gpt-oss-120b | TRT-LLM | TP1 | 0.28 | 1.51 | 5.74 | 0.26 | 7.79 |
| gpt-oss-120b | TRT-LLM | TP4 | 9.99 | 3.30 | 4.34 | 0.95 | 18.58 |
| GLM-5.3-NVFP4 | vLLM | TEP8 | 3.79 | 4.18 | 20.61 | 0.06 | 28.64 |
| GLM-5.3-NVFP4 | SGLang | TEP8 | 3.27 | 10.80 | 19.96 | 1.31 | 35.34 |
| GLM-5.3-NVFP4 | TRT-LLM | TEP8 | 9.81 | 5.32 | 18.17 | 0.25 | 33.55 |
| DeepSeek-V4.1-Flash | vLLM | TEP8 | 4.84 | 5.71 | 19.37 | 1.04 | 30.96 |
| DeepSeek-V4.1-Flash | SGLang | TEP8 | 4.34 | 9.77 | 21.40 | 1.03 | 36.54 |
| DeepSeek-V4-Pro-NVFP4 | vLLM | TEP8 | 5.44 | 4.73 | 28.98 | 0.42 | 39.56 |
| DeepSeek-V4-Pro-NVFP4 | SGLang | TEP8 | 3.13 | 10.13 | 28.60 | 0.83 | 42.69 |
图 5 展示了 vLLM 的恢复时间明细。

基准测试工具和复现说明可在仓库中获取。
开始使用
要在 Kubernetes 上使用 Snapshot 运行 GPU 工作负载,请先阅读 NVIDIA Snapshot 仓库中的安装说明和使用指南。
可按照用户指南,结合 NVIDIA Dynamo 试用恢复 worker。
如需讨论集成或提供反馈,请提交 issue,或加入 NVIDIA Dynamo Slack 工作区并访问 #snapshot-dev 频道。
欢迎前往 KubeCon 的 NVIDIA 170 号展位,参与 Kubernetes 深度探讨和现场演示。
