首页/新闻资讯/正文详情

拆解Flex:ai本地虚拟化的3大核心组件:CUDA劫持、GPU设备插件与Volcano调度扩展

发布时间:2026/9/25 3:05:06 来源:云帆数科 栏目:资讯中心
拆解Flex:ai本地虚拟化的3大核心组件:CUDA劫持、GPU设备插件与Volcano调度扩展
拆解Flex:ai本地虚拟化的3大核心组件CUDA劫持、GPU设备插件与Volcano调度扩展【免费下载链接】flexaiFlex:ai是一个面向AI容器场景的开源项目其核心能力包含两大部分分别是XPU虚拟化和多级智能调度。其中XPU虚拟化分为本地XPU虚拟化和跨节点拉远虚拟化本地XPU虚拟化支持将1台服务器上的XPU算力卡虚拟化分割出多个虚拟算力单元实现单张算力卡在多个容器的共享。跨节点拉远虚拟化支持通过RDMA或TCP网络访问远端节点上的算力卡。多级智能调度支持对切分出的虚拟卡进行Binpack等资源级调度以及对AI训推任务进行分时调度等能力。项目地址: https://gitcode.com/ModelEngine/flexaiFlex:ai是一个面向 AI 容器场景的开源项目其本地 GPU 虚拟化能力可将 1 张算力卡切分为最多 20 个虚拟 GPUvGPU实现多容器共享同一张卡。本文将拆解支撑该能力的 3 大核心组件CUDA 劫持、GPU 设备插件与Volcano 调度扩展帮你快速理解 GPU 算力切分、显存隔离与 Binpack 资源调度的完整链路适合刚接触 K8s GPU 共享与 XPU 虚拟化的新手阅读。Flex:ai 本地虚拟化一张 GPU 卡如何变出 20 个 vGPU传统 K8s 集群中一张 GPU 卡只能被一个 Pod 独占大量推理小任务排队等待整卡资源利用率极低。Flex:ai 的本地 XPU 虚拟化解决的正是这个问题能力说明 算力切分单卡切分为 1~20 个 vGPU每个 vGPU 可设定算力百分比5% 的倍数 显存隔离按 Gi 为单位限制每个 vGPU 可用显存vgpu-memory.1Gi⚡ 资源级调度对虚拟卡做 Binpack 等调度策略提升装箱率⏱️ 分时调度面向 AI 训推任务的时间维度调度整套能力由 3 个组件协作完成CUDA 劫持client-update让容器内的 CUDA 调用受到算力/显存限制GPU 设备插件gpu-device-plugin把 vGPU 作为 K8s 资源注册给 kubeletVolcano 调度扩展vc-scheduler huawei-xpu.so 插件决定哪个 vGPU 任务调度到哪张卡。三者关系可以概括为设备插件卖资源、调度器分资源、CUDA 劫持限资源。组件一CUDA 劫持——让容器看不见整卡工作原理备份、替换、监控三连CUDA 劫持是 Flex:ai 本地虚拟化的执行层。它通过 DaemonSet 以节点级方式部署 cuda-client-update.sh对系统中的 CUDA 驱动库做三件事详见 cuda-client-update.sh#L44-L64备份将原始libcuda.so备份到/opt/xpu/lib/libcuda-original.so替换用包装库 libcuda_direct.so 顶替系统 CUDA 库容器内所有 CUDA API 调用都被劫持到该库监控主循环每 5 秒通过 SHA256 比对校验文件自动修复被覆盖的文件并维护 gpu-monitor 监控工具见 cuda-client-update.sh#L93-L115。算力限流PID 控制器动态调节被劫持后vGPU 的算力上限由 GpuCoreLimiter 实现它内置一个 PID 控制器以约 167ms 为周期观测当前容器的 GPU 实际占用动态计算注入的延迟量把利用率钉在申请的vgpu-cores百分比上下波动。显存侧则由 memory_limiter.h 完成限制。CUDA 层面的钩子实现位于 cuda_hooks.cpp。 简单说你申请 20% 算力 3Gi 显存劫持层就保证该容器最多只能用这么多其他容器的性能不受影响。组件二GPU 设备插件——把 vGPU 注册为 K8s 资源vGPU 资源模型3 个关键字段设备插件 gpu-device-plugin 通过 K8s Device Plugin 接口xpu.sock向 kubelet 注册三类虚拟资源定义见 gpu.go#L28-L33资源名含义取值huawei.com/vgpu-number申请的 vGPU 卡数1 起≤ 节点物理卡数huawei.com/vgpu-cores算力切分百分比0~1005 的倍数huawei.com/vgpu-memory.1Gi显存占用单位 Gi高可用的注册机制插件主循环 main.go#L34-L63 值得新手学习它通过 inotify 监听 kubelet 的kubelet.sockkubelet 重启后自动重连同时启动设备缓存DeviceCache与一个 gRPC PIDs 服务service_impl.go供容器内的xpu-client-tool查询该进程绑定的 vGPU 配置——这正是劫持层拿到我的算力/显存限额的来源。 部署侧通过 Helm Chart 一键拉起gpupool/values.yaml 中同时定义了gpuDevicePlugin、gpuClientUpdate、xpuExporter三个组件对应模板见 gpu-device-plugin-daemonset.yaml 与 gpu-client-update-daemonset.yaml。组件三Volcano 调度扩展——虚拟卡的 Binpack 智能调度设备插件解决了资源从哪来而任务调度到哪张卡由 Volcano 完成。Flex:ai 在标准 Volcanocontroller scheduler webhook 三件套基础上做了 XPU 扩展编译产物为 huawei-xpu.so、vc-scheduler、vc-controller-manager 与 vc-webhook-manager一键部署清单位于 volcano-development.yaml其中调度器镜像配置见 volcano-development.yaml#L4198。它的两个核心角色Binpack 资源级调度huawei-xpu.so作为 Volcano 调度插件让 vGPU 任务尽量装进同一张物理卡减少碎片最大化剩余卡的可用度Webhook 准入改造vc-webhook-manager自动把 Pod 的调度器改写为 Volcano并注入 PodGroup 等元数据业务方无需关心调度细节。3 大组件协同一次 vGPU 申请的全链路当一个 Pod 申请 vGPU 资源时三个组件按以下顺序接力申请Pod YAML 中声明huawei.com/vgpu-*资源见下文示例准入Volcano webhook 拦截请求改写 schedulerName 并补全调度元数据调度vc-scheduler加载huawei-xpu.so插件按 Binpack 策略为 vGPU 挑选物理卡与节点分配GPU 设备插件从该卡的可用 vGPU 中分配额度容器内xpu-client-tool经 gRPC 拿到核心/显存限额限流CUDA 劫持层libcuda_direct.so依据 PID 控制器持续限算力、按配额限显存gpu-monitor可实时查看利用率是否贴合设定值。resources: requests: huawei.com/vgpu-number: 1 huawei.com/vgpu-cores: 20 huawei.com/vgpu-memory.1Gi: 3 limits: huawei.com/vgpu-number: 1 huawei.com/vgpu-cores: 20 huawei.com/vgpu-memory.1Gi: 3⚠️ 规格限制一张 GPU 卡最多切 1~20 个 vGPU单容器申请的 vGPU 数不超过节点物理卡数。快速上手Flex:ai 本地虚拟化部署关键步骤完整教程见 GPU-Virtual-Service/README.md新手只需记住 4 步环境准备openEuler 22.03cgroup v1 K8s 1.31.1 NVIDIA 驱动与 container-toolkit并配置容器运行时拉起调度组件导入vc-controller/vc-scheduler/vc-webhook-manager镜像后执行kubectl apply -f volcano-development.yaml拉起虚拟化组件打包 gpupool Helm Charthelm package gpupool给节点打gpupool.com/gpu-readytrue标签后helm install验证效果部署 vLLM 推理服务后用watch nvidia-smi观察整卡占用或在容器内执行gpu-monitor -p 1确认利用率在vgpu-cores设定值附近波动。延伸Flex:ai 的完整版图——不止本地虚拟化本地虚拟化之外Flex:ai 还包含跨节点拉远虚拟化基于 RDMA/TCP 通过网络访问远端节点的算力卡。gpu-remoting 子项目通过LD_PRELOAD注入 CUDA hook 库将容器内的 CUDA 调用透明转发到远端服务器执行并配套共享内存存储模块加速数据管道。Flex:ai 拉远虚拟化存储模块代码结构图其共享内存设计通过Shared_Memory在渲染端renderer与计算端compute之间传递 batch 数据与模型参数避免重复拷贝总结3 个组件各管一段组件解决的问题关键文件CUDA 劫持容器内算力/显存限流cuda-client-update.shGPU 设备插件vGPU 资源注册与分配cmd/main.goVolcano 扩展vGPU 的 Binpack 调度与准入volcano-development.yaml对于新手而言理解 Flex:ai 本地虚拟化的最佳路径是先跑通 Helm 部署 → 再读设备插件的资源注册逻辑 → 最后看劫持层的 PID 限流实现。三者各司其职共同把一张卡独占变成了一张卡 20 用让 AI 推理集群的 GPU 利用率真正提了上去。【免费下载链接】flexaiFlex:ai是一个面向AI容器场景的开源项目其核心能力包含两大部分分别是XPU虚拟化和多级智能调度。其中XPU虚拟化分为本地XPU虚拟化和跨节点拉远虚拟化本地XPU虚拟化支持将1台服务器上的XPU算力卡虚拟化分割出多个虚拟算力单元实现单张算力卡在多个容器的共享。跨节点拉远虚拟化支持通过RDMA或TCP网络访问远端节点上的算力卡。多级智能调度支持对切分出的虚拟卡进行Binpack等资源级调度以及对AI训推任务进行分时调度等能力。项目地址: https://gitcode.com/ModelEngine/flexai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Sinon 自定义匹配器(Custom Matchers)实战指南:用 sinon.match 工厂定制你的参数匹配逻辑
Sinon 自定义匹配器(Custom Matchers)实战指南:用 sinon.match 工厂定制你的参数匹配逻辑

