1 背景

在GPU虚拟化和池化的加持下,可以显著提高集群的GPU利用率,同时也可以较好地实现弹性伸缩。但有时会遇到需要GPU资源再分配的场景,此时亟需集群拥有GPU任务热迁移的能力。举个简单的例子,比如某个新训练任务M需要独占8张A100,而集群中没有独立的A100资源,但总的A100的碎片资源超过了8张独立的A100资源,此时借助虚拟化、池化和热迁移有以下几种解决方案:
  • 虚拟化:拆分任务M至n个独立的小任务,使其可以使用A100碎片资源
  • 池化:拆分任务M至n个独立的小任务,使其可以使用A100碎片资源
  • 热迁移:将其他A100上的任务迁移至同一张卡上,重新凑出任务M需要的A100资源
可以发现,基于热迁移方案,不需要用户对任务M进行修改,只需要调度侧重新进行GPU资源分配即可解决。

2 Singularity

Singularity是微软为AI工作负载提供的完全托管的全球分布式基础设施服务,支持各种硬件加速器。Singularity从头开始设计,在全球范围内扩展到数十万个GPU和其他AI加速器。Singularity的建立有一个关键目标:通过在给定的固定加速器容量池上最大限度地提高总有用吞吐量来降低人工智能的成本,同时为多个定价层提供严格的SLA。下图展示了Singularity的高级架构,包括其由全局、区域和工作负载范围的调度微服务组成的分层调度系统。
论文中涉及到比较多的内容,比如透明且解耦的机制、API拦截的分类、透明迁移和透明弹性等,本文主要关注透明迁移,即GPU任务的热迁移,对其他部分感兴趣的可以查看原文。

3 热迁移

在Singularity中,DNN任务的抢占、恢复和放缩主要涉及到以下4种类型的状态的一致性的检查点和恢复。
  • CPU中的程序状态:如栈、堆、指令指针等
  • GPU中的模型训练状态:如模型参数、优化器状态等
  • CPU与GPU之间交互的控制状态:如活跃流、同步事件等
  • 不同类型并行的gpu间和节点间通信状态:如数据、流水线、张量并行等
实现DNN任务的透明检查点具有挑战性,主要体现在以下几个方面:
  • 多台分布式主机和GPU的一致切割,所有的分布式任务必须在集体通信方面(比如allreduce等)处于安全一致的状态
  • CPU与GPU之间飞行中的状态(比如活跃句柄、存储在主机内存中的设备地址等)必须一致恢复
  • 数百个分布式任务的检查点开销必须保持在较低的水平

3.1 检查点中CPU的程序状态

有多种系统提供地址空间迁移,其中CRIU应用最广泛。然而,CRIU的一个关键限制是它不能处理使用GPU进程的设备映射。要使用CRIU,主机地址空间必须与特定于设备的库隔离。幸运的是,设备代理架构提供了这种隔离。设备代理服务器大多是无状态的,因此不是检查点,只是在目的地重新启动。

3.2 检查点中的设备状态

模型状态(比如参数等)由设备代理进程通过设备到主机之间的memcpy进行检查。一个挑战是,当在目的地进行恢复时,设备内存可能会映射到新的设备代理服务器地址空间中的另一个地址,从而使主机进程中的指针无效。为了避免这种情况,设备代理在启动时占用整个GPU内存,由设备分配器的服务执行mmap(比如cudaMalloc等),以始终映射到相同的CPU地址。

3.3 通信状态

DNN任务之间的大多数通信都是通过处理GPU-Direct(比如NVLink)和跨节点通信的集体通信库(比如NCCL)进行的。由于这些库是专有的,我们不能处理飞行中的通信。因此,在检查点时,我们暂停该任务,以确保没有正在运行的集体调用。Singularity采用一种新颖的分布式屏障算法,以完全透明的方式实现这一特性。

3.4 文件系统状态

DNN任务有时会安装本地包,并更新其他本地文件。迁移到新节点后需要保留这些文件。在容器范围内执行文件系统状态的差异(相对于干净的基础镜像)代价太大。主机libc文件系统API可以帮助实现这一点:每当以可写模式打开本地文件时,我们将文件名附加到日志中,并在检查点期间复制这些文件。通过使用内容校验和,在多个任务之间将非重复数据复制到远程存储。

3.5 检查点/恢复流

成功获得障碍后,通过对各个工作点执行CRIU检查点来检查任务。CRIU转储,以及GPU状态转储活跃张量,然后移动到远程存储。在新的目的地,在CRIU恢复中,进程从检查点的确切状态开始(即在设备代理客户端中获得障碍之后)。

4 其他

4.1 GPU算力化

具备GPU虚拟化、池化和热迁移的集群,留给集群的想象空间比较大,拥有着较好的调度和弹性的能力,但距离极致的调度和弹性的能力,还有一些距离。再以上述M任务需要8张A100为例,如果集群中不仅没有独立的A100资源,也没有足够的A100碎片资源,但是却有着大量的V100资源,此时似乎存在一种可能性,用足量的V100资源替代M任务需要的A100资源,但又会引入新问题,GPU卡之间怎么换算,如何做GPU算力归一化,如何做GPU算力售卖的透明性。
 

