一次关于GPU虚拟化的技术预研

最近领导派发了一个任务,需要研究一下GPU集群的相关技术。主要是为了解决两个方面的问题,一是目前的GPU资源使用过剩,一张显卡有24G显存,但是跑一个算法模型只用了6G,并且一个模型只能并发使用一张显卡,其他的的进程会被阻塞,效率利用低下;二是后期可以把算力集中起来,做大模型的训练。

折腾了挺久,把这一次的经历总结一下。

由于是第一次接触这一块技术,我搜寻了GPU集群的相关概念,马上找到了K8s的相关支持,支持使用设备插件把GPU资源暴露到集群,使得其他节点可以使用这些资源,详见kubernetes.io/zh-cn/docs/...; 一开始我以为这件事并没有那么复杂,问题迎刃而解。但是既然是技术预研,最好能够给出实践结果,并给出各项指标分析。在实践了之后,发现k8s的pod配置GPU的数量单位是个,也就是GPU独占,就算能够解决集群的方式,也不能解决并发使用的问题。

于是发现要提高GPU的使用率,离不开GPU虚拟化的概念。关于GPU虚拟化,网上的资料很少,还是了解大概的情况。 目前GPU虚拟化技术可以分为4个演变过程:

一:GPU的简单虚拟化,按照物理GPU的固定拆分,分成多个vGPU

二:任意虚拟化,将物理GPU从算力和显存等维度拆分,按照%切分成多个GPU

三:远程调用,AI应用服务器与物理GPU分离部署,使得应用可以调用远程的GPU服务器

四:GPU池化 , 将GPU资源统一管理,实现动态伸缩,灵活调度

按照目前的情况,实现前面三个步骤,差不多能够满足目前需求;至于池化后期业务扩展可以考虑改造。

后面分析市场上的相关方案,有nVidia的vGPU方案,有VMware的bitfusion方案,还有一些互联网公司的方案。 在分析了价格情况之后我优先选择了bitfusion方案。

方案包含多个组件, ①ESXI操作系统,可以更方便地去管理多个虚拟机,一定要在安装GPU的物理服务器上安装,不然还是识别不到显卡; ②vCenter,集群模式下多个vCenter可以管理多个ESXI,每个ESXI又可以管理多台虚拟机 ③bitfusion相关组件,包含服务端和客户端,以下是bitfusion方案的架构图,具体文档地址docs.vmware.com/cn/VMware-v...

在折腾了几天之后终于把环境装好了,虚拟机数量还是挺多的,不过好在是跑成功了。

.........(此处跳过各种调试场景)

列一下踩过的坑:①首先在bitfusion服务器需要开启显卡直通,不然虚拟机识别不到显卡 ②目前bitfusion支持的最新CUDA版本是11.5,如果CUDA环境太新,会提示驱动版本太旧,所以需要把CUDA以及各个版本依赖降一下

结果

两张显卡可以实现同时跑4个任务

但是!!

从结果来看速度慢了好几倍,猜想可能是CUDA版本和各个依赖的版本降低,导致GPU加速效果减少;bitfusion采用服务端和客户端的方式,可能会有带宽方面的瓶颈以及增加了其他方面的损耗。

不是说这个方案不好,只是说目前不太满足当前我们的场景,所以不得已放弃。如果大家用也可以选择尝试。

关于GPU虚拟化,资料确实少,普通消费级显卡虚拟化的意义不大,个人用户玩不起;而且需要硬件,软件同时支持。一般企业做这一块也会有专门的解决方案。后续可能会尝试其他方案的研究。

相关推荐
筏.k15 分钟前
C++ 网络编程(14) asio多线程模型IOThreadPool
网络·c++·架构
星辰大海的精灵1 小时前
如何确保全球数据管道中的跨时区数据完整性和一致性
java·后端·架构
鹏程十八少1 小时前
6.Android 设计模式 五个核心之三:观察者模式 在项目中的实战
架构
数据智能老司机1 小时前
Linux内核编程——Linux设备模型
linux·架构·操作系统
yyds4672 小时前
滑动窗口协议
前端·架构
DemonAvenger2 小时前
Go结构体内存布局优化与字段排序技巧
性能优化·架构·go
Codebee10 小时前
实战AI增强注解驱动:OneCode语义工程的智能升级
架构
ai小鬼头10 天前
AIStarter开发者熊哥分享|低成本部署AI项目的实战经验
后端·算法·架构
美狐美颜sdk10 天前
如何在直播SDK中实现高性能面具贴纸渲染?底层架构与优化方案详解
架构
198910 天前
【Dify精讲】第19章:开源贡献指南
运维·人工智能·python·架构·flask·开源·devops