《大模型时代的基础架构》一文了解GPU云原生虚拟化调度方案
<div class='showpostmsg'>## 背景大模型时代,当前单 GPU 算力调度技术主要有
- 基于虚拟机的 PCI-E 设备直通
- 基于 Kubernetes 的 Device Plugin
这两种方式都对GPU调度的颗粒度都是单卡(整颗GPU芯片),会独占整个 GPU 。但在当前 GPU 寸土寸金的时代,这种调用方式在一些任务场景下会浪费大量 GPU 资源。
- AI推理:通常一次只处理一个或一小批输入样本(流量波动)
- 高性能计算:一些 HPC 应用会因 CPU 的瓶颈而对 GPU 的利用率不高
- 开发环境:研发人员使用 Jupyter Notebook 进行交互式的模型开发,大多数情况只需较低规格的机器
- 测试环境:测试人员对大模型应用进行测试
- CI/CD :流水线往往只需要在触发的时候有限的GPU资源运行测试用例
## 需求
GPU虚拟化应当实现对需求:
- 硬件复用
- 时分复用(类比单核时间片轮转)
- 空分复用(多个进程可以同时运行在一个 GPU 上)
- 隔离性(互不影响)
- 可运营(保证租户实际可用的资源量)
## 层级
GPU虚拟化方案从硬件层到应用层:
- 硬件级:Nvidia MIG、AMD SRIOV技术、百度昆仑 SRIOV技术
- 虚拟机/虚拟硬件级:Nvidia vGPU技术、Intel GVT-G技术
- CUDA内核劫持/驱动劫持:阿里闭源cGPU、腾讯闭源qGPU、百度内核态虚拟化、火山引擎闭源mGPU
- CUDA聚合:Nvidia MPS技术(多进程服务解决方案)
- CUDA运行时劫持:腾讯开源vCUDA、rCUDA
- 机器学习框架:AntMan项目
分类:
- 当前常见的虚拟化方式,包括内核态虚拟化、NVIDIA vGPU虚拟化,在底层实际都是基于时间片轮转的时分复用方案。在某一时间片内,如果该进程无法很好的利用计算资源,这些计算资源就是浪费掉的。
- 而MPS,真正实现了并行(parallel),该方案可以做到空分复用,是目前看到同时兼顾效率与性能的方案。
延迟敏感型的在线推理任务,建议选择基于进程融合的空分方案。要求严格隔离的场景建议选择时分方案。其它场景选择两者没有区别。
## 对于Kubernete中GPU调度的理解
**k8s的GPU共享是要服务于GPU调度,但GPU调度并不需要GPU共享。**
理解GPU调度与GPU共享的关系
- **GPU共享服务于GPU调度**:
- 在GPU资源有限或成本敏感的情况下,GPU共享技术可以帮助提高资源利用率,使得更多的Pods可以在同一物理GPU上运行。
- GPU共享技术可以将一个物理GPU分割成多个虚拟GPU实例,每个实例可以分配给不同的Pods。这样,即使资源有限,也能支持更多的任务运行。
通过GPU共享,调度器可以在有限的GPU资源上调度更多的Pods,从而提高集群的整体效率。
- **GPU调度不一定需要GPU共享**:
- 如果集群中有足够的GPU资源,并且每个Pod需要完整的GPU资源,那么不需要使用GPU共享技术。
- 在这种情况下,GPU调度只是简单地将每个GPU分配给一个Pod,以确保资源的独占使用。
- 当GPU资源充足时,每个Pod都可以拥有一个完整的GPU,调度器只需确保没有资源冲突即可。
GPU调度的要点在于:**GPU要尽可能响应任务、任务完成时间尽可能短、资源利用率尽可能高、不要卡在IO上。**
由于CPU与GPU有异步等待关系,存储、网络IO是最影响GPU利用率的问题。
**由于当前GPU的稀缺性,CPU、存储、网络等一切其他资源都要让步给GPU。**
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>一起学习大模型基础架构<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/pleased.gif" width="48" /></p>
<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="48" />小白前来学习一下</p>
页:
[1]