赞
踩
随着我国“新基建”的启动,AI(Artificial Intelligence,人工智能)和5G、大数据中心、工业互联网等一起构成了新基建的7大核心突破领域。AI将渗透到各个行业,变得越来越“基础设施化”。
德勤在2020上半年发布的《全球人工智能发展白皮书》预测数据表明:2025年世界人工智能市场将超过6万亿美元;中国人工智能核心产业规模到2020年将增长至1600亿元,带动相关产业规模超过一万亿元。
作为AI市场中的重要组成,以GPU、FPGA等为主的AI加速器市场发展也随之水涨船高。2020年5月11日IDC发布的《人工智能基础架构市场(2019下半年)跟踪》报告表明,到2024年中国GPU服务器市场规模将达到64亿美元。
目前来看,绝大多数公司使用的是英伟达(NVIDIA)的公司的计算卡,所以下面主要介绍基于NVIDIA的技术现状。
从用户角度,GPU虚拟化实现可以分为2种类型:
主要是NVIDIA本身的虚拟化方案:NVIDIA GRID以及NVIDIA MPS。
NVIDIA GRID这个技术目前来看主要针对的是虚拟机平台,在技术特性方面也有明确写出某些功能不支持,其次NVIDIA GRID技术需要购买NVIDIA公司的软件授权才能使用,这个授权费相当昂贵。
NVIDIA MPS技术是NVIDIA对GPU共享的最早的一种支持模式,通过MPS server和MPS client就可以让多个GPU任务共享GPU的计算能力。对于容器平台,这种共享GPU的方式是一种可行性的选择。不过,这种指令代理技术有一个弊端,就是如果MPS Server挂掉或者其他MPS client端造成的非正常性退出,会导致处于同一个MPS server下的所有MPS client都受到影响,这种影响对于提供共享服务的平台来说是灾难性的,所以在生产环境几乎没有使用该方案。
NVIDIA以上2种的共享方式都不支持根据用户申请的请求对GPU计算能力的时间分片特性,GPU的使用是抢占式使用,无法做到资源的隔离。
1. 实现在NVIDIA CUDA Library API之上,它通过劫持对CUDA API的调用来做到GPU的虚拟化,此类方案缺点是兼容性依赖于厂商,每个版本需要对齐,同时需要重新编译AI应用,对于用户来说使用成本较高。
2. 实现在内核NVIDIA Driver之上。采用零侵入式的设计,使用上对用户可以做到无感知,对于CUDA的版本依赖较小。但该方案整体实现难度较大,需要对Linux内核和GPU架构的原理和实现有深入理解。
XPU是优优工场(YOYOWORKS)推出的容器GPU虚拟化产品。XPU正是采用前文所述的第二种实现方式,核心思想是将GPU在内核层进行切分,向上模拟出统一的XPU设备供容器使用,即多个容器共享一张GPU卡。XPU实现了一套框架能够很好的屏蔽异构GPU和应用(TensorFlow,PyTorch等)之间的耦合,对GPU进行故障隔离,显存隔离,算力隔离,从而实现业务的安全隔离,提高GPU硬件资源的利用率并降低使用成本。
XPU采用零侵入式架构设计,通过kernel module,services及container runtime为容器提供虚拟的GPU设备,在保证性能的前提下隔离显存和算力,为充分利用GPU硬件资源进行训练和推理提供有效保障。
一个典型的XPU部署架构,主要包含两大部分: 系统相关部分及容器相关部分功能组件。XPU通过将物理GPU等设备进行划分和隔离,向上提供切分后的算力,有效提高异构计算资源的利用率。其逻辑结构图如下所示:
系统相关部分包括:XPU toolkit,XPU services & XPU driver module,其中XPU driver module为内核驱动,给容器提供虚拟的GPU设备,提供有QoS保证的显存和算力。
容器相关部分为XPU container runtime,作为Docker container的对应工具,主要实现将XPU设备映射给容器,让容器内的能够识别经过虚拟化的GPU设备,从而实现在容器内运行GPU相关负载。
XPU的各个组件,支持直接部署在裸金属服务器上,即安装操作系统后,直接以Binary形式部署,也支持虚拟化部署。XPU具备适配多种Linux操作系统和云平台的能力,因此,XPU具有多样化的部署形式。
XPU支持CentOS、Ubuntu等主流Linux发行版本,同时支持基于KVM的虚拟机云平台和基于Docker的容器云平台。尤其是支持原生容器,并实现了和Kubernetes的平滑对接。
XPU采用0侵入部署方式,支持原生容器,即可运行AI应用,大大简化了客户算法工程师运维、管理AI基础架构的工作。在NVIDIA Docker的基础上,通过实现一套XPU container runtime,完成XPU在容器内的创建,删除以及监控等功能。
用户通过设置Docker环境变量的方式,用于为容器申请不同规格的XPU设备,XPU container runtime将虚拟出来的XPU,通过Docker暴露给容器内的程序使用。在K8S集群中,该组件用于接收K8S调度Pod设置的环境变量来负责创建相应规格的XPU容器。
利用K8S的device plugin及extended resources机制,将XPU集成到K8S集群中。
K8S device plugin机制如下图所示:
XPU为Kubernetes提供两个插件,实现与K8S的集成对接。集成后,系统管理员只需要在K8S中,即可完成对GPU资源的集中配置和调度管理。并且,允许系统管理员通过单一接口调度全部数据中心资源,实现SDDC(Software Defined Data Center,软件定义的数据中心),这样就简化了运维工作。
XPU为Kubernetes提供的两个插件是:
通过配置文件向Kubernetes注册名字为yoyoworks.com/xpu-shares的资源关键字,使其指向XPU Kubernetes Scheduler Extender的HTTP服务地址。
完全支持 NVIDIA Pascal 及以后架构,包括GeForce/Quadro/RTX/Tesla 全系列GPU 卡;
典型 NVIDIA GPU
Telsa | A100/A10/A16/A30/A40 T4 V100 P100/P40/P6/P4 |
RTX | A6000/A5000/A4000 |
Quadro | RTX8000/RTX6000/RTX5000/RTX4000 P6000/P5000/P4000 |
GeForce | 3090/3080Ti 等30XX 系列 2080Ti/2080 等20XX 系列 1080Ti/1080 等10XX 系列 |
注:上述列出的只是 NVIDIA GPU 典型型号,通常XPU 兼容Pascal 及之后所有 NVIDIA GPU。
CentOS 7.9/8.4, RHEL 7.9/8.4(64位)
Ubuntu Server 18.04/20.04 LTS(64位)
完全支持 CUDA 8.x, CUDA 9.x, CUDA 10.x, CUDA 11.x 容器以及 CUDA 应用
注:只支持 64 位 CUDA 容器和 CUDA 应用
容器环境:Docker 19.03 及以后版本
Kubernetes环境:Kubernetes 1.18及以后版本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。