AI行业现状

随着我国“新基建”的启动,AI(Artificial Intelligence,人工智能)和5G、大数据中心、工业互联网等一起形成了新基建的7大外围冲破畛域。AI将渗透到各个行业,变得越来越“基础设施化”。

德勤在2020上半年公布的《寰球人工智能倒退白皮书》预测数据表明:2025年世界人工智能市场将超过6万亿美元;中国人工智能外围产业规模到2020年将增长至1600亿元,带动相干产业规模超过一万亿元。

作为AI市场中的重要组成,以GPU、FPGA等为主的AI加速器市场倒退也随之水涨船高。2020年5月11日IDC公布的《人工智能基础架构市场(2019下半年)跟踪》报告表明,到2024年中国GPU服务器市场规模将达到64亿美元。

GPU虚拟化背景

目前来看,绝大多数公司应用的是英伟达(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的应用是抢占式应用,无奈做到资源的隔离。

软件层面

该层面实现GPU虚拟化,又分为两种次要实现形式:

  1. 实现在NVIDIA CUDA Library API之上,它通过劫持对CUDA API的调用来做到GPU的虚拟化,此类计划毛病是兼容性依赖于厂商,每个版本须要对齐,同时须要从新编译AI利用,对于用户来说应用老本较高。
  2. 实现在内核NVIDIA Driver之上。采纳零侵入式的设计,应用上对用户能够做到无感知,对于CUDA的版本依赖较小。但该计划整体实现难度较大,须要对Linux内核和GPU架构的原理和实现有深刻了解。

XPU计划

XPU是优优工场(YOYOWORKS)推出的容器GPU虚拟化产品。XPU正是采纳前文所述的第二种实现形式,核心思想是将GPU在内核层进行切分,向上模拟出对立的XPU设施供容器应用,即多个容器共享一张GPU卡。XPU实现了一套框架可能很好的屏蔽异构GPU和利用(TensorFlow,PyTorch等)之间的耦合,对GPU进行故障隔离,显存隔离,算力隔离,从而实现业务的平安隔离,进步GPU硬件资源的利用率并升高应用老本。

XPU特点

XPU采纳零侵入式架构设计,通过kernel module,services及container runtime为容器提供虚构的GPU设施,在保障性能的前提下隔离显存和算力,为充分利用GPU硬件资源进行训练和推理提供无效保障。

高性能

采纳本地应用GPU计算资源的架构,有人造的性能劣势,相比于物理GPU,性能损耗简直为零。
反对将GPU切片为任意大小的XPU,从而容许多AI负载并行运行,进步物理GPU利用率。
进步GPU综合利用率多达3-10倍,1张卡相当于起到N张卡的成果,真正做到低廉算力平民化。

安全性

完满反对GPU单卡和多卡的算力隔离,显存隔离及故障隔离。

兼容性

零侵入设计: 最大的限度保障向后和向前兼容。用户零开销在 XPU 平台上经营现有AI利用,无缝兼容已有NGC等容器镜像。
硬件兼容性: 完满反对包含NVIDIA Pascal及当前架构的系列 GPU(GeForce,Quadro/RTX,Tesla);反对裸金属和虚拟环境,反对物理GPU和vGPU。
架构兼容性:依靠实现在内核模块层的通用接口能力,XPU 完满反对CUDA8.0 及当前所有版本的框架和利用。
生态兼容性:兼容业界规范的Kubernetes和NVIDIA Docker产品和计划。

软件架构

一个典型的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与容器的集成

XPU采纳0侵入部署形式,反对原生容器,即可运行AI利用,大大简化了客户算法工程师运维、治理AI基础架构的工作。在NVIDIA Docker的根底上,通过实现一套XPU container runtime,实现XPU在容器内的创立,删除以及监控等性能。

用户通过设置Docker环境变量的形式,用于为容器申请不同规格的XPU设施,XPU container runtime将虚构进去的XPU,通过Docker裸露给容器内的程序应用。在K8S集群中,该组件用于接管K8S调度Pod设置的环境变量来负责创立相应规格的XPU容器。

XPU与Kubernetes集成

利用K8S的device plugin及extended resources机制,将XPU集成到K8S集群中。

K8S device plugin机制如下图所示:

XPU为Kubernetes提供两个插件,实现与K8S的集成对接。集成后,系统管理员只须要在K8S中,即可实现对GPU资源的集中配置和调度治理。并且,容许系统管理员通过繁多接口调度全副数据中心资源,实现SDDC(Software Defined Data Center,软件定义的数据中心),这样就简化了运维工作。

XPU为Kubernetes提供的两个插件是:

XPU Kubernetes Device Plugin
通过和XPU driver module 及XPU Services通信,获取XPU资源池信息。
通过Kubernetes定义的Device Plugin规范向Kubernetes注册名字为yoyoworks.com/xpu-shares的资源。

XPU Kubernetes Scheduler Extender
提供基于HTTP API通信的松耦合调度扩大性能。
通过配置文件向Kubernetes注册名字为yoyoworks.com/xpu-shares的资源关键字,使其指向XPU Kubernetes Scheduler Extender的HTTP服务地址。

兼容性列表

NVIDIA GPU
齐全反对 NVIDIA Pascal 及当前架构,包含GeForce/Quadro/RTX/Tesla 全系列GPU 卡;

反对裸金属环境下应用物理 NVIDIA GPU
反对虚拟化环境下应用穿透的 NVIDIA GPU
反对虚拟化环境下应用 NVIDIA GRID vGPU
典型 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位)
NVIDIA CUDA
齐全反对 CUDA 8.x, CUDA 9.x, CUDA 10.x, CUDA 11.x 容器以及 CUDA 利用

注:只反对 64 位 CUDA 容器和 CUDA 利用

云平台
容器环境:Docker 19.03 及当前版本

Kubernetes环境:Kubernetes 1.18及当前版本

起源:优优工场(YOYOWORKS)