首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【AI系统】AI系统概述与设计目标

【AI系统】AI系统概述与设计目标

原创
作者头像
用户11307734
修改于 2024-12-02 03:28:59
修改于 2024-12-02 03:28:59
2970
举报
文章被收录于专栏:AI系统AI系统

AI 系统全栈架构

通过对 AI 的发展、以及模型算法、硬件与数据的趋势介绍,我们已经了解了 AI 系统的重要性。本文将介 AI 系统的设计目标、组成和生态,让读者形成 AI 系统的知识体系,为后续展开每篇文章的内容做好铺垫。

AI 系统设计本身需要各个环节通盘考量,无论是系统性能,还是用户体验,亦或是稳定性等指标,甚至在开源如火如荼发展的今天,开源社区运营也成为 AI 系统推广本身不可忽视的环节。接下来将从不同的维度和技术层面展开 AI 系统的全景图。

AI 系统概述

AI 系统基本概念

从类比的角度理解 AI 系统:AI 时代连接硬件和上层应用的中间层软硬件基础设施

因此在部分语境中,又有人称为 AI Infra 人工智能的基础设施,但是因为基础设施更偏向于底层硬件、集群等内容,而 AI 系统是多的是强调让 AI 执行起来的系统体系结构,因此更愿意称包括软硬件的内容为 AI 系统。

传统本地部署时代,三大基础软件(数据库、操作系统、中间件)实现控制硬件交互、存储管理数据、网络通信调度等共性功能,抽象并隔绝底层硬件系统的复杂性,让上层应用开发者能够专注于业务逻辑和应用功能本身的创新实现。

云时代同理,形成了 IaaSPaaSSaaS 三层架构,其中 PaaS 层提供应用开发环境和基础的数据分析管理服务。类比来看,我们认为,进入 AI 时代也有承担类似功能的、连接算力和应用的基础设施中间层即 AI 系统,提供基础模型服务、赋能模型微调和应用开发。

AI 系统详细定义

开发者一般通过编程语言 Python 和 AI 框架(例如 PyTorch、MindSpore 等)API 编码和描述以上 AI 模型,声明训练作业和部署模型流程。由最开始 AlexNet 是作者直接通过 CUDA 实现网络模型,到目前有通过 Python 语言灵活和轻松调用的 AI 框架,到大家习惯使用 HuggingFace 社区提供的组件进行大语言模型进行微调和推理,背后是系统工程师贴合实际需求不断研发新的工具,并推动深度学习生产力提升的结果。

但是这些 AI 编程语言和 AI 框架应对自动化机器学习强化学习等多样执行方式,以及细分的应用场景显得越来越低效,不够灵活,需要用户自定义一些特殊优化,没有好的工具和系统的支撑,这些问题一定程度上会拖慢和阻碍算法工程师研发效率,影响算法本身的发展。

因此,目前开源社区中也不断涌现针对特定应用领域而设计的框架和工具,例如 Hugging Face 提供语言预训练模型 ModelZoo 和社区,FairSeq 自然语言处理中的序列到序列模型开发套件和MMDetection 物体检测套件,针对自动化机器学习设计的 NNI 加速库等,进而针对特定领域模型应用负载进行定制化设计和性能优化,并提供更简化的接口和应用体验。

由于不同领域的输入数据格式不同,预测输出结果不同,数据获取方式不同,造成模型结构和训练方式产生非常多样的需求,各家公司和组织不断研发新的针对特定领域的 AI 框架或上层应用接口封装,以支持特定领域数据科学家快速验证和实现新的 AI 想法,工程化部署和批量训练成熟的模型。如 Meta 推出的 Torch 演化到 PyTorch,谷歌 TensorFlow 及新推出的 JAX,基于 PyTorch 构建的 HuggingFace 等。AI 开发工具与 AI 框架本身也是随着用户的模型构建与程序编写与部署需求不断演进。

这其中快速获取用户的原因,有一些是其提供了针对应用场景非常简化的模型操作,并提供模型中心快速微调相应的模型,有一些是因为其能支持大模型训练或者有特定领域模型结构的系统优化。

AI 系统自身设计挑战较高(如更大的规模、更大的超参数搜索空间、更复杂的模型结构设计),人工智能的代表性开发框架 PyTorch 是 Meta 开发,后续贡献给 Linux 开源基金会;TensorFlow 是谷歌(谷歌)从 2016 年开源;华为(HUAWEI)为了避免美国全面封锁 AI 领域推出自研的 AI 框架 MindSpore。

