共计 3755 个字符,预计需要花费 10 分钟才能阅读完成。
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 虚拟化,又分为两种次要实现形式:
- 实现在 NVIDIA CUDA Library API 之上,它通过劫持对 CUDA API 的调用来做到 GPU 的虚拟化,此类计划毛病是兼容性依赖于厂商,每个版本须要对齐,同时须要从新编译 AI 利用,对于用户来说应用老本较高。
- 实现在内核 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)