揭秘 ChatGPT 背后的技术栈:将Kubernetes扩展到2500个节点

揭秘 ChatGPT 背后的技术栈:将Kubernetes扩展到2500个节点

    • etcd
    • Kube masters
    • Docker image 推送
    • Networking
    • ARP cache

在本文中,OpenAI 的工程师团队分享了他们在 Kubernetes 集群扩展过程中遇到的各种挑战和解决方案,以及他们取得的性能和效果。

我们已经运行Kubernetes进行深度学习研究七年多了。虽然我们最大规模的工作负载直接管理裸云虚拟机,但Kubernetes提供了快速迭代周期、合理的可伸缩性和缺乏样板,这使它成为我们大多数实验的理想选择。我们现在运营着几个Kubernetes集群(一些在云中,一些在物理硬件上),其中最大的一个已经扩展到超过2500个节点。该集群运行在Azure中D15v2和NC24虚拟机的组合上。

在达到这种规模的过程中,许多系统组件都造成了破坏,包括etcd、Kube master、Docker映像提取、网络、KubeDNS,甚至是我们机器的ARP缓存。我们觉得分享一下我们遇到的具体问题,以及我们是如何解决它们的,会很有帮助。

etcd

在我们的集群中超过500个节点后,我们的研究人员开始报告kubectl命令行工具的定期超时。我们尝试添加更多的Kube主(运行Kube -apiserver的虚拟机)。这似乎暂时解决了问题,但当我们通过10个副本时,我们知道我们只是在治疗症状,而不是原因(相比之下,GKE使用单个32核VM用于500个节点)。
这让我们强烈怀疑我们的etcd集群,这是Kube大师的中央状态存储。在Datadog中,我们看到在运行ou的DS15v2机器上,写入延迟激增至数百毫秒

在这里插入图片描述

在对fio的性能进行基准测试时,我们看到etcd只能使用大约10%的可用IOPS,因为写延迟为2ms,而etcd执行顺序I/O,这使得它受到延迟的限制。

然后,我们将每个节点的etcd目录移动到本地临时磁盘,这是一个直接连接到实例的SSD,而不是网络连接的SSD。切换到本地磁盘将写入延迟提高到200us,并且etcd恢复正常!

我们的集群运行良好,直到超过1000个节点,此时我们再次看到etcd的高提交延迟。这一次,我们注意到了kube-apiservers

在这里插入图片描述
另一个有用的调整是将Kubernetes事件存储在一个单独的etcd集群中,这样事件创建的峰值就不会影响主etcd实例的性能。要做到这一点,我们只需要设置——etcd-servers-overrides标志,就像这样:——etcd-servers-overrides=/events#https://0.example.com:2381; - https://1.example.com:2381; - https://2.example.com:2381

另一个超过1,000个节点的失败是达到etcd的硬存储限制(默认为2GB),这导致它停止接受写入。这引发了一个级联故障:我们所有的Kube节点都没有通过健康检查,我们的自动缩放也失败了

Kube masters

我们将kube-apiserver、kube-controller-manager和kube-scheduler进程放在同一台机器上。对于高可用性,我们总是至少有2个主服务器,并将——apiserver-count标志设置为我们正在运行的apiserver的数量(否则Prometheus监视可能会在实例之间混淆)。

我们主要使用Kubernetes作为批调度系统,并依赖于我们的自动缩放器来动态地扩展和缩小我们的集群——这让我们大大降低了空闲节点的成本,同时在快速迭代的同时仍然提供了低延迟。默认的kube-scheduler策略是to s

{
"kind" : "Policy",
"apiVersion" : "v1",
"predicates" : [{"name" : "GeneralPredicates"},{"name" : "MatchInterPodAffinity"},{"name" : "NoDiskConflict"},{"name" : "NoVolumeZoneConflict"},{"name" : "PodToleratesNodeTaints"}],
"priorities" : [{"name" : "MostRequestedPriority", "weight" : 1},{"name" : "InterPodAffinityPriority", "weight" : 2}]
}

