AI整体架构设计5:CN+AI的三国杀

本文最后的图展示了气势磅礴的AI+CN(云原生)的技术栈,潜藏着无限的杀机。还在云原生的时候,研发和运维一直围绕着Devops进行两国杀。CN+AI的时代,数据科学家加入了战局,彻底变成三国杀。边界的不断互相渗透,全栈的人才最宝贵,抑或要找到新型的跨团队合作模式。

机器学习管道

Pipeline翻译为管道其实不大贴切,翻译为流程较为妥当。AI平台的架构设计离不开基本的ML流程。正因为人工智能的规模化扩展和低延迟性的需求给传统的架构设计带来了挑战。虽然基于云原生的架构灵活和高扩展,但是它又不得不面对新的挑战。

典型机器学习流程包括,数据准备(收集、清洁/预处理、特征工程)、模型训练(含模型管理,测试与超参数调整)、CI/CD(含模型仓库与存储)、模型服务、应用与系统监测(负载、模型漂移、安全性)。若是AI基于云原生,那么在各个环节的挑战又什么,又应该在设计的时候考虑到哪些维度?

数据准备挑战

在架构设计的前期阶段可以按照摩尔定律预估数据规模,按照每隔18个月增加一倍的进行预估。数据格式和数据源一定是多样化的。 开发环境和生产环境通常会存在差异,部分是因为分布式计算带来的复杂度(例如分区和同步)。

以Spark的数据处理引擎而言,SQL为用户提供标准化且熟悉的使用体验。无论用户在本地进行原型设计还是运行大型的分布式计算任务。然而,机器学习工作负载没有行业标准接口。一般而言,数据科学家在本地使用小型数据集利用Python语言进行研发,然后量产团队(分布式系统工程师)需要采用新编程语言或者调整算法重新编写脚本以便后期的分布式运算。 

一旦分布式的机器学习任务未能按预期运行,数据科学家可能需要本地 Python脚调试。 整个过程效率低下,而且常常经常找不到问题所在,即便有好的可观察性工具和可再现的容器技术。

潜在可行的解决方案第一个是使用行业标准接口来支持端到端的机器学习生命周期。例如,可以利用PyTorch或TensorFlow等本机ML框架创建训练代码,并通过在Python运行时本地运行来验证它。然后用户可以轻松地重用相同的代码,并利用Kubeflow的Python SDK通过Kind/Minikube以分布式方式在本地运行此代码,或者通过使用相同的代码将其部署到远程大型 Kubernetes 集群来轻松扩展其训练代码。另一种选择是使用通用分布式计算引擎,例如Ray,其计算抽象还使用户能够在本地和生产环境中无缝运行相同的 Ray 脚本。

另外在数据监管层面,架构设计时候需要考虑到隐私、安全、权限管控、血缘追踪和数据偏差。

模型训练挑战

大模型正在快速的推动云原生的边界突破,以便于满足不断增长的人工智能/机器学习训练和推理计算需求,同时各类的加速器正在变得流行。正如前面提到的,云原生通过利用容器化、微服务和可扩展云基础设施的固有功能,简化了人工智能工作负载的编排和调度。 复杂的人工智能工作流程可以分解为模块化组件,从而更容易独立管理和扩展特定功能。

这里包括多家供应商提供的具有不同功能的GPU,到Google的TPU、Intel的 Gaudi,甚至FPGA。这些不同的计算资源需要虚拟化支持、驱动程序、配置和共享的能力以及云原生的调度增强。加速器的可用性和成本受限的前提下,人们更多的探索云资源,甚至天空计算(Sky Compute 智能地连接不同的云服务器,它利用负载平衡实现了每个设备的统一处理时间,确保计算任务的一致完成并优化整体训练时间。 )。

GPU是一种宝贵且需求旺盛的资源。能够更有效地管理基于GPU的AI任务的共享和调度对于 AI任务的成功至关重要。这里比较大的挑战在于GPU虚拟化和动态分配方面,将云原生技术用于于 AI会比较复杂。vGPU、MIG、MPS和动态资源分配 (DRA) 等技术使多个用户能够共享单个 GPU,同时为相同Pod中的容器之间提供隔离和共享能力。除此之外还提高了GPU的利用率,从而降低成本。

一些经过充分测试的工具用于解决高级调度需求(二进制打包、放置、资源争用和抢占)。这些工具对于AI云原生的蓬勃发展起到很关键的作用。 通过Yunikorn、Volcano 和Kueue等努力,Kubernetes 中正在不断进化更好的调度支持。后两者解决了批量调度问题,这对于高效的AI/ML训练特别有价值。

