跑AI大模型的K8s与普通K8s有什么不同?

ai,模型,k8s,普通,什么,不同 · 浏览次数 : 25

小编点评

## Kubernetes云原生管理平台的挑战与机遇 **1. Kubernetes的复杂性** * Kubernetes容器的调度、资源分配、同步等复杂性。 * 需要开发并集成调度器、设备plugin等,才能实现高效的资源利用率。 * Kubernetes云原生管理平台要面对这些复杂性,才能实现资源高效的管理。 **2. AI平台底层的竞争力** * AI平台底层需要支持各种容器技术,如Kubernetes、Docker、RDMA等。 * 需要开发和集成AI工具、框架,才能实现高效的AI训练和推理。 * AI平台底层要面对各种挑战,才能实现高效的AI训练和推理。 **3. AI平台底层的优化** * AI平台底层可以利用各种优化技术,如参数面RDMA网络、分布式缓存、设备优化等。 * 可以根据实际情况进行优化,以提升AI平台的性能。 * AI平台底层需要不断优化,才能实现高效的AI训练和推理。 **4. AI平台的应用** * AI平台可以应用于各种场景,如推荐、预测、分析等。 * 需要根据实际需求进行优化,才能实现高效的AI应用。 * AI平台的应用需要不断优化,才能实现高效的AI应用。 **5. AI平台的未来** * AI平台的未来将更加智能化,自动化。 * AI平台将可以与各种云原生平台结合,实现高效的AI管理。 * AI平台将可以应用于各种场景,实现高效的AI应用。

正文

本文分享自华为云社区《跑AI大模型的K8s与普通K8s有什么不同?》,作者:tsjsdbd。

得益于AI开始火的时候,云原生体系已经普及,所以当前绝大多数的AI底层都是基于Kubernetes集群进行的资源管理(不像大数据,早期大量使用Yarn进行资源管理,在云原生普及后,还得面临Spark on K8s这种云原生改造)。

image.png

都知道云原生已经是Kubernetes的天下了,各大领域(大数据、互联网,基因、制药、时空、遥感、金融、游戏等)早已纷纷采纳。那在面对大模型AI火热的当下,咱们从程序员三大件“计算、存储、网络”出发,一起看看这种跑大模型AI的K8s与普通的K8s有什么区别?有哪些底层就可以构筑AI竞争的地方。

计算

Kubernetes是一个在大量节点上管理容器的系统,其主要功能总结起来,就是在想要启动容器的时候,负责“找一个「空闲」节点,启动容器”。但是它默认考虑的启动因素(资源类)主要就是“CPU+内存”。就是容器指定“我要多少CPU+多少内存”,然后K8s找到符合这个要求的节点。

image.png

但是,当容器运行需要特殊“资源”的时候,K8s就熄火了。因为它不是认识“GPU”这种异构资源,不知道节点上面有多少“异构资源”(只统计剩余CPU+内存资源)。

K8s自己知道,异构资源千千万,每种使用方法也不一样,自己开发肯定搞不完。比如有RoCE网卡,GPU卡,NPU卡,FPGA,加密狗等等各种硬件。仅单纯的GPU管理,就可以有“每个容器挂1个GPU”,或者“几个容器共用1个GPU”,甚至“1个GPU切分成多个vGPU分别给不同容器用”多种用法。

image.png

所以,为了成为一个通用的资源调度系统,它(K8s)搞了个插件框架,来辅助自己判断节点有没有“特殊资源”,叫做 Device-plugin插件。用户需要自己完成这个Device-plugin的开发对接,来实时通知K8s节点上面GPU的使用情况,辅助K8s按需分配GPU算力。

总结就是咱们的AI集群里面,总会有一个GPU的Device-plugin用来辅助GPU调度。例如昇腾、含光等各家自研NPU,就算是最简单的整卡调度,也得带这个DP(Device-plugin)。

image.png

