当前位置:   article > 正文

GPU虚拟化现状及新技术方案XPU

gpu虚拟化

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)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/590151
推荐阅读
相关标签
  

闽ICP备14008679号