Nvidia GPU热迁移-Singularity的更多相关文章

  1. 软件工具将GPU代码迁移到fpga以用于AI应用

    软件工具将GPU代码迁移到fpga以用于AI应用 Software tools migrate GPU code to FPGAs for AI applications 人工智能软件初创公司Mips ...

  2. KVM 热迁移

    最终我们迁移的目的就是: ·简化系统维护管理 ·高系统负载均衡 ·增强系统错误容忍度 ·优化系统电源管理 热迁移 又叫动态迁移,实时迁移,即虚拟机保存( save )/恢复( restore ):将整 ...

  3. OpenStack虚拟机冷迁移与热迁移

    一.虚拟机迁移分析 openstacvk虚拟机迁移分为冷迁移和热迁移两种方式. 1.1冷迁移: 冷迁移(cold migration),也叫静态迁移.关闭电源的虚拟机进行迁移.通过冷迁移,可以选择将关 ...

  4. KVM 虚拟机的热迁移

    热迁移:顾名思义在虚拟机不关机的情况下将KVM虚拟机进行迁移 准备工作:两台KVM虚拟机,一台nfs虚拟机,centos7.4系统 主机 IP地址 主机名 KVM01 10.00.11 kvm01 K ...

  5. vsphere 虚拟机的迁移,冷迁移,vmotion(热迁移)

    备注:(理论部分参考王春海老师的课程) 一.概述 1.vsphere数据中心当处于某种目的进行维护时,需要将某台主机上运行或关闭的虚拟机,迁移到其他主机上,这个时候就需要使用迁移 2.可以使用冷迁移或 ...

  6. UCloud首尔机房整体热迁移是这样炼成的

    小结: 1.把两个机房在逻辑上变成一个机房: 2.新老机房的后端服务使用同一套 ZooKeeper,但是配置的却是不同的 IP: 3.UCloud内部服务所使用的数据库服务为MySQL, 内部MySQ ...

  7. openstack热迁移和冷迁移

    转自: http://www.cnblogs.com/pycode/p/6494848.html 迁移类型: *非在线迁移 (有时也称之为‘迁移’).也就是在迁移到另外的计算节点时的这段时间虚拟机实例 ...

  8. Win10提示“您未连接到nvidia gpu的显示器”的解决方法

    显卡有Nvidia 和 ATI两个芯片,我们经常称他们为N卡和A卡,N卡更加注重于性能,而A卡则为颜色艳丽,画面更好.不过,最近一些windows10系统用户在使用N卡过程中,遇到了提示“您当前未使用 ...

  9. OpenStack之虚机热迁移代码解析

    OpenStack之虚机热迁移代码解析 话说虚机迁移分为冷迁移以及热迁移,所谓热迁移用度娘的话说即是:热迁移(Live Migration,又叫动态迁移.实时迁移),即虚机保存/恢复(Save/Res ...

  10. OpenStack之虚机热迁移

    OpenStack之虚机热迁移 最近要搞虚机的热迁移,所以也就看了看虚机迁移部分的内容.我的系统是CentOS6.5,此处为基于NFS共享平台的虚机迁移.有关NFS共享服务器的搭建可以看这里. Yak ...

随机推荐

  1. CSS 常用样式-盒模型属性

    盒模型又叫框模型,包含了五个用来描述盒子位置.尺寸的属性,分别是宽度 width.高度 height.内边距 padding. 边框 border.外边距 margin. 常见盒模型区域: • 盒模型 ...

  2. Ndisuio win10 注册表下载

    看了一下应该没有什么隐私内容,丢失这个注册表信息会让网络服务无法启动,新建txt,复制后修改后缀为.reg,双击录入,在管理员权限下cmd中输入 netsh winsock reset 重启 Wind ...

  3. Redis5.0.4-集群(单机版)搭建

    最近尝试搭建了一下redis集群,这里记录一下,最后附上的是参考的博客地址. 安装C语言编译环境GCC yum install -y gcc-c++ 下载redis并编译安装 下载: wget htt ...

  4. Error java 错误 不支持发行版本5 ( 完美解决版)

    问题 在Intellij idea中新建了一个Maven项目,运行时报错如下:Error : java 不支持发行版本5 解决方案 1. 原因 是因为ideal中默认配置中有几个地方的jdk版本与实际 ...

  5. Pytorch 感知机

    单层感知机 \[\begin{aligned} & y = XW + b \\ & y = \sum x_i*w_i+b\\ \end{aligned} \] Derivative \ ...

  6. jxg项目Day5-关于项目打包

    springboot项目中手动打包,加以下依赖: <parent> <artifactId>spring-boot-dependencies</artifactId> ...

  7. 三种遍历的方法(map和forEach的区别)

    一. for循环 arr[index]可以改变原数组 二. forEach方法 forEach方法的返回值是一个undefined: 2. 在循环体内改变item的值不会影响原数组,而是只在循环体内生 ...

  8. Apache Ranger系列七:Hive 和 Spark 执行过程中的文件路径配置

    背景:在使用Ranger鉴权的过程中,要求必须开启impersonation功能(即执行用户与提交用户保持一致,而不是统一代理的hive/spark).但是在执行的过程中,会需要在hdfs存储临时的文 ...

  9. node.js缓冲区类与node-red向串口发数据

    遇到的问题是使用node-red的串口模块向串口发送16进制数据,控制LED灯. 初学者经常想当然的认为只要msg的payload里放上对应的数就行了.其实不是. Node-red是node.js环境 ...

  10. windows下配置JDK教程

    1.思路: 首先要确定所要用的应用可以兼容哪个版本jdk,然后开始下载对应的版本,最后安装,配置环境变量,测试,部署完成. 2.jdk下载地址: 如果下载全新的jdk可以直接百度jdk官网下载 如果需 ...