如果还需要MIG这样利用vGPU功能来提升GPU的利用率的话,那么Device-plugin插件的实现也会复杂很多。因为A100之前没有提供GPU虚拟化的标准实现,这个就看各家神通了。

image.png

其实目的都是大同小异的:就是增强Device-plugin插件逻辑,实现GPU资源的复用(显存+算力隔离),来提升底层GPU整体的利用率。虽然K8s新版本1.27之后,可以使用DRA(Dynamic Resource Allocation)框架实现动态切分,但是当前绝大多数的集群,依然是使用DP完成这个逻辑。

image.png

而且,K8s设置的“异构资源”调度框架中,认为资源分配必须是“整数”的,即容器可以要1个GPU卡,但是不能要 0.5个GPU卡。所以想要实现多个容器,共用1个GPU卡的话(自己控制分时用,比如白天容器1用,晚上容器2用,这种性能比vGPU切分后用更好),还得增强DP逻辑(以及调度逻辑,后面会讲)。

最后,异构硬件故障的检测,任务的快速恢复,都需要这个DP的深入参与。

存储

其实Kubernetes集群本身也不管存储,主要管理的是容器“如何接入”存储。通过引入PV和PVC概念,标准的K8s都可以做到将存储挂载至容器中,使得容器里面的程序,像使用本地文件一样的访问远端存储。

image.png

在大规模AI训练场景下,样本数据的大小还是很可观的,基本都几百T的级别。所以AI-Infrastructure对存储的要求也会比较高。

更大的区别在于:训练是多轮迭代来逼近目标范围的,因为训练数据量太大,数据无法全部放入内存,在每轮迭代结束后,需要重新从文件系统里读取数据进行下一轮迭代的训。即得重新访问样本进行一轮计算。那么如果每次都重新访问“远程”存储,性能必将大受影响(100T数据,每个epoch重新读一遍OBS桶,你想想那得多慢)。

所以如何将大量的样本数据,就近缓存,就是AI+K8s系统需要重点考虑的问题。分布式缓存加速系统,就是其中一条路线。

image.png

常见的有Juicefs,Alluxio等产品,以及各云厂商提供的自研产品。它们的特点是:利用服务器本身就带的高速存储(比如nvme高速本地盘),来缓存样本数据。并提供分布式文件系统,达到就近全量存储的目的。这样在多轮的epoch训练中,可以大幅的提升样本访问速度,加快整体训练进度。

所以建设or使用分布式缓存系统,也是AI平台建设中的重要一环。

网络

在Kubernetes的标准框架里,容器是只有1个网络平面的。即容器里面,只有1个eth0网卡。所以无论是利用overlay实现容器隧道网络,还是underlay实现容器网络直通,其目的都是解决容器网络“通与不通”的问题。

image.png

而大规模AI集群中,百亿、千亿级别参数量的大模型通常需要做分布式训练,这时参数梯度等信息要在节点间交换,就需要使用RDMA网络来传递。否则以普通以太网进行传输,其仅仅解决“通与不通”这种入门要求,参数信息传的实在太慢了。

RDMA可以绕过TCP/IP协议栈,并且不需要CPU干预,直接从网卡硬件上开始网络数据传递,网络传输性能可以大幅的提升,大大加快训练参数的交换。

image.png

所以咱们的AI集群中,必须要将RDMA网络管理起来,使得所有AI容器可以通过这条路,完成各种集合通信算法(AllReduce等)。

image.png

如上图,除了「底部」那条咱们平时看到的容器网络那条线外,顶部还有一个「参数面」网络。一般成本考虑咱们都是走RoCE方案,即用IB网卡+以太网交换机(而不是IB专用交换机)实现。而且由于RDMA协议要求网络是无损的(否则性能会受到极大的影响),而咱们要在以太网上实现无损网络,就需要引入PFC(Priority-Based Flow Control)流控逻辑。

image.png

这个就需要同时在交换机和服务器RoCE网卡上,两侧同时配置PFC策略进行流控,以实现无损网络。

 image.png

