Run:ai 学习记录

💡 原文中文,约3400字,阅读约需8分钟。
📝

内容提要

Run:ai是Nvidia的AI基础设施编排平台,核心功能包括动态GPU配额与池化、GPU虚拟化及硬隔离、高级AI调度。其架构分控制平面和集群,通过Webhook接管Kubernetes调度。开源替代品KAI Scheduler仅支持软隔离,无法阻止超额显存占用,可借助MIG、MPS或Webhook缓解。

🔎

延伸解读

硬隔离与软隔离的差异

Run:ai 商业版通过底层虚拟化实现物理级别的 CUDA 调用拦截,可为 GPU 和内存设置硬配额,而开源替代 KAI Scheduler 仅能在 Kubernetes 层面做软隔离,无法阻止容器超额占用显存,导致同一显卡上的其他租户受影响。这种差异在多租户场景下尤为关键,硬隔离能有效避免“吵闹的邻居”问题。

开源替代的局限与缓解方案

KAI Scheduler 作为开源平替,仅支持单集群内的调度,且无法强制限制 GPU 使用百分比。针对软隔离的不足,文章提出三种缓解方法:使用新企业级 GPU 的 MIG 技术(最多切分为 7 个小 GPU)、采用 MPS 模式进行基于 CUDA 进程的资源切片,或通过 Kubernetes Mutating Webhook 包装容器以拦截资源请求,但后者存在被恶意绕过的风险。

架构与部署要点

Run:ai 分为控制平面和集群两部分,控制平面负责管理和用户交互,集群负责调度和负载运行。控制平面可本地部署(支持 Air-Gapped 模式)或使用 Nvidia 的 SaaS 服务,出于安全考虑,许多公司选择本地部署。集群通过 Mutating Admission Webhook 接管 Kubernetes 调度,将任务调度器改为 runai-scheduler,并注入 CUDA 拦截库以实现 GPU 虚拟化。

Q&A

Run:ai 是什么?它的核心功能有哪些?

Run:ai 是 Nvidia 的企业级 AI 基础设施编排和管理平台,核心功能包括动态 GPU 配额与池化、GPU 虚拟化及硬隔离、高级 AI 调度。

Run:ai 的动态 GPU 配额和池化功能解决了什么问题?

原生 Kubernetes 的资源分配是静态的,而 Run:ai 支持复杂的规则系统,可以保证每个 team 或 project 的基础配额,同时允许超额借用,并支持通过 preemption 踢掉低优先级任务,从而最大化 GPU 利用率。

Run:ai 的硬隔离和 KAI Scheduler 的软隔离有什么区别?

Run:ai 的硬隔离通过底层虚拟化实现物理级别的 CUDA 调用拦截,可以设置 GPU 和内存的硬配额;而 KAI Scheduler 只能在 Kubernetes 层面做逻辑控制,无法阻止超额显存占用,可能导致 Noisy Neighbor 问题。

Run:ai 的架构是怎样的?控制平面和集群如何交互?

Run:ai 分为控制平面(Control Plane)和集群(Cluster)。控制平面负责资源管理、用户 RBAC、任务提交和监控;集群负责调度和工作负载管理。控制平面不会主动连接集群,只有集群发起读取控制平面的请求。

Run:ai 是如何与 Kubernetes 集成并接管调度的?

当任务部署到集成了 Run:ai 的 Kubernetes 集群时,Mutating Admission Webhook 会触发,强制改写资源的 schedulerName 为 runai-scheduler,从而接管调度。对于 GPU 虚拟化任务,Webhook 还会注入环境变量和挂载目录,使容器启动时加载 CUDA 拦截库。

KAI Scheduler 有哪些局限性?如何缓解硬隔离不足的问题?

KAI Scheduler 只支持单集群内的软隔离,无法阻止超额显存占用,可能引发 Noisy Neighbor 问题。缓解方法包括:使用 Nvidia MIG 或 MPS 进行硬件级隔离,或通过 Kubernetes Mutating Webhook 进行软件层面的资源拦截,但后者可能被绕过。

🏷️

标签

➡️

继续阅读