ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Flex:ai是什么?一文看懂开源XPU虚拟化与AI训推智能调度的终极解析

Flex:ai是什么?一文看懂开源XPU虚拟化与AI训推智能调度的终极解析 Flex:ai是什么一文看懂开源XPU虚拟化与AI训推智能调度的终极解析【免费下载链接】flexaiFlex:ai是一个面向AI容器场景的开源项目其核心能力包含两大部分分别是XPU虚拟化和多级智能调度。其中XPU虚拟化分为本地XPU虚拟化和跨节点拉远虚拟化本地XPU虚拟化支持将1台服务器上的XPU算力卡虚拟化分割出多个虚拟算力单元实现单张算力卡在多个容器的共享。跨节点拉远虚拟化支持通过RDMA或TCP网络访问远端节点上的算力卡。多级智能调度支持对切分出的虚拟卡进行Binpack等资源级调度以及对AI训推任务进行分时调度等能力。项目地址: https://gitcode.com/ModelEngine/flexaiFlex:ai是一个面向AI容器场景的开源项目由上海交通大学、西安交通大学、厦门大学、华为等联合发起。它的两大核心能力是XPU虚拟化和多级智能调度前者能把一张物理算力卡GPU/NPU虚拟切分成多个虚拟算力单元让单张算力卡被多个容器共享后者能对切分出的虚拟卡做 Binpack 等资源级调度并对 AI 训推任务进行分时调度从而大幅提升 AI 集群的算力利用率。为什么需要Flex:aiAI集群的算力浪费难题 在实际生产环境中AI 业务集群通常是大小模型混部的场景一方面运行 DeepSeek、Qwen 系列等大模型往往独占整卡甚至多卡另一方面还有大量小参数量模型CV 模型、Embedding 模型等它们根本吃不满一张整卡。结果就是昂贵且稀缺的 GPU/NPU 资源大量闲置浪费。同时AI 工作负载千差万别如何在有限算力上高效调度大并发任务一直是业界的难题。Flex:ai 正是为此而生——项目文档中明确说明了这一动机可参见 README.md 的“动机”一节。 一句话总结让一张卡掰成多份用让多份算力被聪明地分。核心能力一XPU虚拟化本地切分 跨节点拉远XPU 是 GPU/NPU 等异构算力卡的统称。Flex:ai 的虚拟化分为两种模式1️⃣ 本地XPU虚拟化单卡多容器共享把 1 台服务器上的算力卡虚拟化分割出多个虚拟算力单元实现单张算力卡在多个容器的共享GPU 侧一张 GPU 可切分为 1~20 个 vGPU支持指定算力切分百分比5 的倍数与显存大小由 GPU-device-plugin 设备插件和 CUDA 劫持客户端完成资源管控详细说明见 GPU-Virtual-Service/README.md。NPU 侧在昇腾原生架构与 CANN 基础上深度定制支持将单张物理 NPU 虚拟化为多个不同规格的 vNPU 实例按 1:1、2:8 等比例动态切分实现硬件级资源隔离详见 Ascend-Virtual-Service/README.md。下图展示了跨节点拉远虚拟化中“租算端与算力端”的协同设计数据经共享内存解耦后再由 CUDA Wrapper 下发到远端 GPU 执行2️⃣ 跨节点拉远虚拟化GPU算力池化通过RDMA 或 TCP 网络访问远端节点上的算力卡让没有 GPU 的节点也能租到算力。该能力位于 gpu-remoting 模块通过LD_PRELOAD劫持 CUDA Runtime / Driver API以及 cuBLAS、cuDNN、NCCL 等库调用透明地把请求转发到远端执行内置调度器scheduler支持多种策略可通过 config.json 配置轮询、空闲显存、利用率等调度方法配套 Python 存储组件storage处理训练数据集的加载与共享内存传输。下面是拉远虚拟化存储模块的代码结构总览图客户端与服务端通过 ZeroMQ 通信数据集经预处理后写入共享内存核心能力二多级智能调度在虚拟化切分的基础上Flex:ai 提供两级调度能力把剩余算力压榨到极致 资源级调度Binpack 装箱调度对切分出的虚拟卡进行 Binpack 等资源级调度。GPU 场景基于 Volcano 调度器扩展调度组件vc-scheduler、vc-controller-manager、vc-webhook-manager可通过 volcano-development.yaml 一键部署到 K8s 集群。⏱ 任务级调度分时复用与优先级时间片轮转复用突破物理切分的数量限制多个 AI 任务在同一张物理卡上毫秒级时间片轮转低负载推理任务以排队抢占方式共享算力算力保障与优先级多级调度策略支持为核心业务设置高优先级关键任务优先获得算力响应降低长尾延迟。昇腾侧的调度行为由 flexnpud.conf 配置例如quota参数定义每轮调度循环允许下发算子的最大次数aicore_alloc定义每个进程在分时调度中的算力权重。快速上手体验算力切分效果 GPU虚拟化部署步骤前置安装 Helm、NVIDIA 驱动与 nvidia-container-toolkit导入调度组件镜像执行kubectl apply -f volcano-development.yaml拉起调度层打包并安装 helm chart拉起client-updateCUDA 劫持与gpu-device-plugin设备插件在业务 Pod 中申请虚拟卡资源三个参数即可参数说明huawei.com/vgpu-number申请的 vGPU 卡数huawei.com/vgpu-cores算力切分百分比0-1005的倍数huawei.com/vgpu-memory.1Gi显存占用Gi通过watch nvidia-smi或容器内gpu-monitor工具即可观察到 GPU 利用率在设定的切分百分比附近波动验证切分生效。Ascend NPU体验步骤基于华为官方vllm-ascend镜像启动容器进入 hypervisor 目录依次执行./clear.sh→./flexnpud→./register.sh启动守护进程并注册用户进程进入 aclserver 目录分别运行./server.sh与./server_2.sh启动两个推理进程通过vllm bench的吞吐结果即可观察到算力切分效果。项目结构一览 目录说明Ascend-Virtual-Service/昇腾 NPU 虚拟化hypervisor 守护进程、acl 服务端/客户端GPU-Virtual-Service/xpu-pool-service/本地 GPU 虚拟化设备插件、CUDA 劫持、xpu-exporter 监控GPU-Virtual-Service/gpu-remoting/跨节点拉远虚拟化API 劫持、调度器、存储组件GPU-Virtual-Service/yaml/Volcano 调度器部署清单总结Flex:ai 以XPU虚拟化 多级智能调度两大核心能力直击 AI 集群大小模型混部导致算力浪费的痛点本地切分让一张卡多容器共享跨节点拉远让算力像池子一样按需流动Binpack 与分时调度让每一份算力都被充分利用。无论你是 GPU 还是昇腾 NPU 用户都能在这个开源项目中找到贴合自身场景的算力共享方案。【免费下载链接】flexaiFlex:ai是一个面向AI容器场景的开源项目其核心能力包含两大部分分别是XPU虚拟化和多级智能调度。其中XPU虚拟化分为本地XPU虚拟化和跨节点拉远虚拟化本地XPU虚拟化支持将1台服务器上的XPU算力卡虚拟化分割出多个虚拟算力单元实现单张算力卡在多个容器的共享。跨节点拉远虚拟化支持通过RDMA或TCP网络访问远端节点上的算力卡。多级智能调度支持对切分出的虚拟卡进行Binpack等资源级调度以及对AI训推任务进行分时调度等能力。项目地址: https://gitcode.com/ModelEngine/flexai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进