可见,「参数面」网络的管理,会比普通主机网络,多一份PFC调优的复杂度。而且,由于NCCL性能直接影响训练速度,所以定位NCCL性能掉速or调优NCCL性能,也是系统必须提供的运维能力之一。

并且RoCE网卡的管理,也属于“异构资源”,也需要开发Device-plugin来告知K8s如何分配这种RoCE网卡。而且GPU和RoCE网卡是需要进行联合分配的,因为硬件连接关系,必须是靠近在一起的配对一起用,如下:

image.png

因此,除了「参数面」网络设备的管理分配以外,还得关联调度逻辑来感知这个RoCE网卡的硬件拓扑。

调度

标准K8s集群的容器调度,都是单个容器独立考虑的:即取一个容器,找到其适合的节点,然后取下个容器调度。但是分布式AI训练容器不一样,它们是一组容器。这一组容器,必须同时运行,才可以进行集合通信,即所谓的All_or_Nothing。通常也会叫「Gang Scheduling」,这个是分布式AI场景的强诉求。否则会因为多个分布式作业在资源调度层面出现争抢,导致出现资源维度的死锁,结果是谁都没法正常训练。

image.png

因此K8s自带的Scheduler调度器对这种分布式AI训练中的「pod-group」型资源调度就无能为力了。这时K8s提供的「调度插件」框架,又再次发挥作用。用户可以自己开发调度器,集成到K8s集群中,实现自己的容器调度逻辑。

于是,各家又开始整活了。什么Coscheduling,Yunikorn,Volcano,Koordinator,Katalyst等纷纷上线。目的都差不多,先补Gang Scheduling基本功能,再补些MPI等辅助功能。

image.png

这里我们以Volcano为例,它除了完成分布式AI训练中「Pod-group」这种容器组的调度,还实现了容器组之间「SSH免密登录」,MPI任务组的「Hostfile文件」这些辅助实现。

小结

Kubernetes云原生管理平台,已经成为AI数据中心的标准底座。由于AI-Infrastructure设备价格昂贵(参数面一根200Gb的网线要7000元,一台8卡的GPU服务器,超150万元),所以提升资源利用率是一个收益极大的途径。

在提升资源利用率方法上,常见有(1)调度算法的增强和(2)业务加速 2种方式。

其中(1)调度增强上,又分Volcano这种pod-group组调度,来提升分布式训练的资源利用率。以及通过Device-plugin来获得vGPU算力切分或者多容器共用GPU卡的方式。

(2)业务加速路径中,也有通过分布式缓存加速数据访问的。以及通过参数面RDMA网络来加速模型参数同步的。

image.png

以上这些就是唐老师小结的,与平常使用CPU类业务的K8s集群不太不一样的地方。可见除了Kubernetes本身的复杂性外,要做好AI平台底层的各项竞争力,还是需要投入不少人力的。对云原生AI-Infrastructure有兴趣也可以多交流。

号外!

cke_10241.jpeg

华为将于2023年9月20-22日,在上海世博展览馆和上海世博中心举办第八届华为全联接大会(HUAWEICONNECT 2023)。本次大会以“加速行业智能化”为主题,邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁,从商业、产业、生态等方面探讨如何加速行业智能化。

我们诚邀您莅临现场,分享智能化的机遇和挑战,共商智能化的关键举措,体验智能化技术的创新和应用。您可以:

  • 在100+场主题演讲、峰会、论坛中,碰撞加速行业智能化的观点
  • 参观17000平米展区,近距离感受智能化技术在行业中的创新和应用
  • 与技术专家面对面交流,了解最新的解决方案、开发工具并动手实践
  • 与客户和伙伴共寻商机

感谢您一如既往的支持和信赖,我们热忱期待与您在上海见面。

大会官网:https://www.huawei.com/cn/events/huaweiconnect

欢迎关注“华为云开发者联盟”公众号,获取大会议程、精彩活动和前沿干货。

 

