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. python常用数据类型方法详解

    str类型 count('str',begin_index,ending_index) 在s字符串中统计str出现的次数 s.endswith('str') 判断s字符串是否是已str字符串结尾,为真 ...

  2. Ubuntu常用环境配置

    gcc sudo apt-get install build-essential update-alternatives 管理python环境 # 添加版本 # update-alternatives ...

  3. 【Unity】利用C#反射打印类的字段信息

    最近在用protobuf-net序列化功能生成.bytes配置文件时,遇到了需要把.bytes配置文件再另外转成Lua配置文件(Lua配置表内容举例)的需求.Lua配置文件需要记录配置类的各个字段名和 ...

  4. 任意的形如 z = F(x,y)的曲面生成与显示---基于OpenGL Core Profile

    运行结果:   (圆锥面) (抛物面) (马鞍面) 其中的做法是:从顶部看上去就是一个平面网格.每个点的 z.x的位置都是程序细分出来的(指定起始.结束.步长).比较固定.但高度 y 的计算使用 用户 ...

  5. Vue的Component name报错

    问题描述: Component name "xxxxx" should always be multi-word.eslintvue 解决方案: 在项目目录中找到 .eslintr ...

  6. linux软件安装篇

    nginx篇 第一件事情 cd /etc/yum.repo.d mv CentOS-Base.repo CentOS-Base.repo.bak wget -O CentOS-Base.repo ht ...

  7. C# 将实体转xml/xml转实体

    xml转实体 /// <summary> /// 把xml转换成实体 /// </summary> /// <typeparam name="T"&g ...

  8. Blob文件下载type类型

    let url = window.URL.createObjectURL(new Blob([文件流(一般为res.data)], {type: "Blob类型"}) let li ...

  9. 120、商城业务---订单服务---rabbitTemplate循环依赖问题

    https://blog.csdn.net/qq_41731316/article/details/119803796

  10. docker安装pgsql

    aliyun环境docker安装并使用postgres121.拉取postgres镜像docker pull postgres:12 2.检查现有镜像docker images 3.启动postgre ...