背景
一直没有系统的总结过AI进来之后K8S的运维文档之类的,今天突然和朋友聊起来,感觉K8S运维加上AI之后确实比之前要做的细活要多了很多(下回和领导汇报要重点提一下 哈哈);
另外,也是借此机会总结一下把,面向小白也有一些基础部分的概念解释~欢迎交流
现在虽然都是混合云也有会一家主力云厂商,我们是腾讯云所以本文会涉及腾讯云的一些东西,可以先看一下 另一篇博客 Kubernetes存储与GPU管理:从开源到主流云厂商的最佳实践
K8S存储和GPU管理 开源和云厂商概述
一、核心名词解释(大白话版)
| 术语 | 大白话解释 |
|---|---|
| Kubernetes (K8s) | 一个容器编排平台,就像酒店的大堂经理,负责安排各种"容器客人"住到合适的"服务器房间"里。 |
| Pod | K8s里最小的部署单元,可以理解为一个"容器客人",可能是一个人住(单容器),也可能是一家人合住(多容器)。 |
| PVC / PV | PVC是客人提出的住宿需求(比如要一间带浴缸的房间),PV是酒店实际准备好的房间。K8s负责把需求和房间匹配上。 |
| StorageClass | 酒店的房间类型手册,上面写着"豪华套房""标准间"分别对应什么配置(如高性能SSD、普通HDD)。 |
| Device Plugin | K8s定的一个"硬件接入标准",就像电源插头标准,厂商按这个标准做插头,K8s就能用上硬件。 |
| NVIDIA Device Plugin | 英伟达做的"GPU插头",插到K8s上,K8s就能发现和使用NVIDIA显卡。 |
| Taint(污点) | 节点上的"门禁规则",比如"没VIP卡不许进"。 |
| Toleration(容忍度) | Pod持有的"VIP卡",有了它就能进有门禁的节点。 |
| Spread 策略 | 调度器尽量把Pod分散到不同GPU卡上,像酒店经理把客人分散安排,避免一个房间出问题影响所有人。 |
| Binpack 策略 | 调度器尽量把Pod堆到同一张GPU卡上,像民宿老板把所有客人塞一个房间,省电省成本。 |
| qGPU | 腾讯云做的GPU共享技术,能把一张物理卡切成多个虚拟卡,每个虚拟卡可以分不同量的显存和算力。 |
| MIG | NVIDIA高端卡(A100/H100)自带的硬件切分功能,切出来的实例互相物理隔离。 |
| Kubeflow | K8s上的一个机器学习平台,相当于一个"AI应用商店+工具箱",里面装了各种AI工具。 |
| PyTorch Operator | Kubeflow里的一个组件,专门自动管理PyTorch分布式训练任务的"管家"。 |
| PyTorchJob | 用户用YAML定义的一个PyTorch训练任务,比如"我要跑一个4worker的分布式训练"。 |
| DCGM | NVIDIA官方的GPU监控工具,像汽车仪表盘,能看显卡的温度、利用率、显存使用等。 |
二、存储管理:数据分层,按需投喂
AI训练离不开数据,但数据有冷热之分,不能一视同仁。核心思路是根据数据访问频率和性能要求,选择不同的存储后端。
1. 热数据(训练集)------要快,要共享
- 场景:几百个GPU同时读同一份图片数据集。
- 方案对比:
| 方案 | 类型 | 优点 | 缺点 | 适用 |
|---|---|---|---|---|
| CFS Turbo(腾讯云) | 并行文件存储 | 托管服务、高吞吐、线性扩展 | 成本较高 | 公有云、追求性能、不想运维 |
| CephFS(开源) | 分布式文件系统 | 开源、可控、硬件成本低 | 自建复杂、需专业团队 | 私有云、有存储专家、数据主权要求 |
| GPUDirect Storage | 存储加速方案 | 直接GPU内存访问,极致性能 | 需要配套硬件 | 超大规模训练、HPC |
- 大白话:CFS Turbo就像一条超级高速公路,多辆车(GPU)可以并排跑,互不堵车。CephFS是自己修的公路,路况取决于你的施工队(运维水平)。
2. 温数据(模型 checkpoint)------要快,但不用共享
- 场景:每个训练任务定期保存模型参数,自己读自己的。
- 方案对比:
| 方案 | 类型 | 优点 | 缺点 | 适用 |
|---|---|---|---|---|
| CBS云盘(腾讯云) | 块存储 | 低延迟、支持快照 | 单节点读写 | 数据库、单Pod训练 |
| Local SSD(本地盘) | 本地存储 | 极低延迟、高IOPS | 数据不持久、节点绑定 | 临时缓存、高性能中间数据 |
- 大白话:CBS就像你家的专属停车位,只有你的车能停,存取快。Local SSD是把车停在自己家里,更快但家里空间有限(节点本地)。
3. 冷数据(备份/归档)------要便宜,慢点没事
- 场景:训练完的数据包、历史模型,几个月可能才用一次。
- 方案对比:
| 方案 | 类型 | 优点 | 缺点 | 适用 |
|---|---|---|---|---|
| COS(腾讯云) | 对象存储 | 极低成本、无限容量 | 延迟高 | 备份、归档、静态网站 |
| MinIO(开源) | 对象存储 | 开源、S3兼容 | 需自建 | 私有云、数据本地化 |
- 大白话:COS像是一个巨大的云仓库,便宜但取货慢。适合放不常用的旧货。
存储选型口诀 :热数据共享要高速,温数据独享图低延迟,冷数据归档求便宜。
三、GPU管理:让每一块显卡都物尽其用
GPU是AI的发动机,管理的关键是既要防止浪费,又要保证核心任务稳定。
1. 第一道防线:防止CPU任务抢GPU
- 操作 :给GPU节点打污点
nvidia.com/gpu=present:NoSchedule。 - 为什么不用 nodeSelector?
nodeSelector 只能让 GPU Pod 去 GPU 节点,但拦不住 CPU Pod 也去 GPU 节点(如果 CPU Pod 没写 nodeSelector)。污点+容忍度是双向管控------节点设卡,Pod凭证入场,才能真正隔离。
2. 第二道防线:决定Pod怎么摆放
K8s调度器有两种摆放策略,需要通过 GPU 共享技术(如 qGPU)来实现细粒度调度。
| 策略 | 行为 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| Spread(分散) | Pod尽量放在不同物理卡上 | 一张卡坏了只影响少量Pod,性能干扰小 | 容易产生碎片,利用率低 | 在线推理、核心服务(求稳) |
| Binpack(堆叠) | Pod尽量塞在同一张卡上 | 省卡!利用率高,能腾出整卡 | 一张卡坏了影响大,资源争抢 | 离线训练、批量任务(省钱) |
- 大白话 :保命用 Spread,省钱用 Binpack。生产环境常用混合调度:高优任务 Spread,低优任务 Binpack。
3. 进阶玩法:GPU共享
| 技术 | 原理 | 隔离级别 | 支持卡型 | 灵活性 | 适用 |
|---|---|---|---|---|---|
| qGPU(腾讯云) | 软件虚拟化,拦截CUDA调用 | 显存+算力隔离 | 所有NVIDIA卡 | 任意比例切分 | 内部共享、提高利用率 |
| MIG(NVIDIA) | 硬件级物理切分 | 硬件隔离 | A100/H100等 | 固定模板 | 多租户强隔离、安全合规 |
- 大白话:qGPU 像切蛋糕,想切多大切多大;MIG 像用模具做饼干,大小固定。
四、平台层:Kubeflow / PyTorch Operator 到底是什么?
1. 先搞懂"Operator"
- Operator = K8s上的自动化管家。
- 大白话:就像你雇了个保姆,告诉她"我每天要吃三顿饭",她就自动买菜、做饭、洗碗。你不用管具体步骤。
2. Kubeflow 是什么?
- 官方定义:Kubernetes上的机器学习平台。
- 大白话 :Kubeflow 就像手机上的应用商店,里面装满了各种AI应用(Jupyter Notebook、训练任务、模型服务等)。你打开商店点一下"安装",它就用K8s给你部署好。
3. PyTorch Operator 是什么?
- 是什么:Kubeflow里的一个组件,专门管理PyTorch分布式训练。
- 大白话 :PyTorch分布式训练需要同时跑多个Worker和Master,手动配置很麻烦。PyTorch Operator 就是那个自动帮你拉起集群、分配角色、监控状态的小助手。
- 怎么用 :你写一个 YAML 叫
PyTorchJob,里面指定replicas: 8,它就给你搞8个Worker。
yaml
apiVersion: "kubeflow.org/v1"
kind: PyTorchJob
metadata:
name: pytorch-simple
spec:
pytorchReplicaSpecs:
Master:
replicas: 1
template:
spec:
containers:
- name: pytorch
image: pytorch/pytorch:latest
args: ["--distributed"]
Worker:
replicas: 4
template:
spec:
containers:
- name: pytorch
image: pytorch/pytorch:latest
args: ["--distributed"]
4. 为啥需要 Kubeflow?
- 没有平台:算法工程师要写一堆YAML(PVC、容忍度、环境变量、分布式配置),还要懂K8s细节。
- 有平台:算法工程师只需说"我要用8卡训练BERT",平台自动生成所有配置,底层细节全封装。
关系总结:
K8s = 操作系统
Operator = 系统里的自动化程序
Kubeflow = 一套专门为AI设计的"办公软件套装"
PyTorch Operator = 套装里的"Word自动排版工具"
PyTorchJob = 你用排版工具写的一个"文档"
五、日常运维闭环:监控→分析→调整
1. 监控:装个"仪表盘"
- DCGM(NVIDIA官方工具):采集GPU利用率、显存、温度、功率。
- 大白话:就像汽车仪表盘,告诉你发动机转速、水温、油量。
- 怎么用:把DCGM的数据喂给Prometheus,再用Grafana画成图。
2. 弹性伸缩:自动加人/减人
- HPA (Horizontal Pod Autoscaler):根据GPU利用率自动增减Pod数量。
- 大白话:就像餐厅根据排队人数,自动增加或减少服务员。
- CA (Cluster Autoscaler):当Pod因资源不足Pending时,自动申请新节点加入集群。
- 大白话:餐厅人太多,座位不够了,自动在旁边租个新铺面。
3. 动态调整
- 如果发现某个GPU节点长期利用率低于20%,说明策略太保守。可以:
- 把低优任务调度策略从Spread改为Binpack。
- 引入离线任务(如数据预处理)填空。
- 如果发现推理服务延迟抖动,检查是否有低优任务意外和它堆叠在同一张卡上,调整Spread策略强制隔离。
六、总结:AI运维的核心思路
底层K8s管资源 :用污点隔离、用PVC持久化、用调度器摆Pod。
中间层做策略 :在线服务用Spread保稳,离线任务用Binpack省钱,GPU共享填碎片。
上层平台封装 :Kubeflow/TF-Operator把复杂性藏起来,让算法同学只关心模型。
闭环监控调整:看指标、调策略、再观察,动态优化。
最终目标:让AI团队像用水用电一样用GPU,不用关心背后的调度逻辑,同时老板看着账单笑------因为每一块显卡都榨干了价值。