我们广泛地使用KubeDNS进行服务发现,但在推出新的调度策略后不久,它就开始出现可靠性问题。我们发现故障只发生在KubeDNS的某些舱上。使用新的调度策略,一些机器最终运行了10多个KubeDNS副本,创建了热点,并且我们已经超过了每个Azure虚拟机用于外部域查找的~200QPS。

我们通过在我们的KubeDNS pod中添加一个反亲和规则来解决这个问题:

affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- weight: 100labelSelector:matchExpressions:- key: k8s-appoperator: Invalues:- kube-dnstopologyKey: kubernetes.io/hostname

Docker image 推送

我们的Dota项目是在Kubernetes上开始的,随着规模的扩大,我们注意到新的Kubernetes节点经常长时间处于Pending状态。游戏图像大约17GB,通常需要30分钟才能拉出一个新的集群节点,所以我们理解为什么Dota容器会有一段时间处于Pending状态——但其他容器也是如此。深入研究后,我们发现kubelet有一个——serialize-image- pulled标志,默认值为true,这意味着Dota图像拖动阻塞了所有其他图像。更改为false需要切换Docker到overlay2而不是AUFS。

为了进一步加速拉取,我们还将Docker根目录移动到实例附加的SSD上,就像我们对etcd机器所做的那样。即使在优化了拉速之后,我们也看到pods无法启动,并出现了一个神秘的错误消息:rpc error: code = 2 desc = net/http: request cancelled。kubelet和Docker日志还包含了一些消息,表明由于缺乏进展,映像拉取已经被取消。我们将根跟踪到需要太长时间来提取/提取的大图像,或者当我们有很长时间的图像积压需要提取时。

为了解决这个问题,我们将kubelet的——image-pull-progress-deadline标记设置为30分钟,并将Docker守护进程的max-concurrent-downloads选项设置为10。(第二个选项并没有加快大图像的提取速度,但允许并行地提取图像队列。)我们上次的Docker拉问题是由于谷歌容器注册。默认情况下,kubelet从gcr中提取一个特殊的图像。IO(由——pod-infra-container-image标志控制),在启动任何新容器时使用。如果由于某种原因而失败,比如超出了配额,那么该节点将无法启动任何容器。因为我们的节点要经过NAT才能到达gcr。而不是拥有自己的公共IP,我们很可能会达到每个IP配额的限制。为了解决这个问题,我们使用Docker image save -o /opt/preloaded_docker_images.tar和Docker image load -i /opt/preloaded_docker_images.tar在机器镜像中为我们的Kubernetes worker预加载Docker镜像。为了提高性能,我们对常见openai内部映像(如Dota映像)的白名单进行了同样的操作。

Networking

随着实验规模的扩大,它们也变得越来越复杂,严重依赖网络进行操作。当我们第一次开始运行分布式实验时,很明显我们的网络没有配置好。直接在机器之间,我们获得了10-15Gbit/s的吞吐量,但我们使用法兰绒的Kube吊舱的最大吞吐量达到了约2Gbit/s。Machine Zone的公共基准测试显示了类似的数字,这意味着问题不可能只是配置错误,而是我们的环境固有的问题。(相比之下,Flannel不会在物理机器上增加这种开销。)

为了解决这个问题,用户可以添加两个不同的设置来禁用他们的pod: hostNetwork: true和dnpolicy: ClusterFirstWithHostNet。(在此之前请阅读Kubernetes文档中的警告。)

ARP cache

尽管进行了DNS调优,我们仍然看到DNS解析的间歇性问题。有一天,一名工程师报告说,他们的Redis服务器需要30秒以上才能打印出连接已经建立。我们追踪到内核的ARP协议栈。

对Redis pod主机的初步调查显示网络存在严重问题:任何端口上的通信都挂起了数秒,并且无法通过本地dnsmasq守护进程解析DNS名称,而dig只打印了一个神秘的失败消息:socket.c:1915: internal_send: 127.0.0.1#53: Invalid argument。dmesg日志提供了更多信息:邻居表溢出!这意味着ARP缓存空间已耗尽。ARP协议用于将网络地址(如IPv4地址)映射到物理地址(如MAC地址)。幸运的是,这个问题很容易解决,可以在/etc/sysctl.conf中设置几个选项:

