GPU容器与AI训练平台探索与实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. GPU容器与AI训练平台探索与实践
陈瀚 vivo互联网容器架构师
刘东阳 vivo AI工程架构师
2. 目录
Part 01 第一部分|vivo GPU平台架构
Part 02 第二部分|GPU容器能力实践
Part 03 第三部分|AI工程训练平台实践
Part 04 第四部分|vivo GPU未来展望
CONTENTS
3. 1. vivo GPU平台架构
智能计算业务
语言大模型
蓝心小v、游戏助手、本地搜索… 语音大模型
实时翻译、方言随心说… 视觉大模型
AI绘画、人像消除、相册回忆…
商业化广告算法 内容推荐算法 游戏推荐算法
训练平台
模型开发、模型训练 推理平台
推理服务部署、管理
AI业务队列 影像业务队列
OS业务队列 互联网业务队列
资源管理
统一调度、部署、管理 编排调度
GPU弹性伸缩、训推潮汐部署、卡调度策略
GPU虚拟化
MIG虚拟化、内核层虚拟化、CUDA层虚拟化 多容器网络
Calico、Hybridnet、Sriov(RDMA)
AI工程层
容器平台层
物理层
(基础设施)
GPU服务器
英伟达、异构卡 …
分布式存储
轩辕存储、HDFS…
高性能网络
RoCEv2、IB …
4. 第二部分|GPU容器能力实践
2.1 大规模容器集群稳定性
2.2 GPU容器提效降本实践
5. 2.1 大规模GPU容器集群稳定性背景
大规模集群运维工作繁重
日常运维工作量大
发现问题不及时
高频任务调度影响组件
高频调度组件负载激增
极易发生集群雪崩
故障处理面临严峻挑战
稳定性建设
故障处理难度大
故障复杂场景多
6. 2.1 大规模GPU容器集群稳定性建设
架构
性能优化
集群
自动化运维
故障处理
与恢复预演
Apisever优化 etcd优化 CoreDNS优化
在线\离线分离
Event限流
负载与连接数均衡
横向扩容 单独ssd磁盘
存储时长调整
List穿透请求优化
Event集群拆分
离线元数据存储优化 LocalDNS Cache
组件HPA自动扩容
优化ndots配置
启用DNSTAP插件
自动化节点管理 监控告警 自动化巡检
自动故障发现
自动屏蔽故障节点
自动健康检测与开放调度
宕机通知与重建pod通知 域名解析监控
异常pod\node监控
存储挂载监控
网络连通性监控
平台组件监控 集群健康诊断
异常pod巡检
节点健康巡检
周期自定义脚本巡检
etcd故障预案 Master故障预案 网络与镜像仓库预案
事件集群故障切换
元数据备份与恢复
节点异常无感切换 Master节点扩容场景
Controller节点异常替换
Scheduler节点异常替换
Apiserver节点异常替换 RR节点异常
上游交换机异常
Harbor单节点故障
Harbor单机房故障
7. 2.1 大规模GPU容器集群稳定性建设成果
etcd提交延迟
秒级缩短到
毫秒级
Apiserver CPU
负载下降
年度故障
复盘数下降
60
70
CoreDNS无毛刺
且负载下降
集群可用性
99.99
稳定性建设
效果
90
8. 第二部分|GPU容器能力实践
2.1 大规模容器集群稳定性
2.2 GPU容器提效降本实践
9. 2.2 GPU容器提效降本方案总览
GPU容器降本提效解决方案
单卡维度 单服务维度 多服务维度 多机多卡维度
自研GPU虚拟化方案 GPU弹性扩缩容方案 训推潮汐部署方案 容器RDMA高性能网络方案
10. 2.2.1 单卡共享-GPU虚拟化背景
低利用率
业务浪费资源 开发机显存
超售需求
部分推理业务负载低 业务对安全性和隔离性要求不同
共享部署降低成本
适配共享部署
业务的多种需求
Dev开发机用户使用频率低
显存超售提高资源复用率
11. 2.2.1 vivo 自研GPU虚拟化架构
统一调度
接入Kubernetes
自研组件
vgpu-device
-plugin
vgpu-scheduler
vgpu-exporter
GPU虚拟化
多容器共享GPU方案
vgpu-docker
1. 自研组件
多种卡调度策略
Binpack \ Spread \ CardOnlyOne \ CustomTopo
GPU虚拟化
能力矩阵
MIG
虚拟化
内核层
虚拟化
• vgpu-device-plugin:注册vgpu资源、分配设备、标识信息
• vgpu-scheduler:调度拓展插件,支持多种卡调度策略
• vgpu-exporter:vgpu监控组件
• vgpu-docker:处理vgpu设备挂载和清理逻辑
CUDA层
虚拟化
2. 多种卡调度策略
物理层
(基础设施)
GPU服务器
英伟达
高性能网络
RoCEv2、IB …
分布式存储
轩辕存储、HDFS…
• Binpack:尽量聚集
• Spread:尽量分散
• CardOnlyOne:每个卡只有一个实例
• CustomTopo:自定义节点与卡分配拓扑
12. 2.2.1 vivo GPU虚拟化方案
MIG虚拟化
内核层虚拟化
CUDA层虚拟化
CUDA进程
CUDA进程
CUDA进程
IOCTL
/dev/nvidia
挂载
单卡
划分
/dev/nvidiactl
/dev/nvidiactl
/dev/nvidia
CUDA API
Lib库
替换
计算
单元 计算
单元 计算
单元 计算
单元
显存
单元 显存
单元 显存
单元 显存
单元
/dev/vgpu_ctl
/dev/vgpu_nv
虚拟
设备
内核
模块
算力限制
技术
显存限制
libcuda.so
NVIDIA Driver
硬件提供的切块组合能力
算力限制
API函数映射关联
显存限制
调用
NVIDIA Driver
NVML API
libnvidia-ml.so
NVIDIA Driver
替换字符设备,内核态拦截IOCTL请求
拦截库替换API库,建立函数映射关系
优点 NVIDIA官方解决方案 硬件层安全性高 隔离性强 无需替换CUDA库上层应用无感 内核态安全性高 有开源方案 使用灵活 可实现显存超售
缺点 仅支持Ampere及以后架构的卡 仅支持特定比例切分 无开源方案,自研难度高 算力隔离不充分 用户态安全性低 算力隔离弱
应用
算力隔离强需求的线上业务
常规线上业务
Dev开发机业务
拦
截
库
13. 2.2.1 GPU虚拟化性能与效果
自测对比业界方案性能数据
自研vGPU
头部厂商1
头部厂商2
GPU虚拟化效果
开源vCUDA
7000
6312.55
6408.39
6266.91
6067
6000
5000
4647.32 4662.89 4597.74
4532
平均单卡虚拟化率 开发机显存超售率
300% 400%
整机GPU利用率提升 业务成本优化
30% 50%
4000
3114.78 3116.23
3000
3073
2872.36
2000
1000
0
bs=32
实验参数
bs=64
bs=128
模型:tf_cnn_benchmarks、数据集:cifar10、model:resnet20 、资源规格:0.5卡 NVIDIA卡
14. 2.2.2 服务提效-GPU弹性扩缩容背景
快速应对突发流量
减少了人工干预频率
简化GPU推理
业务运维管理
GPU弹性
扩缩容背景
原生K8s不支持
GPU弹性扩缩
原生
功能缺失
非生产实例无负载
资源闲置造成浪费
非生产环境
GPU资源浪费
15. 2.2.2 GPU弹性扩缩容方案
KEDA
技术方案:
调整HPA
Horizontal
pod autoscaler
Metrics adapter
Controller
实例扩缩
Scaler
事件触发
1->n or n->1
0->1 or 1->0
GPU自动弹性扩缩容 = KEDA框架 + 自研的GPU-
Scaler插件 + Prometheus + DCGM-
Exporter(GPU利用率指标)
非生产环境默认开启:
闲置实例自动缩容到0
GPU-Scaler
指标转换事件
Workload
指标查询
监控指标
采集存储
DCGM-Exporter
Prometheus
80% 1小时/周
资源不足告警 单业务扩缩工作量
16. 2.2.3 多服务降本-训推潮汐部署背景
服务运行稳
定保障 在线推理
服务延时敏感 训练任务
需要稳态运行
利用率
痛点优化 推理业务
潮汐特征明显 整机GPU
平均利用率偏低
训练GPU
资源紧缺 多机多卡
训练整机需求增长 训练资源
缺口问题明显
17. 2.2.3 训推潮汐部署方案
推理和训练
整机分时复用
在离线任务切换
(7:30-8:00)
整机腾空能力 =
CronHPA(定时) + WorkloadSpread(分区部署) + Pod优先级缩容
在线推理稳定运行
(8:00-23:30)
CronHPA
定时扩缩
缩容场景
Workload
Cost-manager
自研
配置稳定pod数:FixedCount
workloadSpread
根据Pod与
Node拓扑
Subset
稳定
离线训练运行
(0:00-7:30)
Subset
潮汐
所在节点实例数少的
Pod优先缩容
推理整机腾空
(23:30-24:00)
资源池(稳定) 资源池(潮汐)
Node-1 Node-1
整机GPU利用率提升 推理业务成本降低 Node-2 Node-2
20+% 30% Node-N Node-N
期望Replica <= FixedCount在稳定池扩缩
期望Replica > FixedCount在潮汐池扩缩
刷新Pod
缩容优先级
18. 2.2.4 多机多卡提效-容器RDMA高性能网络背景
大规模分布式训练
和推理的需求 训练和推理
需要多机多卡 网络通讯
成为性能瓶颈
减少CPU开销
和降低网络延迟 RDMA跨节点
零拷贝数据传输 有效减少CPU开销
和网络延迟
GPU容器
结合RDMA网络
平台需要提供完整解决方案
19. 2.2.4 容器RDMA高性能网络方案
K8s node
app
RDMA网络管理组件
rdma api
rdma协议
RDMA容器相关组件:
pod1
buffer
Multus-CNI:
Multus-CNI
tcp协议
buffer sockets Calico-CNI
buffer Pod网络协议栈 Sriov-CNI
eth0
K8s node
pod1
Calico-cni:
app
eth1
Sriov-Device-Plugin
buffer host网络协议栈
支持单容器多种网络创建。
eth1
基于veth创建网卡eth0对应underlay网络。
eth0
vf
Kernel
基于vf创建网卡eth1对应rdma网络。
Spiderpool
eth0
eth1
Sriov-cni:
eth1
eth0
ROCE_V2\IB协议网络
TCP/IP流量
在大规模训练和推理场景,业务提速20%-30%
Spiderpool:
管理网络池以及ip分配、路由策略配置。
20. 第三部分|AI工程训练平台实践
3.1 训练平台整体架构
3.2 大规模训练稳定性实践
3.3 GPU利用率提升实践
21. 3.1 VTraining训练平台整体架构
VTraining训练平台是由vivo AI计算平台团队打造的一站式大模型训练方案,它面向算法工程师,
提供模型开发、模型训练和海量样本存储等能力。
产品 蓝心小V 输入法 全局搜索 相册
模型 多模态大模型 语音大模型 语言大模型 图像大模型
训练平台 模型开发
开发机、jupyter、… 模型训练
分布式训练、故障自愈 资产管理
镜像、数据、… 平台工具
环境检测、模型转换、…
容器 资源管理 编排调度 GPU虚拟化 自动化运维
算力
高性能计算
高性能RDMA网络
高性能训练存储
22. 第三部分|AI工程训练平台实践
3.1 训练平台整体架构
3.2 大规模训练稳定性实践
3.3 GPU利用率提升实践
23. 3.2.1 大规模训练稳定性实践-问题
大规模训练依赖复杂的训练集群环境,任何环节出问题都会导致
任务中断,问题定位、恢复困难
任务调度
训练过程
基础设施
常见问题
行业案例
同步训练,反复迭代
加载模型
加载训练样本
GPU计算
训练通信
保存模型
计算 网络 存储 调度
ECC 启动报错 挂载异常 千卡调度慢
GPU掉卡 Hang、超时 读写异常 调度异常
慢节点 网卡掉卡 数据不一致 无拓扑感知
NaN 性能抖动 性能抖动
知名头部公司千亿参数大模型的大规模训练任务,平均每 3小时 触发一次意外中断。
24. 3.2.2 大规模训练稳定性实践-高频故障专项治理
GPU集群投入使用初期机器故障率高
可通过高频故障专项治理使故障尽快收敛
高频故障专项治理
大规模测试诊断
GPU集群
高频故障统计 高频故障修复
ECC 故障 硬件维修、替换
NaN 故障 固件/驱动升级
GPU、网卡掉卡 软件优化、bug修复
25. 3.2.3 大规模训练稳定性实践-故障处置流程完善
任务故障不可避免,通过完善故障处置流程缩短任务中断时间,尽快恢复任务运行
训练前 基础环境预检测 任务模拟测试 风险问题剔除
降低故障风险 HostPing主机检测
VCCL通信检测 GPU机器、网络等稳定性
环境、配置、流程验证 异常节点、慢节点等剔除
环境配置修正
训练中 故障发现 故障定位 故障容错
自动化容错 基础设施监控指标异常
任务状态、日志异常 异常特征匹配、节点定位
实时诊断(torch profile等) 自动隔离故障
自动重启任务
新问题搜集分析 异常特征库完善 问题诊断能力增强
训练后
诊断增强
26. 3.2.4 大规模训练稳定性实践-效果与总结
减少基础设施高频故障、完善任务故障处置流程,是保障千卡大规模训练稳定性的关键
效果
总结
机器每天
故障率大幅下降 千卡任务有效训练时长
达到行业一流水平
机器每天故障率 千卡任务有效训练时长
99.0%
2%
提高
• 不同环境、任务会触发不同的稳定性问题,GPU驱动、VBIOS固件、训练框架
版本等需要匹配/适配
大规模训练前,尽量剔除历史故障率高的机器
• 稳定的机器一般会一直很稳定,而历史故障率高的机器即使修复后,重复出现
故障的概率也比较大
39%
降低
GPU集群由不稳定到稳定,需要一个软硬件磨合过程
60%
0.19%
提升任务有效训练时长
需结合基础设施、训练框架、平台容错机制综合优化
0.1%
治理前
治理后
优化前
优化后
• 例如秒级监控告警能力、checkpoint持久化策略、秒级故障隔离、任务重调
度等方面的持续优化
27. 第三部分|AI工程训练平台实践
3.1 训练平台整体架构
3.2 大规模训练稳定性实践
3.3 GPU利用率提升实践
28. 3.3.1 GPU利用率提升-业务背景及问题
差异化的业务场景下GPU资源难以高效利用,利用率提升挑战巨大
GPU场景常见业务形态及特点
训练任务 推理业务 数据生产 开发调试
GPU利用率高 白天GPU利用率高 GPU利用率高 GPU利用率低
周期性占用资源 夜间GPU利用率低 资源需求大 长期占用资源
大部分不能中断 资源优先级高 可随时中断 性能要求低
偶尔出现
碎片化空闲资源 夜间GPU
利用率低 资源需求大
难申请 GPU利用率
长期低下
29. 3.3.2 利用率提升措施一:低优任务
训练任务场景偶现的碎片化空闲资源,可通过低优数据生产任务进行充分利用
在不影响正常训练任务调度的情况下,通过低优任务充分利用GPU资源
训练偶现碎片化空闲资源
低优数据生产任务调度
正常任务随时抢占低优资源
机器1 GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU
机器2 GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU
机器3 GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU
机器4 GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU
time1
time2
GPU
正常任务使用GPU卡
GPU
空闲GPU卡
time3
GPU
低优任务使用GPU卡
30. 3.3.3 利用率提升措施二:训推潮汐部署
推理业务在夜间流量低峰期可释放大量GPU资源,可通过训推潮汐部署给离线业务复用
通过训推潮汐部署,将夜间推理流量低峰期缩容机器腾挪到离线,白天再腾挪回在线
白天流量高峰期
(HPA扩容)
夜间流量低峰期
(HPA缩容)
白天流量高峰期
(HPA扩容)
夜间流量低峰期
(HPA缩容)
白天流量高峰期
(HPA扩容)
推
理
流
量
时间
离线GPU资源池
资
源
池
水
位
离线GPU资源池
离线GPU资源池
离线GPU资源池
离线GPU资源池
在线GPU资源池
在线GPU资源池
在线GPU资源池
在线GPU资源池
在线GPU资源池
*箭头代表GPU机器腾挪方向,推理业务通过HPA水平扩缩容实现GPU资源扩缩容
31. 3.3.4 利用率提升措施三:GPU虚拟化
开发任务长期独占GPU资源且利用率低
可通过GPU虚拟化技术实现资源超卖,减少资源占用量,释放冗余算力
不开VGPU 开启VGPU
单机4卡GPU机器 虚拟出16个VGPU
GPU1
VGPU
优点
支持1:2、1:4超卖
vGPU vGPU vGPU vGPU GPU2 vGPU vGPU vGPU vGPU 用内存补充显存不足
GPU3 vGPU vGPU vGPU vGPU 用户无感知使用
GPU4 vGPU vGPU vGPU vGPU 适用性能要求低场景
开启
VGPU
通过vivo自研VGPU虚拟化技术,减少开发任务占用的物理GPU卡数
32. 3.3.5 利用率提升总结与规划
平台通过低优任务、训推潮汐部署、GPU虚拟化等策略
深度适配差异化业务场景特性,实现资源高效复用,GPU利用率提升明显,接近行业一流水平
训练任务
数据生产
AI整体GPU
利用率提升
低效任务治理
低效资源盘活
效果
规划
成本/账单输出
均值
奖励与惩罚措施
5%
开发任务
推理服务
(绝对值)
对GPU利用率进行综合治理,让稀缺的GPU资源发挥更大价值
……
33. 目录
Part 01 第一部分|vivo GPU平台架构
Part 02 第二部分|GPU容器能力实践
Part 03 第三部分|AI工程训练平台实践
Part 04 第四部分|vivo GPU未来展望
CONTENTS
34. 4. vivo GPU未来展望
让业务更加稳定、资源利用更加高效
训练平台
秒级预警 动态容错 全流程提效 精细运营
联邦调度 GPU混部 异构芯片 GPU池化
容器平台
35. 谢谢!Q&A