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. nginx中proxy_set_header Host $host的作用

    nginx配置upstream负载均衡后请求400,配置proxy_set_header Host $host成功.请问这是什么原理? proxy_set_header Host $host有什么作用 ...

  2. json for python学习笔记

    1.json作用 存储数据与数据传输 2.python中的json可以在代码中用字符串表示,字符串内部类似于字典 如: json1 = '{"name":"Bob&quo ...

  3. C# Http 服务器get pos 请求 获取头信息 iOS 客户端联调

    using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text ...

  4. OO_Lab2总结博客

    OO_Lab2 一.单元内容 本单元内容为规格化设计,即通过参考已经完成的JML描述实现一个社交网络相关功能. 本单元整体来说难度不大,但是却是我最惨的一次作业,所以本博客可能会主要谈一谈测试中的一些 ...

  5. CentOS7带图形界面不能扫描网卡。

    CentOS7在带有图形界面,在配置/sysconfig/network-script/ifcfg-ens*后不能识别到网卡,有可能是NetworkManager打开导致,可以使用systemctl ...

  6. PCRaster安装

    改了很久才import成功.期间查了不少东西,虽然大部分没用上,但还是记录一下. PCRaster的安装和个人的最终解决方法 Software for environmental modelling ...

  7. 定制centos发行版

    //轻量级Centos定制发行版==================================================================================== ...

  8. Ubuntu 20.04 使用deb包安装mysql

    Ubuntu 20.04 使用deb包安装mysql 1.环境 WSL2 + Ubuntu 20.04 2.下载mysql的Ubuntu / Debian安装包 MySQL :: Download M ...

  9. vlan划分和设置

    今天用ensp模拟一个交换机vlan的划分和设置 先上拓扑图: 目标要实现每台电脑都能相互ping通并且都能ping通1.1.1.1/30 简单分析一下,先看交换机sw3,sw3直接和路由器相连,要实 ...

  10. 查看服务器cpu 核心数

    cpu相关信息所在文件是 /proc/cpuinfo 物理cpu数 # grep "physical id" /proc/cpuinfo | sort | uniq | wc -l ...