测试开发工具 【免费下载链接】sinon Test spies, stubs and mocks for JavaScript. 项目地址: https://gitcode.com/gh_mirrors/si/sinon 点击查看 免费下载 导读:当内置匹配器无法精确表达测试预期时,sinon.match 工厂允许你把任意「值 →… · 2026/9/25 3:05:06

HowToGraphQL React 教程实战:用 Relay Modern 与 GraphQL Subscriptions 实现实时投票数更新
HowToGraphQL React 教程实战:用 Relay Modern 与 GraphQL Subscriptions 实现实时投票数更新

【免费下载链接】howtographql The Fullstack Tutorial for GraphQL 项目地址: https://gitcode.com/gh_mirrors/ho/howtographql 点击查看 免费下载 本文基于 HowToGraphQL(The Fullstack Tutorial for GraphQL)仓库中 React Relay 前端教… · 2026/9/25 3:05:00

XGo 的 for 语句完全指南:从 for..in 迭代语法到 XGo_Enum 自定义迭代协议
XGo 的 for 语句完全指南:从 for..in 迭代语法到 XGo_Enum 自定义迭代协议

编程语言编译器开发工具 【免费下载链接】xgo XGo is a programming language that reads like plain English. But its also incredibly powerful — it lets you leverage assets from C/C, Go, Python, and JavaScript/TypeScript, creating a unified software engineering… · 2026/9/25 3:05:00

