关于AI(深度学习)相关项目 K8s 部署的一些思考

写在前面


  • 工作中遇到,简单整理
  • 第一次接触,一些粗浅的思考
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


部署方面

pod 调度方面

对于 AI 相关项目,一般镜像都比较大,尤其涉及的库比较多,基本都是以 GB 为单位,而且部分项目可能需要专门的硬件支持,所以尽可能的通过 亲和性(affinity)或者拓扑分布约束(topologySpreadConstraints)来对调度区域进行限制,减少对整个集群节点存储的占用,方便维护,这里需要分情况考虑,

如果部署 Pod 相对较少,可以考虑通过 亲和性来处理,控制在指定标签的节点上,但是可能存在Pod不会均匀分布的情况,如果希望均匀分布,可以使用拓扑分布约束。

如果部署 Pod 相对较多,考虑通过 拓扑分布约束来限制,限制 Pod 只能调度到指定的拓扑域,但是尽量不要亲和性约束和拓扑分布约束同时使用,维护起来相对不方便。

Pod资源限制

在资源使用方面,如果当前项目和业务项目位于同一集群,那么需要对所在命名空间做资源配额,这里可以考虑使用 LimitRange 结合 Resource Quotas 使用.

对于 内存的限制,根据实际分配情况进行配置,内存属于 不可压缩资源,所以 Cgroup 可以严格控制,对应 CPU 来说,配置需要小于当前约定的配额,CPU 属于可压缩资源,Cgroup 不能像内存那种做成严格限制,超过去只能是少分配处理时间,所以可能会有弹性的变化,已经超出去了,才会限制,不像内存,直接就申请不了那么多起不来,超过去直接 kill 掉。

Pod 数量扩展方面

对于 CPU/GPU 计算密集型的 Pod 来讲,Pod 不是越多越好,纵向的资源扩展(Pod资源配额)要优于横向的Pod扩展(Pod 数量), 多个 Pod 分配很少的资源,处理速度要远远低于 Pod 分配资源较多,但 Pod 数较少。具体情况需要具体分析,实际上还要结合项目需要去考虑,训练和预测可能还存在差异

横向扩展,不能依赖 service 提供的负载均衡能力

测试中发现,使用无状态控制器来部署项目核心服务提供能力,当 Pod 数量相对较多时, service 往往不能均匀的负载(底层使用 iptable ),存在两级分化

默认情况下 ,SVC 使用轮询模式 RoundRobin 的负载分发策略,实现方式略有不同

当使用 iptables 模式,iptables 负载均衡使用随机模式,每个对应的 endpoint 会添加一个自定义链,从 SVC 的 服务发布方式(NodePort,ClusterIP,LoadBalancer ) 到 对应的 Pod,当 Pod 比较多,匹配的概率会变的很小,下面为当 Pod 数为 2 的时候,iptables 的匹配概率为 0.50000000000

-A KUBE-SVC-K6NOPV6C6M2DHO7B -m comment --comment "velero/minio:console -> 10.244.169.89:9090" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-OLNIRCQFCXAN5USW

当使用 ipvs 模式的时候,即依赖 Linux 内核 lvs 特性,使用的负载策略为 rr(轮询调度)

TCP  192.168.26.200:80 rr-> 192.168.26.153:80            Masq    2      0          0-> 192.168.26.154:80            Masq    2      0          0

解决办法可以考虑使用流量治理工具,比如 istio或者对 负载进行划分,降低负载域的范围

架构方面

数据处理 拉(pull)比推(push)更合适

AI 相关项目一般涉及的数据量都比较大,尤其涉及到一些张量之类的大数组, 实际测试发现,通过一个调度中心把数据推给对应的能力提供 Pod 处理,在速度上要比 对应该的能力提供 Pod 直接从中间件拉取数据处理慢的多的多。

推的方式需要考虑负载问题,以及每个 Pod 实际的饱和状态,而且涉及到多次数据通信,但是拉的话就不需要考虑这么多。具体的处理可以使用K8sjob 控制器来实现,根据数据量,创建对应 job 任务,而且每次处理的 Job 也可以分批次控制。

