1 背景

随着Nvidia GPU在渲染、编解码和计算领域发挥着越来越重要的作用,各大软件厂商对于Nvidia GPU的研究也越来越深入,尽管Nvidia倾向于生态闭源,但受制于极大的硬件成本压力,提升GPU利用率、压榨GPU性能逐渐成为基础设施领域关注的焦点。自然地,为了追求GPU上显存资源和算力资源的时分复用和空分复用,大家都开始考虑软件定义GPU,GPU虚拟化应运而生。

2 GPU虚拟化

在深度学习领域,Nvidia GPU的软件调用栈大致如下图所示,从上至下分别为:
  • User APP:业务层,如训练或推理任务等
  • Framework:框架层,如tensorflow、pytorch、paddle、megengine等
  • CUDA Runtime:CUDA Runtime及周边生态库,如cudart、cublas、cudnn、cufft、cusparse等
  • CUDA User Driver:用户态CUDA Driver,如cuda、nvml等
  • Nvidia GPU HW:GPU硬件
理论上,上述每一层都可以做GPU虚拟化,但从工程化的角度来看,考虑可行性、可维护性、overhead和部署方面,在CUDA Driver或硬件层实现更合适。

2.1 用户态虚拟化

目前比较常用的方法是在用户态CUDA Driver的动态库做劫持,参考cuda hook开源代码。通过拦截CUDA Driver API的调用,实现显存资源和算力资源的隔离。不仅对用户代码零侵入,而且灵活性较高,无论是部署在Bare Metal,还是结合容器化进行部署,都比较方便。

2.2 内核态虚拟化

通过劫持CUDA Driver动态库部署,可能会存在用户篡改的风险,在公有云上一般不能容忍。而内核态的优势在于可以一定程度上防止用户篡改,但由于Nvidia的闭源性,在内核态做显存资源和算力资源的隔离,技术难度较高。目前阿里云、腾讯云和百度云已经实现部署。
 

2.3 硬件虚拟化

Nvidia官方硬件虚拟化方案MIG(Multi-Instance GPU),从Ampere架构开始支持硬件层面的隔离,隔离程度更彻底,但最多只支持7个GPU实例的虚拟化环境。

 

3 其他

3.1 vGPU

Nvidia官方虚拟GPU解决方案,主要用于支持交付图形丰富的虚拟桌面和工作站,可以将GPU资源重新划分,以保证GPU资源可以在多个虚拟机之间共享,或者可以将多个GPU分配给一个虚拟机,可提升任意工作负载的性能。

3.2 MPS(Multi-Process Service)

Nvidia官方多进程context融合方案,支持将多个进程上的kernel发送到MPS server或者直接发送到GPU上计算,避免了多进程在GPU上context的频繁切换。缺点是故障率较高,特别是故障在进程间扩散一般是不能容忍的。

3.3 远程GPU

将GPU Server拉远,实现GPU池化,突破CPU与GPU的配比极限,拓展GPU虚拟化,可以最大限度地利用集群内的GPU碎片,提升GPU的利用率。趋动科技的OrionX方案,目前处于领先地位。
 
 

