GPU虚拟化

这篇具有很好参考价值的文章主要介绍了GPU虚拟化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GPU 虚拟化技术

须知: 文章内容大程度参考B站王利明老师对《GPU虚拟化技术分享》的主题演讲
视频链接: https://b23.tv/uQKBpcK

1 GPU 和软件架构

GPU可以用于图形渲染,GPU 作为加速图形绘制的芯片时,它主要面向的产品主要是会集中在 PC 和游戏两个市场。也能够用于高性能计算领域(GPGPU)和编解码场景(子模块)等。

下图将软件系统中的 GPU 子系统抽象了几层概念,在 GPU 上的经典软件架构(不含虚拟化),分别适用到 通用计算领域图形渲染领域 两类场景。
GPU虚拟化
图:GPU 的典型软件架构(不含虚拟化)

2 GPU 和虚拟化

虚拟化使用软件在计算机硬件上创建抽象层,能够将单个计算机的硬件元素(包括处理器、内存、存储器等)分成多个虚拟计算机,通常称为虚拟机 (VM)。 GPU 虚拟化是系统软硬件模拟 GPU 资源,以支持虚拟机方案。

3 GPU 虚拟化需求

体现在资源共享和资源隔离两方面

  • 资源共享的需求:GPU 性能越来越强大,需要多租户(多容器和多虚机)共享资源。应用场景如多屏车机、本地桌面虚机、远程桌面(桌面虚拟化)、云 GPU 虚机。
  • 资源隔离的需求:要保证多租户互不影响,应用场景如显存隔离、算力隔离、故障隔离。

4 GPU 虚拟化技术

虚拟化技术实现体现三个层次,即用户层、内核层和硬件层。然后在根据技术的应用场景分为隔离场景(容器和虚机)和硬件场景(虚拟桌面、渲染和 AI 计算)两个维度,不同的技术可能仅适用它对应的的场景。技术实现可分类为:

  • 用户层:API 拦截和 API forwarding
  • 内核层:GPU 驱动拦截
  • 内核层:GPU 驱动半虚拟化:Para Virtualization
  • 硬件层:硬件虚拟化:Virtualization
  • 硬件层:SRIOV:Single Root I/O Virtualization
  • 硬件层:Nvidia MIG:Multi-Instance GPU

5 GPU 用户层虚拟化

1)本地 API 拦截和 API forwarding

  • 在用户态实现一个函数库,假设叫 libwrapper ,它要实现底层库的所有 API
  • 让 APP 调用这个 libwrapper => 如何实现?底层动态库 + 用dlopen打开
  • libwrapper 拦截用户的函数调用,对函数进行解析,然后使用参数去调用实际的底层库相同名称的函数
  • 调用完成后,libwrapper 把结果返回给 APP

2)远程 API forwarding

  • libwrapper 通过网络,去调用不同机器上的底层库
  • libwrapper 变成两部分,client 用于转发,和 server 用于接收和调用
  • 可以实现 GPU 池化(即多个 GPU 可以组成调用池,由多个 client 来调用),可以做到不具备 GPU 的机器能实现 GPU 的功能

3)半虚拟化 API forwarding

  • APP 和 libwrapper 运行在虚机中
  • libwrapper 通过半虚拟化方式(virtio)进行通讯,调用宿主机的底层库
  • 虚机的内核要实现 virtio frontend => 优化点? 虚机和宿主机共享内存加速数据传递
  • 宿主机的 hypervisor 实现 virtio backend
  • 宿主机完成底层库的调用

6 GPU 内核层虚拟化

1)内核模块通过设备文件拦截
内核拦截模块模拟一个设备文件,内核拦截模块将用户进程的访问转发到(真实的)驱动软件,然后将对应内核函数的返回解析,再返回用户态。

  • 通常底层库通过设备文件访问 GPU 驱动的功能,假设为 /dev/realgpu
  • 实现一个内核模块,输出模拟的设备文件给用户空间,假设为 /dev/realgpu
  • 把模拟的设备文件 bind mount 到容器里,伪装成真的设备文件 /dev/realgpu
  • APP 和底层库都在容器里运行,底层库访问伪装的设备文件 /dev/realgpu,此时所有访问被内核模块拦截

2)驱动半虚拟化
用户进程通过系统虚拟化层(hypervisor)提供的虚拟化接口,访问(真实的)虚拟化接口。

  • APP 和底层库都在虚机里
  • 虚机的 GPU 驱动实现半虚拟化接口,通过类似 hypercall 的方式,调用宿主机实际的 GPU 驱动
  • hypercall 切换 guest 到 hypervisor, hypervisor 通过内核中的驱动代理来访问实际的 GPU 驱动

例如,车机中的 GPU 虚拟化。基于 type 1 的 hypervisor 虚拟化技术,支持多个 Guest。
GPU虚拟化

7 GPU 硬件层虚拟化

虚拟化需要软件和硬件结合才能实现,其中需要硬件的支持的部分包括

  • 支持 CPU 和内存的硬件虚拟化
  • 支持 IOMMU
    • DMA remapping和Interrupt remapping
    • 硬件隔离和页表机制

8 GPU 全虚拟化

