AI 时代最值钱的技能之一:GPU 集群管理完整学习路径,看懂了你就是稀缺人才
AI 时代最值钱的技能之一:GPU 集群管理完整学习路径,看懂了你就是稀缺人才
现在整个 AI 行业,最缺什么样的人? 不是调包侠,不是写 prompt 的,不是做前端的,甚至不是写大模型算法的。
最缺的,是能管好一个有几千张 GPU 的大集群的人。
这种人有多值钱? 我可以告诉你:现在国内能管好 1000 张以上 GPU 集群的工程师,年薪百万起,上不封顶,而且各大公司抢着要。 甚至很多公司愿意出两倍三倍的工资,从别的公司挖。
但是这种人太少了。 少到什么程度?整个中国,可能也就几百个人真正有这个能力。
为什么这么少? 因为这个技能太综合了,太偏实战了,学校里不教,网上也几乎没有系统的学习资料。 你需要懂硬件,懂网络,懂操作系统,懂驱动,懂 Kubernetes,懂调度,懂存储,懂可观测性,懂故障处理。 每一个单拎出来都是一个完整的方向,而你需要全部都懂,而且还要能把它们串起来。
今天这篇文章,我就给你画一张完整的地图。 从入门到精通,你需要学什么,按什么顺序学,有哪些坑,有哪些资源。
看完这篇,你就知道这个方向的水有多深,以及你应该怎么入门。
先搞清楚:这个岗位到底是做什么的?
在讲学习路径之前,我们先搞清楚,GPU 集群管理员,每天到底在做什么。
很多人以为,不就是装装驱动,跑跑任务吗?有什么难的。
大错特错。
一个合格的 GPU 集群管理员,他的日常工作是:
- 集群建设:新采购了 500 张 GPU,怎么组网,怎么部署,怎么上线,怎么验证每一张卡都是好的。
- 作业调度:几百个用户同时提交训练任务,怎么分配资源,怎么排优先级,怎么避免抢资源,怎么保证重要的任务先跑。
- 性能优化:为什么别人的 8 卡训练能跑到 90% 的利用率,你的只能跑到 50%?瓶颈在哪里?是网络?是存储?还是驱动?怎么调?
- 故障处理:半夜三点告警,训练任务突然全部卡住了,或者失败了,怎么快速定位问题?是卡坏了?是网络断了?是存储挂了?还是调度器出问题了?怎么最快恢复?
- 利用率提升:现在整个集群的平均利用率只有 30%,怎么提升到 60%,甚至 70%?这相当于用同样的钱,多买了一倍的卡。
- 用户支持:用户说我的任务怎么跑不起来,怎么跑这么慢,怎么看不到日志,怎么数据读不出来?你得帮他排查。
简单说: 整个公司几个亿甚至几十个亿的 GPU 资产,能不能发挥出它应有的价值,90% 取决于这几个人。
一个好的集群管理员,能把集群利用率从 30% 提升到 60%,相当于给公司省了一半的硬件钱。 一个差的集群管理员,可能一半的卡都在空转,或者天天出故障,训练任务跑三天两头断,整个公司的算法工程师都在等资源。
这就是为什么这个岗位这么值钱。
知识体系第一层:硬件层,你得先知道你管的到底是什么东西
很多做集群管理的工程师,根本不懂硬件。 他们只会用 Kubernetes,GPU 在他们眼里就是一个抽象的资源单位,和 CPU 没有什么区别。
这是绝大多数人的第一个天花板。 你想真正管好 GPU 集群,你必须懂硬件。 你必须知道这些卡到底是怎么连起来的,瓶颈在哪里。
你需要掌握的硬件知识:
1. GPU 本身的知识
- NVIDIA 各个系列 GPU 的规格参数和区别:A100、A800、H100、H800、B100、GB200
- CUDA Core、Tensor Core、RT Core 分别是做什么的,什么计算用什么
- GPU 的显存带宽、显存大小、TDP 功耗对训练的影响
- 为什么同样是 H100,PCIe 版和 SXM 版性能差 30%
2. GPU 之间的互联
- NVLink 是什么,NVSwitch 是什么,它们的带宽是多少,延迟是多少
- 为什么 8 卡机的训练速度比 8 个单卡机快好几倍
- RDMA 是什么,RoCE 和 InfiniBand 的区别,什么场景用哪个
- 为什么大模型训练必须用 InfiniBand,用 RoCE 就是找死
3. 服务器内部的其他部件
- CPU 怎么选,核数够不够,会不会成为瓶颈
- 系统内存多大才够,为什么需要和显存有一定比例
- 本地存储用 SSD 还是 NVMe,速度要求是多少
- PCIe 版本的区别,PCIe 4.0 和 PCIe 5.0 的带宽是多少,会不会成为瓶颈
4. 网络架构
- 什么是 Fat-Tree 拓扑,什么是 CLOS 拓扑,大集群为什么要用这种拓扑
- 什么是 oversubscription ratio,1:1 和 2:1 和 4:1 对性能有什么影响
- 为什么 10G 网络跑不了分布式训练,为什么至少要 100G,最好 200G/400G
- 网卡怎么选,ConnectX-5、ConnectX-6、ConnectX-7 的区别
这一层的知识,是最基础的,也是最容易被忽略的。 很多集群的性能问题,根因就是硬件架构设计的时候就有问题,后面再怎么调软件都没用。
知识体系第二层:系统层,离硬件最近的地方
懂了硬件之后,接下来就是系统层的知识。 也就是怎么让操作系统和驱动,把硬件的性能全部发挥出来。
你需要掌握:
1. NVIDIA 驱动全家桶
- NVIDIA Driver 怎么装,怎么选版本,不同版本有什么坑
- CUDA Toolkit 是什么,cuDNN 是什么,NCCL 是什么,它们的版本对应关系
- 为什么驱动版本和 CUDA 版本不匹配的时候,会出现各种奇怪的问题
- NVIDIA Container Toolkit 是什么,怎么让 Docker 能识别 GPU
- MIG 是什么,怎么把一张 A100 切成 7 个小实例,有什么优缺点
2. 操作系统内核调优
- 为什么大家都用 Ubuntu,而不是 CentOS 或者别的发行版
- 哪些内核参数需要调,怎么调,为什么要调
- 网络栈的调优:TCP 缓冲区、连接数、backlog 等等
- 内存管理的调优:overcommit、swap、透明大页(THP)为什么一定要关掉
- CPU 亲和性(CPU Pinning)怎么设置,为什么对性能影响很大
3. 文件系统和存储
- 本地存储用什么文件系统最好,XFS 还是 EXT4?为什么?
- 分布式存储用什么?Lustre?BeeGFS?JuiceFS?MinIO?各有什么优缺点
- 为什么共享存储的读带宽不够的时候,整个集群的训练速度都会被拖死
- 存储的 IOPS、吞吐量、延迟,分别对什么类型的作业影响最大
4. 性能分析工具
nvidia-smi怎么看,那些字段都是什么意思dcgmi是什么,怎么用它做更深入的 GPU 健康检查和性能分析nccl-tests是什么,怎么用它来测机间通信带宽,发现网络瓶颈perf、bcc、bpftrace这些通用的性能分析工具,怎么用在 GPU 场景
这一层的水非常深。 同样的硬件,不同的人调出来,性能可能差 30%,甚至 50%。 这都是真金白银的差距。
知识体系第三层:集群编排层,怎么把几千张卡管起来
现在几乎所有的 GPU 集群,都是跑在 Kubernetes 上的。 所以你必须非常非常懂 Kubernetes,而且要懂 Kubernetes 里面和 GPU 相关的那些特殊部分。
你需要掌握:
1. Kubernetes 基础知识
- Kubernetes 的核心概念:Node、Pod、Deployment、StatefulSet、DaemonSet、ConfigMap、Secret
- Kubernetes 的调度原理,调度器是怎么工作的,怎么打分,怎么选择节点
- Kubernetes 的网络模型,CNI 插件是怎么回事
2. GPU 相关的 Kubernetes 插件
- NVIDIA GPU Operator 是什么,能帮你做什么,怎么部署,有什么坑
- GPU 资源是怎么暴露给 Kubernetes 的,
nvidia.com/gpu这个资源是怎么来的 - 为什么你不能在一个 Pod 里申请 0.5 张 GPU,为什么只能申请整数
3. 网络插件
- 为什么默认的 Calico、Flannel 对于 GPU 集群来说根本不够用
- 什么是 SR-IOV,什么是 Macvlan,什么是 Host Network,它们的性能差距有多大
- 怎么让 Pod 里面能直接用 RDMA 访问 InfiniBand 网卡
- Multi-NIC CNI 是什么,怎么让一个 Pod 同时用多个网卡
4. 存储插件
- 怎么把分布式存储挂载到 Pod 里面
- ReadWriteMany 和 ReadWriteOnce 的区别,为什么绝大多数场景你都需要 ReadWriteMany
- 怎么避免几百个 Pod 同时读同一个文件把存储打挂
5. Kubeflow 生态
- Kubeflow 是什么,里面的各个组件都是做什么的
- Kubeflow Training Operator 是什么,怎么用它提交 PyTorch、TensorFlow 的分布式训练任务
- MPI Operator 是什么,怎么提交多机多卡的训练任务
- KServe 是什么,怎么做模型服务
当然,Kubernetes 本身的水就非常深,你不需要成为 K8s 专家,但是你必须懂核心原理,知道出了问题怎么排查。
知识体系第四层:作业调度层,这才是 GPU 集群真正的核心
很多人以为,把 Kubernetes 搭起来,能跑 GPU 任务了,就完事了。
大错特错。 这才刚刚开始。
原生 Kubernetes 的调度器,对于 GPU 训练场景来说,根本就是垃圾。 如果直接用原生调度器,你的集群利用率能到 30% 就不错了,而且会有各种各样的问题。
所以你必须懂专门的 GPU 调度器。
你需要掌握:
1. 主流的 GPU 调度器
- Volcano:现在最主流的开源 AI 调度器,几乎是事实标准
- KubeBatch:Volcano 的前身,现在还有很多老集群在用
- YuniKorn:Apache 的调度器,设计理念很先进,但是用的人还不多
- 各个云厂商自己的调度器:阿里云、腾讯云、AWS 都有自己的实现
2. 调度器的核心能力
- 队列(Queue)和队列层级:怎么分部门队列,怎么设置资源配额
- 优先级和抢占:高优先级任务怎么把低优先级的任务挤走,挤走之后怎么办
- 公平调度:怎么保证每个部门都能拿到它应得的资源,不会被某一个部门占满
- Bin Packing:怎么把任务尽量塞到同一个节点上,提高利用率,减少资源碎片
- 拓扑感知调度:怎么把多卡任务尽量安排在同一个交换机下面,减少网络延迟
3. 高级调度能力
- 弹性训练:任务可以根据资源情况自动扩缩容,用多少资源申请多少
- 分时调度:白天给推理用,晚上给训练用,提高利用率
- 竞价调度:配合云厂商的竞价实例,大幅降低成本
- 作业生命周期管理:排队、运行、暂停、恢复、失败重试
4. 常见的调度问题和坑
- 死锁:A 任务占了一半资源等另一半,B 任务占了另一半等另一半,两个都跑不起来
- 资源碎片:节点上剩下 1 张卡,但是没有人用,几千张卡的集群,碎片能有 20-30%
- 头部阻塞:一个巨大的任务在队首,占着位置跑一个星期,后面所有任务都等着
- 饥饿:某个小任务永远抢不到资源,一直排在队尾
调度器是整个 GPU 集群的大脑。 调度器好不好,直接决定了你的集群利用率是 30% 还是 60%。 这中间差的一倍,就是几千万甚至几个亿。
知识体系第五层:可观测性层,你得知道你的集群里到底在发生什么
没有好的监控,你根本就不知道你的集群是好是坏。 出了问题你也根本不知道去哪里查。
一个合格的 GPU 集群监控体系,至少要覆盖这几个层面:
1. 硬件层面的监控
- 每一张 GPU 的温度、功耗、风扇转速、显存使用率、计算利用率
- 每一张 GPU 的健康状态,有没有报错,有没有降频
- 每一个网卡的流量、错误包、丢包率
- 每台服务器的 CPU、内存、磁盘使用率
2. 系统层面的监控
- 驱动有没有报错,内核有没有报错
- NCCL 有没有报错,通信带宽有没有异常
- 存储的延迟、IOPS、吞吐量有没有异常
- 网络的延迟、丢包有没有异常
3. 调度层面的监控
- 现在整个集群有多少资源在用,多少空闲
- 每个队列用了多少资源,还剩多少配额
- 排队的任务有多少,平均排队时间是多少
- 每个节点的碎片率是多少,整个集群总的碎片率是多少
4. 作业层面的监控
- 每个用户跑了多少任务,用了多少 GPU 小时
- 每个任务的 GPU 利用率是多少,是不是在空跑占资源
- 任务的失败率是多少,主要的失败原因是什么
- 任务的平均运行时间,平均排队时间
5. 日志系统
- 所有节点的系统日志怎么收集,怎么查
- 所有作业的训练日志怎么收集,怎么查
- 怎么通过日志快速定位常见的故障模式
6. 告警系统
- 什么级别故障需要立刻打电话叫人起来处理
- 什么级别故障只需要发个消息,上班再看
- 怎么避免告警风暴,一天几百个告警最后谁都不看了
可观测性做得好的团队,故障都是分钟级定位。 做得不好的团队,出了问题查半天都不知道哪里坏了。
知识体系第六层:故障处理层,半夜三点打电话给你,你得能搞定
GPU 集群是出了名的脆弱。 几千个部件,任何一个出问题都可能导致整个集群炸掉。 而且故障模式千奇百怪,很多问题你见都没见过。
一个有经验的集群管理员,和一个新手的区别,90% 体现在故障处理上。
常见的故障模式和处理思路:
1. GPU 本身的故障
- 卡坏了:ECC 报错,直接挂掉,需要换卡
- 卡降频了:温度太高,或者供电不够,自动降频,性能掉一半
- 显存坏了:某一段地址出错,训练的时候 loss 突然变成 NaN
- NVLink 报错:卡之间通信出问题,训练速度骤降或者直接失败
2. 网络故障
- 某台交换机端口坏了:整个机架的机器通信都出问题
- 网卡坏了:某台机器的网络带宽只有正常的几分之一
- 网络拥塞:某个时间点流量太大,丢包率飙升,所有训练都变慢
- 配置错了:MTU 不匹配,RDMA 没有开,性能上不去
3. 存储故障
- 存储带宽打满了:所有任务读数据都卡住
- 某个 OSD 挂了:存储集群降级,读写变慢
- 文件系统损坏:数据读不出来,或者读错了
4. 调度器故障
- 调度器死锁了:所有任务都卡在排队,谁也跑不起来
- 调度器 bug:重复分配资源,或者分配了资源不释放
- 抢占失效:高优先级任务抢不到资源
5. 最头疼的:模糊故障
这种是最坑的: 没有明确的报错,没有哪一个部件完全挂了。 但是就是整个集群的训练速度都变慢了,或者任务时不时就失败。 你查了一圈,所有指标看起来都正常,但是就是有问题。
这种故障,没有几年的经验,根本查不出来。
知识体系第七层:成本优化层,帮公司省钱,体现你的价值
前面说的都是怎么把集群跑起来。 但是真正体现你价值的,是怎么帮公司省钱。
一个好的集群管理员,一年帮公司省几百万甚至上千万,是很正常的事情。
主要的优化方向:
1. 提升利用率
这是最大头的。 利用率从 30% 提升到 60%,相当于用同样的钱,多买了一倍的卡。 几千万甚至几个亿就省下来了。 怎么提升? 更好的调度算法,更好的 Bin Packing,更好的碎片整理,分时调度,弹性训练。
2. 淘汰占着茅坑不拉屎的任务
很多用户提交了任务,跑完了不释放,或者干脆就忘了,卡一直占着。 还有很多任务 GPU 利用率只有 5%、10%,但是一占就是好几天。 把这些任务清理掉,立刻就能多出很多可用资源。
3. 混合调度
训练任务对延迟不敏感,但是要很多卡。 推理任务对延迟敏感,但是要的卡不多。 白天大部分资源给推理,晚上大部分资源给训练。 这样就不用为了白天的峰值买两倍的卡。
4. 云原生优化
如果是用公有云的话,优化空间就更大了:
- 多用竞价实例,价格是正常的 1/3 甚至 1/4
- 不用的资源立刻释放,不要留着
- 不同区域的价格不一样,哪里便宜去哪里
- 预留实例 + 按需实例 + 竞价实例混合搭配
5. 虚拟化和池化
把大卡切成小卡给开发和测试用。 不用每个开发人员都独占一张完整的 A100。 一张切成 7 个,就能给 7 个人用。
这些东西做好了,一年省下来的钱,给你发十倍工资都绰绰有余。
给你一个完整的学习路径
说了这么多,你可能觉得头都大了:这么多东西,要学到什么时候去?
别慌,我给你一个分阶段的学习路径,按这个来就行。
阶段 1:入门(1-3 个月)
目标:能管理 10 台机器以内的小集群
- 先买一张二手的便宜 NVIDIA 卡,装在自己电脑上
- 学会装驱动,装 CUDA,装 Docker,装 NVIDIA Container Toolkit
- 学会用 docker 跑 GPU 任务
- 搭一个最简单的单节点 Kubernetes 集群
- 装 GPU Operator,能在 K8s 里跑 GPU Pod
- 跑一个最简单的 mnist 训练,验证整个通了
阶段 2:初级(3-6 个月)
目标:能管理几十台机器的中等集群
- 深入学习 Kubernetes,弄懂核心概念和原理
- 学习部署和使用 Volcano 或者其他调度器
- 学习部署监控系统:Prometheus + Grafana,能看懂常用的指标
- 学习部署分布式存储,比如 JuiceFS 或者 MinIO
- 学习用 Kubeflow Training Operator 提交分布式训练任务
- 开始接触和处理常见的故障:驱动问题,网络问题,存储问题
阶段 3:中级(6-18 个月)
目标:能管理几百台机器的大集群
- 深入理解 GPU 硬件和网络架构
- 深入学习 NCCL 和分布式训练的原理
- 学习性能分析和调优,能找到和解决常见的性能瓶颈
- 深入学习调度器的原理和配置,能优化调度策略提升利用率
- 学习部署和配置 InfiniBand/RoCE 网络
- 积累故障处理经验,见过足够多的故障模式
阶段 4:高级(18 个月以上)
目标:能管理几千台机器的超大规模集群
- 深入理解整个体系的每一层,能做架构设计
- 能处理各种疑难杂症和模糊故障
- 能从 0 到 1 搭一个完整的生产级 GPU 集群
- 能做成本优化和性能优化,量化优化的效果
- 能根据业务的发展,规划集群未来的演进路线
一些有用的学习资源
这个领域资料非常少,但是还是有一些好的资源:
官方文档
- NVIDIA 官方文档:https://docs.nvidia.com/ (最权威的资料,但是非常散)
- NVIDIA GPU Operator 文档:https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/
- Volcano 官方文档:https://volcano.sh/zh/docs/
- Kubeflow 官方文档:https://www.kubeflow.org/docs/
- DCGM 文档:https://docs.nvidia.com/datacenter/dcgm/latest/
开源项目
- NCCL Tests:https://github.com/NVIDIA/nccl-tests
- NVIDIA DCGM Exporter:https://github.com/NVIDIA/dcgm-exporter
- JuiceFS:https://github.com/juicedata/juicefs
- Volcano:https://github.com/volcano-sh/volcano
博客和文章
- NVIDIA 技术博客
- 各个云厂商的技术博客(阿里云、腾讯云、AWS、GCP)
- JuiceFS 的博客,有很多非常好的 GPU 存储相关的实战文章
最后给想入行的人的几个建议
这个方向非常非常有前途,而且未来十年只会越来越值钱 只要 AI 还在发展,只要大模型还在越做越大,对 GPU 集群的需求就只会越来越大,懂这个的人就只会越来越值钱。
不要等所有知识都学会了再开始 根本就没有学会的那一天,这个领域发展太快了,永远有新东西出来。 边做边学,在实战中成长,是最快的方式。
一定要有实际的环境可以练手 光看书是永远学不会的。 你必须有一个真实的集群,有真实的用户,出真实的故障,你才能真正成长。 如果公司里有机会,一定要抓住。哪怕钱少一点都没关系。
这是一个越老越吃香的方向 和很多前端框架什么的不一样,这个领域的知识半衰期非常长。 你今天学到的经验,五年十年之后还能用。 你的经验越丰富,见过的故障越多,就越值钱。
这就是整个 GPU 集群管理的完整知识地图。 水很深,路很长,但是回报也非常非常丰厚。
如果你现在正在做相关的工作,或者想入行,那么祝你好运。 这是一个非常有挑战,但是也非常有成就感的方向。
当你看到你管的几千张卡,满载运行,支撑着几十个大模型同时训练,那种感觉,是别的工作很难给你的。
加油。
作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。
本文首发于 AI人工智能时代,转载请注明出处。