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

相关推荐
高木木的博客1 小时前
数字架构智能化测试平台(1)--总纲
人工智能·python·nginx·架构
2501_933329552 小时前
企业舆情处置实战:Infoseek数字公关AI中台技术架构与功能解析
大数据·人工智能·架构·数据库开发
Kel2 小时前
LangChain.js 架构设计深度剖析
人工智能·设计模式·架构
俺爱吃萝卜2 小时前
Spring Boot 3 + JDK 17:新一代微服务架构最佳实践
java·spring boot·架构
光影少年3 小时前
Monorepo架构是什么,如何学习Monorepo架构?
前端·学习·架构·前端框架
张忠琳3 小时前
【openclaw】OpenClaw Flows 模块超深度架构分析
ai·架构·vllm
gyx_这个杀手不太冷静3 小时前
大人工智能时代下前端界面全新开发模式的思考(六)
前端·架构·ai编程
2603_954708313 小时前
交直流混合微电网架构:拓扑优化与功率交互设计
人工智能·分布式·物联网·架构·系统架构·能源
风曦Kisaki3 小时前
#企业级网络架构Day01:网络概述,网络参考模型,交换机命令行
网络·架构·智能路由器
147API4 小时前
多模型 fallback 怎么设计?一个可落地的简化架构
人工智能·架构·大模型api