net.ipv4.neigh.default.gc_thresh1 = 80000
net.ipv4.neigh.default.gc_thresh2 = 90000
net.ipv4.neigh.default.gc_thresh3 = 100000

在HPC集群中调优此设置是常见的,在Kubernetes集群中尤其相关,因为每个pod都有自己的IP地址,这会消耗ARP缓存中的空间。我们的Kubernetes集群已经有3个月没有发生事故了,我们计划在2018年扩展到更大的集群。我们最近升级到1.8.4版本,很高兴看到它现在正式支持5000。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9205.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

半天就行!教你用ChatGPT开发小程序;谁能做出中国的Discord?LangChain中文入门教程;一个周末搞定电影预告片的AI工作流 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『Discord和它的中国「学徒」们』为什么还没有人跑出来? ShowMeAI知识星球资料分类「下资料」,编号「R080」 D…

2023最新ChatGPT3.0小程序/云开发无需服务器开源Vue自带API接口

正文: ChatGPT3.0小程序,云开发无需服务器开源vue自带接口,界面的UI也是比较还原官方的了,就连颜色都是一摸一样的,有兴趣的自行去安装体验吧,其它就没什么好介绍的了。 程序: wwxgus.lanzoum.com/iLfKe0otvx5i 图片:

2023 首发 ChatGPTv3.0多端小程序开源源码 云开发无需服务器 带接口

云开发无需服务器开源vue自带接口! 全开源vue 自带接口 上传即可使用! 无需服务器 后续会更新流量主版本! 。。。。

2023最新VUE开发的ChatGPT3.5全开源小程序源码+功能强大/UI也不错

正文: 所需环境 uniapp nodejs 搭建教学 首先前端源码下载下来,用idea源码编辑器打开,只需要修改配置文件中的请求api(request/request.js),需要搭建好后端请求 1.服务器配置 centos7.9 2.宝塔面板安装宝塔 3.如果在线下载…

获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果

百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo。如果要测试的文心一言 也要获取邀请码,才能进行测试的。 我这边通过预约得到了邀请码,大概是在3月17日晚就收到了&#xff…

搭建人工智能wx机器人完整版教程

参考搭建流程 首先需要下载Ubuntu 20.04 镜像包 阿里云开源镜像包 下载方式: 打开以上网站-->点击20.04/-->点击ubuntu-20.04.5-live-server-amd64.iso下载 项目开源地址 https://github.com/zhayujie/chatgpt-on-wechat NxShell下载地址 https://xiaodao.lan…

【微信小程序】微信小程序的接口调入 获取太阳码 根据返回值的类型进行接收,微信接口可能直接返回图片,也可能返回一个错误信息的json,同时兼容处理这两种情况

目录 事件起因环境和工具操作过程解决办法遇到的一点问题结束语 事件起因 在开发一个关于微信小程序的过程中,有一个这样的需求,要求生成微信小程序的太阳码,然而这个东西的请求方式我们是这样的:我作为后端服务去请求这个太阳码…

如何设计开放平台接口与集成chatgpt

如何设计开放平台接口与集成chatgpt 文章目录 如何设计开放平台接口与集成chatgpt前言一、Token机制生成方式有哪些session存在的问题JWT如何解决session存在的问题 二、AppId、AppSecretAppId机制签名机制 三 码上实现客户端注意 源码地址配置 前言 前一段时间,突…

ChatGPT研究(二)——ChatGPT助力跨模态AI生成应用

✏️写作:个人博客,InfoQ,掘金,知乎,CSDN 📧公众号:进击的Matrix 🚫特别声明:创作不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 前言 …

《花雕学AI》12:从ChatGPT的出现看人类与人工智能的互补关系与未来发展