硬件厂商围绕其设计了大量的专有 AI 芯片(如 GPU、TPU、NPU 等)来加速 AI 算法的训练微调和部署推理,微软(Microsoft)、亚马逊(Amazon)、特斯拉(Tesla)等公司早已部署数以万计的 GPU 用于 AI 模型的训练,OpenAI 等公司不断挑战更大规模的分布式模型训练。

英伟达(NVIDIA)、华为(HUAWEI)、英特尔(Intel)、谷歌(谷歌)等公司不断根据 AI 模型特点设计新的 AI 加速器芯片和对应的 AI 加速模块,如张量核 Tensor Core、脉动阵列等提供更大算力 AI 加速器。

上述从顶层的 AI 算法应用、AI 框架(包括训练和推理)到底层 AI 编译器,和对 AI 算法应用进行加速的 AI 芯片。所介绍的 AI 全栈相关内容中则是指 AI 系统(AI System),是围绕深度学习而衍生和设计的系统,因此也叫做深度学习系统(Deep Learning System)

但是 AI 系统很多也可以应用于机器学习算法或使用机器学习算法,例如自动化机器学习、集群管理系统等。同时这些系统设计方法具有一定的通用性,有些继承自机器学习系统或者可以借鉴用于机器学习系统。即使作为系统工程师,也需要密切关注算法和应用的演进,才能紧跟潮流设计出贴合应用实际的工具与系统。

AI 系统设计目标

深度学习系统的设计目标可以总结为以下几个部分。

  1. 高效编程语言、开发框架和工具链 设计更具表达能力和简洁的神经网络计算原语以及高级编程语言。让用户能够提升 AI 应用程序的开发效率,屏蔽底层硬件计算的细节,更灵活的原语支持。当前神经网络模型除了特定领域模型的算子和流程可以复用(如大语言模型 Transformer 架构在自然语言处理 NLP 领域被广泛作为基础结构),其新结构新算子的设计与开发仍遵循试错(Trial And Error)的方式进行。那么如何灵活表达新的计算算子,算子间的组合以及融合形式,屏蔽经典熟知的算子与基础模型,是算法工程师所需要语言、库与 AI 框架层所提供的功能支持。 更直观的编辑、调试和实验工具。让用户可以完整的进行神经网络模型的开发、测试、调整诊断与修复和优化程序,提升所开发 AI 应用程序的性能与鲁棒性。训练过程不是一蹴而就,其中伴随着损失函数 LOSS 曲线不收敛、Loss 值出现 NaN 无效值、内存溢出等算法问题与算法设计缺陷(Bug)。AI 工具链与 AI 系统本身如何在设计之初就考虑到这点,提供良好的可观测性、可调试性、允许用户注册自定义扩展等支持,是需要工具链与 AI 系统的设计者,所需要在 AI 系统的设计之初就需要提上日程的,否则之后更多是缝缝补补造成不好的开发体验与不能满足的需求,对用户来说就像使用一个黑盒且单片的工具。
    持 AI 生命周期中的各个环节:数据处理、模型开发与训练、模型压缩与推理、安全和隐私保护等。不仅能构建 AI 模型,能够支持全生命周期的 AI 程序开发,并在 AI 系统内对全生命周期进行分析与优化。当前的 AI 工程化场景,已经不是灵感一现和单一的优化就能迅速取得领先优势,更多的是能否有完善的 AI 基础设施,快速复现开源社区工作,批量验证新的想法进行试错,所以一套好的完善的全流程的生命周期管理能够大幅度提升 AI 算法层面的生产力。
  2. AI 任务系统级支持 除了对深度学习训练与推理的支持,还能支持强化学习、自动化机器学习等新的训练范式。例如,需要不断和环境或模拟器交互以获取新数据的强化学习方式,批量大规模提交搜索空间的自动化机器学习方式等,这些新的范式造成对之前单一支持单模型之外,在多模型层面,训练与推理任务层面产生了新的系统抽象与资源,作业管理需求。 提供更强大和可扩展的计算能力。让用户的 AI 程序可扩展并部署于可以并行计算的节点或者集群,应对大数据和大模型的挑战。因为当前 AI 模型不断通过大模型,多模态大模型以产生更好的算法效果,促使 AI 系统需要支持更大的模型、更多模态的输入。同时由于企业 IT 基础设施不断完善,能够不断沉淀新的数据,也会伴随着大数据而衍生的问题。大模型与大数据促使存储与计算层面的系统,在摩尔定律失效的大背景下,迫切需要通过并行与分布式计算的方式,扩展算力与存储的支持。 自动编译优化算法。1)对计算图自动推导:尽可能的通过符号执行或即时编译 JIT 技术,获取更多的计算图信息,让 AI 框架或者 AI 编译器自动执行定制化的计算优化。2)根据不同体系结构自动并行化:面对部署场景的多样化体系结构,训练阶段异构硬件的趋势,AI 框架让用户透明的进行任务配置和并行化,以期以最为优化的方式在 AI 集群配置下,并行化、减少 I/O、充分利用通信带宽,逼近硬件提供的极限性能上限。 云原生自动分布式化。自动分布式并行扩展到多个计算节点,面对云与集群场景,自动将 AI 任务扩展与部署,进而支撑分布式计算、弹性计算,让用户按需使用资源,也是云原生背景下,AI 系统所需要考虑和支持的。
  3. 探索并解决新挑战下系统设计、实现和演化 在 AI 系统中会随着 AI 算法的发展,出现了对动态图、动态 Shape 的支持需求,利用网络模型结构的稀疏性进行压缩加速优化,为了提升训练指标 TTA 实现混合精度训练与部署,还有混合训练范式(如强化学习)、多任务(如自动化机器学习)等特性支持。 提供在更大规模的企业级环境的部署需求。如云环境、多租环境的训练部署需求:面对多组织,多研究员和工程师共享集群资源,以及大家迫切使用 GPU 资源的日益增长的需求,如何提供公平、稳定、高效的多租环境也是平台系统需要首先考虑的。 跨平台的推理部署需求。面对割裂的边缘侧硬件与软件栈,如何让模型训练一次,跨平台部署到不同软硬件平台,也是推理场景需要解决的重要问题。 最后是安全与隐私的需求。由于网络模型类似传统程序的功能,接受输入,处理后产生输出,但是相比传统程序,其解释性差,造成更容易产生安全问题,容易被攻击。同时模型本身的重要信息为权重,我们也要注意模型本身的隐私保护。同时如果是企业级环境或公有云环境,会有更高的安全和隐私保护要求。

