一、GPU板卡级算力调度
为AI建设的算力平台,不仅仅只用于单一的训练任务,还可以将GPU资源分配给不同的任务及客户使用。GPU调度系统可以基于现有的云计算技术构建,不必要再造一个“轮子”。可用于AI算力调度分配的云计算技术包括两类:
1. 基于虚拟化技术的GPU调度,如基于业界主流的KVM(Kernel-based Virtual Machine)技术,是Linux系统中的主流虚拟化技术。在KVM配合CPU的I/O虚拟化后,可以为每台虚拟机分配独占的GPU,配合其它硬件就能够在虚拟机上运行基于CUDA、Tensorflow等机器学习应用。
2. 基于容器技术的GPU调度。云原生是将应用拆分为微服务,将各微服务的可执行文件构建为容器镜像,以容器化方式运行,并接受Kubernetes等容器编排平台及Istio微服务智力组件相互配合进行调度。Kubernetes Device Plugin实际上是将这种特殊的文件设为某一容器独占使用,特殊文件对应的设备不限于GPU。将GPU调度给不同的微服务,能够实现一定程度的GPU复用。
二、GPU的虚拟化调度
由于GPU算力成本高昂,在提供GPU计算服务的云计算场景中,我们需要将一张GPU卡或者一颗GPU芯片提供给不同的应用甚至租户使用,这就需要GPU的虚拟化调度。
GPU虚拟化应当实现的需求有三点:
1) 硬件复用需求。如空分复用和时分复用两种不同的技术路线。
2) 隔离性需求。应用在使用硬件时,无法感知是独占环境还是虚拟化的环境,也不能越界访问其它虚拟化实例中的硬件资源。
3) 可运营需求。在多租户的平台上,运营方应当承诺各租户实际可得的资源量,并且可通过技术手段限制租户超量使用。
nVidia、AMD、Intel都推出了在现有GPU驱动层和硬件上加以改造的方案,如SRIOV、vCUDA、GRID vGPU、MIG等,但这些方案都有一些缺点,如规格受限、性能损耗较高等。腾讯云和阿里云也分别推出了qGPU和cGPU等方案,取得了更好的硬件兼容性、调度实时性和服务质量保障能力。
三、GPU集群的网络虚拟化设计与实现
运行机器学习业务,对GPU集群网络有一定的要求,就是采用网络隔离技术,通过网络隔离使每个租户都只能看到自己申请的GPU资源。技术手段包括以下方面:
1. VPC(Virtual Private Cloud)技术--网络虚拟化的基石
让不同租户的网络地址之间无法路由,可以让不同的租户使用重叠的内部地址,实现在租户的数据包流量的基础上做一层隧道封装,实现租户之间的网络隔离。VPC网络又称为“Overlay网络”。
2. 云负载平衡--机器学习网络的中流砥柱
主要使用NFV(Network Functions Virtualization)方式实现负载平衡。NFV指的是使用软件+工业标准服务器来实现负载均衡、防火墙或路由器等网络设备的功能,节约成本,提升扩展性。
3. 专线接入、对等连接与VPC网关。
4. NFV网关的实现与部署