马云说道,ChatGPT这一类技术已经对教育带来挑战,但是ChatGPT这一类技术只是AI时代的开始。 谷歌CEO桑德尔皮猜曾说:“人工智能是我们人类正在从事的最为深刻的研究方向之一,甚至要比火与电还更加深刻。” 360周鸿祎认为&#xf…

论文谷歌翻译:SinGAN(代码开源)

论文地址:https://arxiv.org/abs/1905.01164 代码地址:http://webee.technion.ac.il/people/tomermic/SinGAN/SinGAN.htm 摘要 提出了 SinGAN,这是一个可以从单张自然图像学习的非条件性生成式模型。模型可以捕捉给定图像中各个小块内的内在…

最好最常用的国外邮箱推荐!注册非常简单!

大家都知道,接送和发送电子邮件是我们日常不可避免的,不管是个人也好,企业也好,都需要邮箱来处理一些东西。 当然现在的通讯比较发达,打电话、短信、QQ或者微信都可以进行交流沟通,也可以发送些简单的文件…

编译器技术的演进与变革

在过去的数十年里,摩尔定律一直支配着半导体行业的发展路线,随着晶体管尺寸的不断变小单个芯片上集成的晶体管数量越来越多。 最新的 NVIDIA A100 GPU 单个芯片集成了 540 亿个晶体管,而嵌入式系统级芯片(System on Chip&#xff…

2023年美赛A题赛后总结

文章目录 心路历程1. 选题2. 初次建模3. 数据收集4. 二次建模5. 算法实现以及优化6.全英论文撰写 总结 心路历程 2023年美赛是在2月17号早上6点到2月21号早上8点这期间举行的,美赛开赛前一天我们三个人还在考期末考,甚至美赛刚开始前两天有位队友每天还…

概率统计极简入门:通俗理解微积分/期望方差/正态分布前世今生(23修订版)

原标题:数据挖掘中所需的概率论与数理统计知识(12年首次发布,23年重编公式且反复改进) 修订背景 本文初稿发布于12年年底,十年后的22年底/23年初ChatGPT大火,在写ChatGPT通俗笔记的过程中,发现ChatGPT背后技术涉及到了…

ChatGPT 插件(八个插件,个个优秀)

webpilot——联网搜索图片、视频、文档、人脉等 1. 有哪些免费的高清无版权的图片网站,请从这些网站里找一些图片给我,图片搜索关键词为:Shanghai aerial,把图片的url链接发我; 2. 有哪些免费的GIF图片网站,请从这些网…

从ChatGPT看AI未来趋势和挑战 | 万字长文

ChatGPT 持续成为大家关注的焦点,开启通用人工智能(AGI)之门。北京交通大学桑基韬教授和于剑教授撰写的《从ChatGPT看AI未来趋势和挑战》,详述了ChatGPT 的“能”与“不能”,AI中什么是“真”以及AI的未来趋势,非常值得关注&#…

高等数学(第七版)同济大学 习题1-1 个人解答

高等数学(第七版)同济大学 习题1-1 函数作图软件:Mathematica 部分图片采用ChatGPT生成 1. 求下列函数的自然定义域 \begin{aligned}&1. 求下列函数的自然定义域&&&&&&&&&&&&&&am…

大佬太快了 !这本ChatGPT、AI绘画的书籍免费赠送给大家 !

a15a 著,贾雪丽,0xAres,张炯 编 电子工业出版社-博文视点 2023-04-01 ISBN: 9787121353932 定价: 79.00 元 新书推荐 🌟今日福利 |关于本书| 《一本书读懂AIGC:ChatGPT、AI绘画、智能文明与生产…

ChatGPT生成 SD 和 Midjourney 的提示(prompt)

探索Midjourney之旅,学习绘画与AI,一同成长。加入「阿杰与AI」公众号,参与内容社群建设。 1.Midjourney 新手快速起步指南2.Prompts-提示指令3.Explore Prompting-提示指令的探索4.Blend-叠加5.Midjourney Discord的使用手册6.Versions-版本…