了解完 AI 系统设计的宏观目标,可以进一步了解,当前在人工智能的大生态环境中 AI 系统的技术栈是如何构成的,整个技术栈中 AI 系统的各处于哪个抽象层次,互相之间的关系是什么。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
【MATLAB 从零到进阶】day5 数据的导入与导出
importdata 从文本文件或特殊格式二进制文件(如图片,avi 视频等)读取数据
Ai学习的老章
2019/04/10
1.6K0
【MATLAB 从零到进阶】day5  数据的导入与导出
matlab导出csv文件多种方法实现
R,C分别表示写入的行数R和列数C,并且左上角被认为是(0,0)csvwrite('1.csv',data)
演化计算与人工智能
2020/08/14
8.5K0
matlab导出csv文件多种方法实现
在线matlab代码学习神器Octave Online
Octave与MATLAB完全兼容,免安装使用方便。注册和非注册功能会有不同,如下:
zhangrelay
2019/01/23
7K0
一起来学matlab-matlab学习笔记5 低级文件输入输出函数
本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一些负面消息对国内各个高校和业界影响很大。但是我们作为技术人员,更是要奋发努力,拼搏上进,学好技术,才能师夷长技以制夷,为中华之崛起而读书!
演化计算与人工智能
2020/08/14
1.7K0
MATLAB中的高维数据操作与异构数据结构管理
在MATLAB中,数据处理是科学计算和工程模拟的核心组成部分。MATLAB提供了强大的数组和数据结构处理能力,尤其适用于高维数据的存储、操作与分析。本篇文章将深入探讨MATLAB中的多维数组和复杂数据结构的处理方法,并通过代码实例展示如何高效地进行相关操作。
一键难忘
2025/02/08
1.3K0
MATLAB-常见命令使用
使用MATLAB的时候有一些系统命令可以方便我们的操作,如在当前的工作区中可以使用系统命令保存为一个文件、加载文件、显示日期、列出目录中的文件和显示当前目录等。
用户9925864
2022/07/27
1.9K0
MATLAB读取图片并转换为二进制数据格式
本文记录使用 MATLAB 读取图片并转换为二进制数据格式的方法,避免后面再做无用功。
Gnep@97
2024/01/10
1.5K0
MATLAB读取图片并转换为二进制数据格式
Matlab系列之文件操作
首先介绍下文件操作的相关概念吧,文件一般指存储在外部介质上的数据的集合,即一般数据是以文件的形式存储在外部介质上,这个介质可以是我们的硬盘也可以是其他的具有存储能力的物体。
狂人V
2020/07/20
2.6K0
matlab读取txt文件数据_matlab怎么输入数据
大家好,又见面了,我是你们的朋友全栈君。 文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。 1、文件的打开与关闭 1)打开文件 在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为: fid=fopen(文件名,‘打开方式’) 说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:  ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。  ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。  ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。  ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。  ‘a’:在打开的文件末端添加数据。文件不存在则创建。  ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。 另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。 2)关闭文件 文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为: sta=fclose(fid) 说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。 2、二进制文件的读写操作 1)写二进制文件 fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite(fid,A,precision) 说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。 例6.8 将一个二进制矩阵存入磁盘文件中。 >> a=[1 2 3 4 5 6 7 8 9]; >> fid=fopen(‘d:\test.bin’,’wb’) %以二进制数据写入方式打开文件 fid = 3 %其值大于0,表示打开成功 >> fwrite(fid,a,’double’) ans = 9 %表示写入了9个数据 >> fclose(fid) ans = 0 %表示关闭成功 2)读二进制文件 fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为: [A,COUNT]=fread(fid,size,precision) 说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。 3、文本文件的读写操作 1)读文本文件 fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为: [A,COUNT]=fscanf(fid,format,size) 说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。 2)写文本文件 fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为: fprintf(fid,format,A) 说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。 例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。 >> a=’string’; >> fid=fopen(‘d:\char1.txt’,’w’); >> fprintf(fid,’%s’,a); >> fclose(fid); >> fid1=fopen(‘d:\char1.txt’,’rt’); >> fid1=fopen(‘d:\c
全栈程序员站长
2022/10/04
1.9K0
MATLAB仿真总结
工作区存在的变量可能会对脚本运行产生影响,故代码(脚本)开头需要添加如下命令
sea-wind
2019/09/11
1K0
matlab—特殊变量类型与档案存取
这里举个例子,有一个学生structure,包含姓名、邮箱、学号、成绩,应该如何创建这个structure
mathor
2018/07/24
1.1K0
matlab—特殊变量类型与档案存取
Matlab中读取txt文件的几种方法[通俗易懂]
2、importdata——只读取数据,自动省略数据格式前后的字符,超大文件不适合;
全栈程序员站长
2022/10/03
21.6K0
matlab
对于一些nc数据或者遥感影像处理时,虽然一些第三方软件可以出图,但我们往往需要借助python或者matlab软件进行数据处理,但最后保存下来数据如何导入arcgis进行分析呢?
用户6841540
2024/08/05
8410
Matlab数据导入--importdata和load函数
在使用matlab将数据导入到工作空间的时候,经常会使用到两个函数,一个是importdata函数,另一个是load函数,它们的使用方法和使用场景是太相同的,如果不太注意就可能会犯错误,在这里做简要的说明和记录。
用户9925864
2022/07/27
1.2K0
Matlab数据导入--importdata和load函数
matlab 函数,matlab 语法1
如:输入:f = fullfile(‘C:’,’Applications’,’matlab’,’fun.m’) 得到:f =C:\Applications\matlab\fun.m
zhangjiqun
2024/12/17
5390
matlab 函数,matlab 语法1
matlab输出语句fprintf例子_matlab中compose函数
golang需要的基础是:首先初学Go语言要弄懂基础语法和概念;然后掌握文件操作、网络编程、锁、协程、对象序列化和反序列化,以及各种数据格式的封装等;最后接触数据库等,就可以模块化开发。
全栈程序员站长
2022/09/28
2.1K0
matlab输出语句fprintf例子_matlab中compose函数
Matlab文本操作
fid=fopen(’filename’,’permission’)或者fid=fopen(’filename’)
根究FPGA
2020/06/29
9300
matlab怎么fprintf,matlab中的fprintf函数怎么用「建议收藏」
matlab中的fprintf函数怎么用?针对这个问题,今天小编总结了这篇文章,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。
全栈程序员站长
2022/09/27
2.6K0
关于MATLAB读取txt文件的方法[通俗易懂]
一、如何读取一个文档下,多个txt文件? 一般读取的文件,命名都具有一定的规律,除去相同部分,剩下的变化按照时间、序号、某一特定的标志符等进行排列。 下面我们举个例子来操作。
全栈程序员站长
2022/10/04
2.2K0
Matlab 读写文件
一、读取文本文件 思路: 1、用fopen来打开一个文件句柄 2、用fgetl来获得文件中的一行,如果文件已经结束,fgetl会返回-1 3、用fclose来关闭文件句柄
week
2018/08/24
6060
推荐阅读
相关推荐
【MATLAB 从零到进阶】day5 数据的导入与导出
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档