Nvidia GPU虚拟化的更多相关文章

  1. HP “云图”GPU虚拟化工作站解决方案

    HP PCS ”云图”GPU虚拟化工作站解决方案 ——将图形计算从桌面移到数据中心 惠普云图形GPU虚拟化桌面系统是以用户为中心的私有云服务.除了保留了传统桌面虚拟化方案以集中设备为中心统一管理等优点 ...

  2. GPU虚拟化技术详解

    GPU虚拟化技术详解 GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出. 一.GPU概述 GPU这一概念也是相对于计算 ...

  3. kvmgt-kernel 实现GPU虚拟化

    KVMGT-kernel是Intel开源技术01.org推出的一项完整的GPU虚拟化解决方案,在KVM和XEN的基础上实现.本文档对该技术进行相应测试,让大家有个基本参考和了解.KVMGT-kerne ...

  4. Win10提示“您未连接到nvidia gpu的显示器”的解决方法

    显卡有Nvidia 和 ATI两个芯片,我们经常称他们为N卡和A卡,N卡更加注重于性能,而A卡则为颜色艳丽,画面更好.不过,最近一些windows10系统用户在使用N卡过程中,遇到了提示“您当前未使用 ...

  5. 利用nvidia-smi 管理和监控NVIDIA GPU设备

    NVIDIA系统管理界面介绍 原文来源:https://developer.nvidia.com/nvidia-system-management-interface NVIDIA系统管理界面(nvi ...

  6. NVIDIA GPU Pascal架构简述

    NVIDIA GPU Pascal架构简述 本文摘抄自英伟达Pascal架构官方白皮书:https://www.nvidia.com/en-us/data-center/resources/pasca ...

  7. NVIDIA GPU Volta架构简述

    NVIDIA GPU Volta架构简述 本文摘抄自英伟达Volta架构官方白皮书:https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Ce ...

  8. NVIDIA GPU Turing架构简述

    NVIDIA GPU Turing架构简述 本文摘抄自Turing官方白皮书:https://www.nvidia.com/content/dam/en-zz/Solutions/design-vis ...

  9. NVIDIA GPU自动调度神经网络

    NVIDIA GPU自动调度神经网络 对特定设备和工作负载进行自动调整对于获得最佳性能至关重要.这是有关如何使用自动调度器为NVIDIA GPU调整整个神经网络. 为了自动调整神经网络,将网络划分为小 ...

  10. NVIDIA GPU的快速傅立叶变换

    NVIDIA GPU的快速傅立叶变换 cuFFT库提供GPU加速的FFT实现,其执行速度比仅CPU的替代方案快10倍.cuFFT用于构建跨学科的商业和研究应用程序,例如深度学习,计算机视觉,计算物理, ...

随机推荐

  1. Linux_Shell脚本

    Shell脚本 shell基础 shell变量 shell扩展 shell基础 shell简介 1.什么是shell? shell是一种命令解释器 shell也是一种编程语言 shell,python ...

  2. AirServer 7(专业mac投屏软件)v7.2.6中文版

    AirServer Mac是一款好用的投屏工具,它可以将您的Mac变成通用镜像接收器,允许您使用内置的AirPlay或基于Google Cast的屏幕投影功能镜像设备的显示器.您可以通过任何AirPl ...

  3. 如何用虚拟机VMware Workstation安装CentOs-7

    因为我是先安装虚拟机的,再安装CentOs的.在此建议大家先安装CentOs-7再安装虚拟机,比较方便. 1.首先进入centos官方网站下载,网站如下:https://www.centos.org/ ...

  4. python基础简记

    pyhon 2 兼容 python 3 : 导入__future__包: 一些命名规定:以单划线开头的表示不能直接访问类属性,需要访问接口:以双划线开头的表示类的私有成员:以双划线开头和结尾的表示py ...

  5. android 下载安装包更新app

    1下载 public void download(String url) { Utils.Loge("download",url); Uri uri = Uri.parse(url ...

  6. npm安装时加 --save和不加的区别

    npm install xxx --save 命令是安装模块到项目node_modules目录下,会将模块依赖写入package.json文件中的dependencies{}下.如果将node_mod ...

  7. ES5及ES6的新增特性

    介绍 es表示ECMASCript ,他是从es3,es5,es6,es5是2009.12月发布的,es6是2015.6月发布的.vue2完全支持es5的(vue3完全支持es6的),react完全支 ...

  8. MySQL -my.cnf配置文件优化

    # [mysqld] datadir=/var/lib/mysql #socket=/var/lib/mysql/mysql.sock user=mysql ### 设置主从的时候的唯一ID 每台主机 ...

  9. C语言程序设计基础 实验3 函数

    C语言程序设计基础 实验3 函数   一.实验目的 1. 理解函数的本质:模块化,实现代码复用 2. 掌握函数定义.声明.调用的语法 3. 理解并掌握函数的形参.实参,以及函数调用和返回的过程 4. ...

  10. 3.Vue常用特性

    1.表单操作 (1)基于Vue的表单操作 input 单行文本 处理方式就是使用 v-model双向绑定data中的数据 1 <input type="text" v-mod ...