模型服务挑战

AI的能力总归是要输出,那么如何输出。云原生基于微服务架构,将ML流程中的每个阶段作为单独的微服务进行处理,对AI构成一定的挑战。很多组件在同步输出结果和任务切换变得困难。即便用户在单机上使用这些解决方案,他们仍然需要创建数十个Pod。这样的复杂度使得基础设施缺乏灵活性来适应多样化的机器学习任务。

其次,基于微服务的机器学习架构会让用户体验支离破碎,或者换句话说对用户的能力提出更高的要求。例如,用户需要构建容器映像、编写自定义资源 YAML 文件、使用工作流程编排器等,而不仅仅关注他们的ML Python脚本。这种复杂度还体现在更陡峭的学习曲线,要求用户学习其专业知识和/或兴趣之外的许多系统和技术。

机器学习模型生命周期中若存在不同的软件和系统,那么成本会显着增加。机器学习生产环境托管在多个微服务中,具有单独的数据处理、模型推理和业务逻辑步骤。基础设施拆分涉及复杂的资源同步管理,降低了开发和模型发布的速度。若是采用Ray构建了一个统一的ML平台,增强了其生产环境的性能,会让ML的推理总成本一年降低了近 50%,主要归功于资源共享以及节省跨阶段的序列化和反序列化过程。

AI云原生的技术栈

人工智能 (AI) 和云原生 (CN) 技术的结合为组织提供了开发前所未有的能力的绝佳机会。凭借云原生基础设施的可扩展性、弹性和易用性,可以更高效、更大规模地训练和部署人工智能模型。

尽管仍然存在一些挑战,包括管理复杂人工智能任务的资源需求、确保人工智能模型的快速部署以及简化非技术从业者的用户体验,但整体而言也在推动者云原生技术不断地迭代,尤其是在GPU调度、矢量数据库和可持续性方面。

随着人工智能和云原生技术的成熟,拥抱这种协同作用的公司将处于有利位置,以提高竞争优势。从自动化复杂任务和分析大量数据集到生成创意内容和个性化用户体验,可能性是无限的。 然而全栈的人才最是宝贵。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】JAVA Design Patterns——Combinator(功能模式)

🔍目的 功能模式代表了一种以组合功能为中心的图书馆组织风格。 简单地说,有一些类型 T,一些用于构造类型 T 的“原始”值的函数,以及一些可以以各种方式组合类型 T 的值以构建更复杂的类型 T 值的“组合器” 🔍解释 真…

ubuntu20.04 10分钟搭建无延迟大疆无人机多线程流媒体服务器

1.使用效果 无人机画面 2.服务器视频端口 3.使用教程 3.1.下载ubuntu对应软件包:系统要求ubuntu16以上 3.2修改端口(config.xml文件) 3.3启动服务 目录下输入:终端启动:./smart_rtmpd 后台启动:nohup ./…

Pip,whl,源码编译安装Python库

pip安装 pip 是 Python 包管理工具,用于安装和管理 Python 包。pip 是 Python 开发中不可或缺的工具,能够帮助开发者轻松地管理项目所需的各种库和依赖。无论是安装新包、升级现有包还是卸载不需要的包,pip 都提供了简单而强大的命令来完成这…

92.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-利用哈希表实现快速读取文本内容

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

k8s dashboard安装

本案例,k8s版本为v1.22.17,所以安装v2.7.0版本的dashboard 1、下载dashboard的yaml文件 curl -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 2、修改recommended.yaml文件 修改定义的Service&…

java版本spring cloud-spring boot高效知识付费SaaS平台的架构与功能模块设计

知识付费平台是一种快速发展的在线教育模式,它以满足用户需求为核心,提供便捷高效的学习渠道。该平台汇聚了各类专业知识,覆盖职业技能、生活兴趣和人文社科等多个领域,满足不同用户的学习需求。同时,平台还提供视频播…

通过 PW6606 快充电压诱骗芯片,了解 USB-A 与 USB-C 快充协议

充电器一般分两种: 1, A 口充电器,就是我们常见的 USB 口,如下图,这种通用快充协议叫: QC3.0,QC2.0 快充,是属于快充刚开始的充电协议,支持 5V,9V,12V 和 20V 电压输出充电器&#x…

聚观早报 | 拼多多第一季度营收;苹果2024款彩虹表带上市

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 5月24日消息 拼多多第一季度营收 苹果2024款彩虹表带上市 小米汽车智驾将提速 iPhone 16 Pro Max将用最大屏幕 …