异步不等于快,吞吐量不等于处理速度,网络IO密集型和 CUP 密集型是两种不同场景

当前的 python 框架大多支持异步处理,利用 Python 的协程,基于 asyncio 事件循环,可以有很高的并发量,吞吐量,尤其是 ASGI 标准的框架(fastapi,tomado)等,但是需要注意的是, asyncio 事件循环 的高吞吐 面向 网络/IO 密集型的非阻塞处理,不适用 CPU 密集型,对于 CPU 密集型,任然会阻塞。

即使通过队列等方式做了处理,解决的也只是吞吐量,和处理速度没有关系。往往看上去处理完了,会发现程序内部积累了大量的协程,吃进去了,但是消化不了。

利用中间件交换数据,比通过通信协议直接交换数据 更适合 K8s 环境

通过中间件交换数据,解耦了 服务之间的绑定,细化了流程,不需要考虑数据在传输的丢失,二是使用中间件,存储处理的中间数据,更方便测试,可以灵活处理各个阶段对数据的处理


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

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

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

相关文章

[极客大挑战 2019]BuyFlag 1(两种解法)

题目环境: FLAG NEED YOUR 100000000 MONEY flag需要你的100000000元 F12瞅瞅源代码: if (isset($_POST[password])){ $password $_POST[password]; if (is_numeric($password)) { echo "password cant be number" } elseif ($pas…

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例 针对本地机为Windows 云服务器租显卡跑些小模型很方便,但是当你想做可视化的时候,可能会遇到麻烦,云服务器没有显示输出界面,无法可视化一些检测任务的结果,或者可…

go ntp时间同步

go ntp时间同步 直接上代码 ntp_sync_time.go package ntpimport ("context""fmt""math""sync""sync/atomic""time""github.com/beevik/ntp" )/** 通过ntp方式去同步时间** CreateTime: 2023-05-19 17…

什么叫做云安全?云安全有哪些要求?

云安全(Cloud Security)是一种基于云计算的安全防护策略,旨在保护企业数据和应用程序的安全性和完整性。云安全利用云计算的分布式处理和存储能力,以更高效、更灵活的方式提供安全服务。 云安全的要求主要包括以下几个方面: 数据安全和隐私保…

智能化的同城服务共享台球室小程序系统,提升台球室运营效率

一、引言 在当今数字化时代,智能化技术正在改变各行各业的运营模式。台球室作为传统的休闲娱乐场所,也需要与时俱进,借助智能化技术提升运营效率。本文将探讨如何通过智能化的同城服务共享台球室小程序系统,提升台球室的运营效率…

消息中间件,RabbitMQ,kafka常见面试题

消息中间件,RabbitMQ,kafka常见面试题 文章目录 消息中间件,RabbitMQ,kafka常见面试题RabbitMQ,kafkaRabbitMQ 和 Kafka 的相同点有以下几个: 消息中间件面试题-参考回答 RabbitMQ,kafka Rabbi…

Python | 机器学习之数据清洗

​ 🌈个人主页:Sarapines Programmer🔥 系列专栏:《人工智能奇遇记》🔖少年有梦不应止于心动,更要付诸行动。 目录结构 1. 机器学习之数据清洗概念 1.1 机器学习 1.2 数据清洗 2. 数据清洗 2.1 实验目的…

Apache Airflow (六) :DAG catchup 参数设置

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

从0到0.01入门React | 010.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

ARM 作业

src/uart.c #include"uart.h"void uart4_init() {//设置UART4的RCc时钟使能//RCC_MP_APB1ENSETR[16]->1RCC->MP_APB1ENSETR | (0x1<<16);//设置GPIOB和GPIOG的时钟使能//RCC_MP_AHB4ENSETR[6]->1//RCC_MP_AHB4ENSETR[1]->1RCC->MP_AHB4ENSETR …

【C/PTA——8.数组2(课外实践)】

C/PTA——8.数组2&#xff08;课外实践&#xff09; 7-4 矩阵运算7-2 方阵循环右移7-3 螺旋方阵7-4 数组-杨辉三角7-5 数组-对角线求和7-6 数组-矩阵最小值 7-4 矩阵运算 #include<stdio.h> int main() {int n, i, j;int a[10][10] { 0 };scanf("%d", &n)…

电脑技巧:推荐基于浏览器的远程桌面访问控制工具

一、软件简介 Getscreen.me是一个基于浏览器的远程桌面访问控制工具&#xff0c;可以轻松地远程访问控制特定设备。并且注册登录账户实现允许设置具有永久访问权限的设备&#xff0c;可以通过一键进行快速连接访问&#xff0c;无需共享 ID、密码或任何内容。 Getscreen.me采用…

Linux可以投屏到电视吗?用网页浏览器就能投屏到电视!

Linux系统的电脑如果要投屏到安卓电视屏幕上&#xff0c;可以使用投屏工具AirDroid Cast的网页版和TV版一起实现。 首先&#xff0c;在Linux系统的电脑里用chrome浏览器或edge浏览器打开webcast.airdroid.com。这就是AirDroid Cast的网页版。你可以看到中间白色框框的右上角有个…

Flink 支持三种时间语义

在 Apache Flink 中&#xff0c;时间在流处理中是一个重要的概念&#xff0c;而时间语义则用于定义事件发生的时间。Flink 支持三种时间语义&#xff0c;分别是&#xff1a; Processing Time&#xff08;处理时间&#xff09;&#xff1a; 以机器的系统时间为基准&#xff0c;…

ARPG----C++学习记录04 Section8 角色类,移动

角色类输入 新建一个角色C&#xff0c;继承建立蓝图,和Pawn一样&#xff0c;绑定输入移动和相机. 在构造函数中添加这段代码也能实现。打开UsePawnControlRotation就可以让人物不跟随鼠标旋转 得到旋转后的向前向量 使用旋转矩阵 想要前进方向和旋转的方向对应。获取当前控制…

常用的原型设计工具集合

文章目录 前言Axure RPMockplusSketchFigmaPixso 前言 软件产品的诞生注定要经历一个过程&#xff1a;需求分析、设计、开发、测试和在线。在设计阶段&#xff0c;原型设计是软件设计和开发的重要保证。与其他工作一样&#xff0c;高效的原型设计需要相应工具的协助才能完成原…

2.3 Windows驱动开发:内核字符串转换方法

在内核编程中字符串有两种格式ANSI_STRING与UNICODE_STRING&#xff0c;这两种格式是微软推出的安全版本的字符串结构体&#xff0c;也是微软推荐使用的格式&#xff0c;通常情况下ANSI_STRING代表的类型是char *也就是ANSI多字节模式的字符串&#xff0c;而UNICODE_STRING则代…

图论14-最短路径-Dijkstra算法+Bellman-Ford算法+Floyed算法

文章目录 0 代码仓库1 Dijkstra算法2 Dijkstra算法的实现2.1 设置距离数组2.2 找到当前路径的最小值 curdis&#xff0c;及对应的该顶点cur2.3 更新权重2.4 其他接口2.4.1 判断某个顶点的连通性2.4.2 求源点s到某个顶点的最短路径 3使用优先队列优化-Dijkstra算法3.1 设计内部类…

Vue 小黑记事本组件板

渲染功能&#xff1a; 1.提供数据&#xff1a; 提供在公共的父组件 App.vue 2.通过父传子&#xff0c;将数据传递给TodoMain 3.利用 v-for渲染 添加功能&#xff1a; 1.收集表单数据 v-model 2.监听事件&#xff08;回车点击都要添加&#xff09; 3.子传父&#xff0c;讲…

Redis解决缓存问题

目录 一、引言二、缓存三、Redis缓存四、缓存一致性1.缓存更新策略2.主动更新 五、缓存穿透六、缓存雪崩七、缓存击穿1.基于互斥锁解决具体业务2.基于逻辑过期解决具体业务 一、引言 在一些大型的网站中会有十分庞大的用户访问流量&#xff0c;而过多的用户访问对我们的MySQL数…