点击关注,第一时间了解华为云新鲜技术~

与跑AI大模型的K8s与普通K8s有什么不同?相似的内容:

跑AI大模型的K8s与普通K8s有什么不同?

在面对大模型AI火热的当下,咱们从程序员三大件“计算、存储、网络”出发,一起看看这种跑大模型AI的K8s与普通的K8s有什么区别?有哪些底层就可以构筑AI竞争的地方。

MoneyPrinterPlus:AI自动短视频生成工具-阿里云配置详解

MoneyPrinterPlus是一个很好的自动短视频生成工具,虽然是一个非常好的工具,但是有些小伙伴可能不太清楚具体应该如何配置才能让它跑起来。 因为MoneyPrinterPlus依赖一些具体的配置信息,所以还是很有必要给大家讲解清楚如何进行配置。 项目已开源,代码地址:https://gith

讯飞有一个可以根据描述文本自动生成PPT的AI接口,有趣

文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好100次,如果要购买的话最低要购买1344元的,没有按量付费的模式,个人小开发者可买不起。 让我们跑起来玩玩,官方提供了python的s

video2blog 视频转图文AI小工具正式开源啦

前言 最近对一些小细节做了很多处理,但是其实还是有非常多的问题,没办法时间毕竟时间有限。为什么在这个时候开源,因为主要功能可以全部跑通了,分支暂时没开发的功能也可以通过其他的工具来替代。 这个工具开发初衷(想法来源),我之前有一篇文章有详细的说明,有兴趣的可以看一下https://mp.weixin

ChatGPT 会开源吗?

最近,我被一款叫做 ChatGPT 的人工智能(AI)聊天机器人,刷屏了。网上有人说它是搜索引擎杀手,还有人说它将取代程序员... 最后,我还是没扛住铺天盖地的赞美,跑去注册了个账号,抱着调侃“人工智障”的心态,想要调戏 ChatGPT 一番。于是就有了下面的对话: 此时,我内心毫无波澜。 此刻,我

跑得更快!华为云GaussDB以出色的性能守护“ERP的心脏”

摘要:GaussDB已经全面支撑起MetaERP,在包括库存服务在内的9大核心模块中稳定运行,端到端业务效率得到10倍提升。 本文分享自华为云社区《跑得更快!华为云GaussDB以出色的性能守护“ERP的心脏”》,作者:GaussDB 数据库。 ERP作为华为企业经营最核心的系统,伴随着华为20多年

编译mmdetection3d时,无root权限下为虚拟环境单独创建CUDA版本

在跑一些深度学习代码的时候,如果需要使用mmdetection3d框架,下载的pytorch的cudatoolkit最好需要和本机的cuda版本是一样的,即输入nvcc -V命令后显示的版本一样。 但是如果是在学校里,一般是服务器管理员装的cuda驱动是啥版本,cudatoolkit就是啥版本,且非

将虚拟机跑在ceph之中

目录openStack对接ceph1. cinder对接ceph1.1 ceph创建存储池1.2 ceph授权1.3 下发ceph文件1.4 修改globals文件1.5 部署cinder1.6 创建卷null2. nova对接ceph2.1 创建卷2.2 更新cinder权限2.3 修改globa

StackExchange.Redis跑起来,为什么这么溜?

StackExchange.Redis 是一个高性能的 Redis 客户端库,主要用于 .NET 环境下与 Redis 服务器进行通信,大名鼎鼎的stackoverflow 网站就使用它。它使用异步编程模型,能够高效处理大量请求。支持 Redis 的绝大部分功能,包括发布/订阅、事务、Lua 脚本等...

[转帖]这些 Shell 分析服务器日志命令集锦,收藏好

自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服务器日志,看看网站的访问量。看看有没有黑阔搞破坏!于是收集,整理一些服务器日志分析命令,大家可以试试! 1、查看有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 2、查看某一个页面被访