20240520解决在Ubuntu20.04下编译RK3588的Android12的SDK出现C2_GIT_BUILD_VERSION未定义的问题

20240520解决在Ubuntu20.04下编译RK3588的Android12的SDK出现C2_GIT_BUILD_VERSION未定义的问题 2024/5/20 20:19 缘起:通过./repo/repo/repo sync -l得到的SDK正常,但是解压缩之后的SDK却出错了! 通过grep很容易发现有三个地方有&#xff0c…

Jenkins 构建 Maven 项目:项目和服务器在一起的情况

bash.sh内容 #!/bin/bash#删除历史数据 rm -rf ruoyi-admin.jar# appname$1 appnamevideo.xxxxx.com #获取传入的参数 echo "arg:$appname"#获取正在运行的jar包pid # pidps -ef | grep $1 | grep java -jar | awk {printf $2} pidps -ef | grep $appname | grep ja…

【加密与解密(第四版)】第十三章笔记

第十三章 HOOK技术 13.1 Hook概述 IAT HOOK(改地址) BOOL IAT_InstallHook(){BOOL bResult FALSE ;HMODULE hCurExe GetModuleHandle(NULL);PULONG_PTR pt ;ULONG_PTR OrginalAddr;bResult InstallModuleIATHook(hCurExe,"user32.dll",&qu…

将联表查询到的数据按1000一批次存入数据库-模板

idea模板: /*** ${Shitilei}信息 服务层实现。** author admin*/ Service RequiredArgsConstructor public class Operate${Shitilei}Service {private final ${Shitilei}Mapper ${shitilei}Mapper;private final RegionUtil util;/*** ${shitilei}表* return 操作结…

解决Ubuntu无法使用root登录的问题

1、登录普通用户 2、使用vi编辑器打开/etc/pam.d/gdm-autologin并注释掉auth required pam_succeed_if.so user ! root quiet_success 3、使用vi编辑器打开/etc/pam.d/gdm-password并注释掉auth required pam_succeed_if.so user ! root quiet_success 4、注销用户重新用roo…

【网络协议】【OSI】一次HTTP请求OSI工作过程详细解析

目录 1. 一次HTTP请求OSI工作过程 1.1 应用层(第7层) 1.2 表示层(第6层) 1.3 会话层(第5层) 1.4 传输层(第4层) 1.5 网络层(第3层) 1.6 数据链路层&am…

Z缓冲技术在AI去衣中的关键角色

引言: 人工智能(AI)技术的飞速发展,为图像处理领域带来了革命性的变化。其中,AI去衣技术作为一种新兴的应用,引起了广泛关注。它不仅在多媒体内容的编辑、虚拟现实和增强现实等领域具有重要的应用价值&…

Java八大类型详解

整数类型 (4种) 整数的类型 类型占用内存空间范围byte [字节]1字节-128 ~ 127存放的范围是>二进制short [短整型]2字节 -(2⁵) ~ 2⁵-1 -32768 ~ 32767 int [整形]4字节 -2 ~ 2-1 -2147483648 - 2147483647 long [长整形]8字节-2⁶ ~ 2⁶-1 整数类型的使用细节 1. Java个…

el-table 划入划出方法

<template><div><el-table :data"tableData" style"width: 100%" cell-mouse-enter"handleMouseEnter" cell-mouse-leave"handleMouseLeave"><el-table-column prop"ddd" label"日期2" widt…

Java 数组的基本使用

目录 含义语法格式语句特点数组的长度数组的元素打印数组显示数组数组的复制扩展示例【12】&#xff1a; 含义 数组&#xff08;array&#xff09;是一种最简单的复合数据类型&#xff0c;它是有序数据的集合&#xff0c;数组中的每个元素具有相同的数据类型&#xff0c;可以用…

Mysql基础教程(06):NOT IN

数据准备 首先创建一个数据库educational_manage&#xff0c;记住字符集和排序规则如下选择&#xff1a; 接着创建表和数据&#xff0c;具体的sql代码如下&#xff1a; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure f…

JavaScript-隐式转换和显式转换

为什么需要类型转换&#xff1f; 因为JavaScript是弱类型声明&#xff0c;在没赋值前是不知道数据的类型的&#xff0c;只有赋值了才知道&#xff0c;表单和prompt获取的数据都是字符串型&#xff0c;此时就不能直接的简单加减法运算 所以需要转换数据类型 隐式转换 某些运算符…