NVIDIA 推出了一个新的命令行工具 cuda-checkpoint
,旨在增强 Linux 上 CUDA 应用程序的检查点和恢复功能。该工具可以与开源检查点工具 CRIU(用户空间检查点/恢复)一起使用,旨在简化保存和恢复 CUDA 应用程序状态的过程。
检查点概述
透明的、每进程的检查点提供了一种介于虚拟机检查点和应用程序驱动检查点之间的平衡方案。在需要容错、任务抢占或集群调度与迁移的情景中,这尤为有用。通过将 cuda-checkpoint
与 CRIU 结合使用,用户可以检查复杂应用程序的状态,从而在各种计算任务中实现更大的灵活性和可靠性。
CRIU
CRIU 是一个由 NVIDIA 之外的开源社区维护的工具,旨在检查和恢复 Linux 进程树。它处理各种内核模式资源,例如匿名内存、线程、常规文件、套接字和管道。然而,它缺乏对 NVIDIA GPU 的原生支持,这就是 cuda-checkpoint
的作用所在,扩展了 CRIU 的能力,包括 CUDA 状态管理。
cuda-checkpoint
cuda-checkpoint
工具支持 550 及更高版本的显示驱动程序。它允许用户在进程的 CUDA 状态之间切换(挂起和运行)。从运行到挂起的转换称为 挂起,而相反的转换称为 恢复。在挂起期间,CUDA 驱动 API 被锁定,已提交的 CUDA 工作完成,设备内存被复制到主机,所有 CUDA GPU 资源被释放。相反,在恢复期间,GPU 被重新获取,设备内存和 GPU 内存映射被恢复,CUDA 对象被重新创建,CUDA 驱动 API 被解锁。
检查点示例
示例应用程序 counter
演示了检查点过程。应用程序在接收数据包后增加 GPU 内存,并返回更新的值。用户可以使用 nvcc
构建此应用程序,并使用 cuda-checkpoint
和 CRIU 命令观察检查点和恢复过程。
功能与限制
截止到显示驱动程序版本 550,cuda-checkpoint
工具仍在积极开发中。目前,它支持 x64 架构,并作用于单个进程而不是进程树。不支持 UVM 或 IPC 内存、GPU 迁移,并且等待已提交的 CUDA 工作完成才完成检查点。未来的驱动程序版本预计会解决这些限制,而无需对工具本身进行更新。
总结
cuda-checkpoint
工具结合 CRIU,可实现 Linux 应用程序的透明每进程检查点。如需更多信息,请访问官方的 NVIDIA 技术博客。