该方案实现了将整个 GPU 透传给虚拟,严格来说不算虚拟化领域,因为无法实现 GPU 资源共享。文章来源地址https://www.toymoban.com/news/detail-449923.html

  • 虚机的 GPU 驱动,不需要做任何修改,基本上访问的是真实的硬件资源
  • 整个 GPU 透传给虚机,性能损耗最小
  • 因为无法实现 GPU 资源共享,一般认为不属于GPU 虚拟化

9 参考资料

  • 《GPU虚拟化技术分享》| 王利明

到了这里,关于GPU虚拟化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【架构】GPU虚拟化

    局限:授权付费 Hardware Partition:Ampere 架构的 A100 GPU 所支持的 MIG,即是一种 Hardware Partition。它的问题是不灵活: 只有高端 GPU 支持;只支持 CUDA 计算;A100 只支持 7 个 MIG 实例。 nVidia MPS:它通过将多个进程的 CUDA Context,合并到一个 CUDA Context 中,省去了 Context Switch 的开销,也

    2024年02月21日
    浏览(29)
  • AMD GPU虚拟化

    在GPU虚拟化场景下Linux内核层一般需要二套driver,一套是是常规的VF driver(比如amdgpu.ko、amdkfd.ko), 另一套是PF driver(比如gim.ko)用来sriov的初始化(SR-IOV extended capability),vfid的配置等。其中PF driver运行于Host侧,而VF driver运行于虚拟化VM侧,gim.ko和amdkfd.ko/amdgpu.ko之间可以通过Mailbox和

    2024年02月06日
    浏览(33)
  • Nvidia GPU虚拟化

    目录 1 背景 2 GPU虚拟化 2.1 用户态虚拟化 2.2 内核态虚拟化 2.3 硬件虚拟化 3 其他 3.1 vGPU 3.2 MPS(Multi-Process Service) ​编辑 3.3 远程GPU 随着Nvidia GPU在渲染、编解码和计算领域发挥着越来越重要的作用,各大软件厂商对于Nvidia GPU的研究也越来越深入,尽管Nvidia倾向于生态闭源,

    2024年02月06日
    浏览(37)
  • GPU桌面虚拟化HyperV实践

      目录 创建虚拟机 添加GPU 刷入显卡驱动 a说科技:1台电脑当10台用,在家开网吧,显卡分割术,Gpu虚拟化 (下) https://www.bilibili.com/video/BV1Dm4y1A7XR/?spm_id_from=333.880.my_history.page.clickvd_source=473f5de900547235e222613fd986ab31 额外补充说明:镜像可用Wintogo快速制作,刷入wintogo EFI到虚拟

    2024年02月06日
    浏览(32)
  • 虚拟化和云计算文章大合集

    近期,我写了很多虚拟化和云计算类文章,先将各文章整理如下,衷心建议您收藏,慢慢查阅(〜㉨)〜 KVM详解(一)——KVM基础知识 KVM详解(二)——KVM安装部署 KVM详解(三)——KVM创建虚拟机 KVM详解(四)——KVM克隆与KVM配置文件 KVM详解(五)——KVM虚拟机镜像格式

    2024年02月01日
    浏览(33)
  • K8S节点GPU虚拟化(vGPU)

    4paradigm提供了k8s-device-plugin,该插件基于NVIDIA官方插件(NVIDIA/k8s-device-plugin),在保留官方功能的基础上,实现了对物理GPU进行切分,并对显存和计算单元进行限制,从而模拟出多张小的vGPU卡。在k8s集群中,基于这些切分后的vGPU进行调度,使不同的容器可以安全的共享同一张物

    2024年01月16日
    浏览(52)
  • GPU 容器虚拟化新能力发布和全场景实践

    今天给大家分享的主题是百度智能云在「GPU 容器虚拟化」方面的最新进展和全场景实践,希望通过这次分享和大家一起探讨如何在实际业务场景更好的应用 GPU 容器虚拟化技术。 本次分享将首先介绍百度智能云 GPU 容器虚拟化 2.0 的升级变化,然后介绍新版本中的技术实现方

    2024年02月14日
    浏览(31)
  • k8s中GPU虚拟化工具gpu-manager的安装

    gpu-manager是腾讯的一个开源vGPU应用,具体原理就不介绍了,详见GPUManager虚拟化方案。 本文主要参照腾讯开源vgpu方案gpu-manager安装教程进行安装,并就安装时出现的问题,对其中的部分配置进行了更改,如果根据上述文章安装失败,可以参考本文来进行安装。 gpu-manager不提供

    2024年02月06日
    浏览(28)
  • GPU虚拟化理解包含直通,k8s安装,GPU-manager

    vGPU,即真正意义上的GPU虚拟化方案,就是将一块GPU卡的计算能力进行切片,分成多个逻辑上虚拟的GPU,以vGPU为单位分配GPU的计算能力, 并将单块GPU卡分配给多台虚拟机使用,使得虚拟机能够运行3D软件、播放高清视频等,极大地提升了用户体验。真正实现了GPU资源的按需分

    2024年02月13日
    浏览(36)
  • 虚拟化技术 — Libvirt 异构虚拟化管理组件

    Libvirt 是目前使用最为广泛的异构虚拟化管理工具,由 libvirt API 函数库、libvirtd Daemon 这 2 个关键部分组成,还具有一个默认命令行管理工具 virsh。 https://libvirt.org/ Libvirt 采用了面向驱动的架构设计,北向提供了统一的虚拟化资源管理 API,南向通过不同的驱动程序来对接异构

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包