提示词实测:剩菜太多不知道吃什么,让 AI 直接决定今晚菜单
提示词实测:剩菜太多不知道吃什么,让 AI 直接决定今晚菜单

冰箱里剩下一堆食材、又不想专门买菜时,晚上吃什么最头疼。我实测了一组提示词,把人数、食材、口味和时间限制一次性告诉 AI,让它直接决定菜单,而不是列一堆菜让我自己选。提示词的关键要求 提示词要求 AI 优先使用现有食材、根据… · 2026/9/25 22:05:10

Python接口自动化测试之UnitTest详解
Python接口自动化测试之UnitTest详解

基本概念这个单元测试框架是受到了JUnit这种测试工具的启发。它和其他编程语言里面那些主流的单元测试框架长得很像。在风格上, 这些框架都彼此相似。这个框架支持做自动化测试工作。它还能够帮助配置共享的东西。它也支持测试关机时的代码逻辑。另外, 它能够把很多测试样板聚集… · 2026/9/25 22:05:03

ArcMap拓扑实战:从空间数据质量管控到业务规则落地
ArcMap拓扑实战:从空间数据质量管控到业务规则落地

1. 这不是“画图软件里的花架子”:ArcMap拓扑到底在解决什么真问题?很多人第一次点开ArcMap的“拓扑”菜单时,心里想的是:“不就是让线头对齐、面不重叠吗?我手动修修不就行了?”——这话放在十年前做乡镇土… · 2026/9/25 22:04:50

如何快速调优 MindSpeed LLM FSDP2 后端:Profiling 定位性能瓶颈实战指南
如何快速调优 MindSpeed LLM FSDP2 后端:Profiling 定位性能瓶颈实战指南

如何快速调优 MindSpeed LLM FSDP2 后端:Profiling 定位性能瓶颈实战指南 【免费下载链接】MindSpeed-LLM 昇腾LLM分布式训练框架 项目地址: https://gitcode.com/Ascend/MindSpeed-LLM 在昇腾 NPU 上使用 MindSpeed LLM 的 FSDP2 后端做分布式训练时&#x… · 2026/9/25 22:04:50

Agent技能系统设计实战:从函数调用到可复用能力单元
Agent技能系统设计实战:从函数调用到可复用能力单元

前几天和一个做AI应用的朋友聊天,他吐槽说现在接大模型接口写Agent,最头疼的不是模型能力不够,而是把“让模型干活”这件事做得可靠。他团队里十几个Agent,每个都挂了一堆函数,有的叫get_weather,有的叫fet… · 2026/9/25 22:04:50

社区医疗系统源码部署与二次开发全攻略:跑通门诊、药房、收费闭环
社区医疗系统源码部署与二次开发全攻略:跑通门诊、药房、收费闭环

简介:这是一份面向Java开发学习者的社区医疗系统完整项目源码,适用于计算机、数学、电子信息等专业的学生作为课程设计、期末大作业或毕业设计的参考实现。项目基于常见JavaWeb技术栈,包含业务逻辑、页面展示与数据库脚本,可帮助使… · 2026/9/25 22:04:37

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码