AI系统的知识体系要系统的掌握,就需要了解其软硬件相关的全栈架构。对整体的技术有一个把握之后,面对陌生的东西就可以去栈里面找属于那一部分,会更加快速清楚的帮助学习。不能只见树木不见树林,一叶障目就不太好了。
本小节就从系统架构的角度来整体看下AI系统都有什么,还是老一套,主要参考ZOMI酱的:chenzomi12.github.io/01Introduct…
1. AI系统架构
如上图中所示,主要分为5部分,可能每一部分都对应很多工种,整个系统的实现一般的大公司都不一定能cover住,特别是AI硬件和编译器,极其的烧钱,甚至上市公司才可以涉足,但是要想把一个AI做好,在某个特点的商业领域例如自动驾驶、智能推荐、具身智能等,这些技术栈就需要全部去渗透,进行定制,合力才能拥有最大的竞争力。
1.1 技术栈介绍
1.1.1 应用算法
算法应用在之前的文章XXX中有介绍。
负责提供用户前端的 AI 编程语言,接口和工具链。这一层尽可能让用户表达目标任务与 AI 算法,尽量少让用户关注底层实现。主要包括:
- 网络模型构建:卷积神经网络 CNN、循环神经网络 RNN、Transformer 结构等,包括 if else 控制流等基本结构和算子支持与实现的 API。语言的基本语法和框架的 API 接口提供基本算子的支持。当前主要以使用 Python 语言内嵌调用 AI 开发框架的方式进行网络模型的开发,但是也出现控制流在原生语言层与模型中间表达割裂等问题。
- 模型算法实现:算法一般被封装为 AI 开发框架的配置或 API 供用户选择,有些 AI 开发框架也提供拦截接口给用户一定程度灵活性定制自定义算法。模型算法实现与网络模型结构构件还是有着明显的区别,例如网络模型构建只提供模型层面的构建,但是 AI 的算法实现流程如到底是训练还是推理,是实现强化学习、监督学习还是无监督学习等,属于模型算法的实现过程,只是其中内部的算法模型结构的构建属于网络模型部分。
- 流水线和工作流支持:流水线和工作流是实现模块解耦复用,可视化编程的前提,通过复用与可视化编程可以大幅降低组织内作业书写的门槛,如高性能数据加载器等。
- 工具链: 如模型在不同硬件的迁移、在不同框架的迁移、模型转换、调试、可视化、类型系统等。就像传统的软件工程中调试器,可视化,类型系统等工具链的支撑,让整个开发过程中,跨平台,跨平台,问题诊断,缺陷验证等得以高效实现,目前 AI 系统领域也不断有类似工具产生,以支持整个 AI 工程化实践。
- 生命周期管理:数据读取,训练与推理等流程开发与管理。机器学习领域的 DevOps 也就是 MLOps 的基础工具支持。其可以让重复模块被复用,同时让底层工具有精确的信息进行模块间的调度与多任务的优化,同时让各个环节模块化解耦,独立和更为快速的演进。
1.1.2 AI框架开发体系
开发体系,这里主要是说怎么编程实现算法,开发者一般通过编程语言 Python 和 AI 开发框架(例如 PyTorch、MindSpore 等)API 编码和描述以上 AI 模型,声明训练作业和部署模型流程。
另外编程来说有很多固定的代码,就是算法库来方便调用就不用都自己写,也是一种复用和抽象。目前开源社区中也不断涌现针对特定应用领域而设计的框架和工具,例如 Hugging Face 提供语言预训练模型 ModelZoo 和社区,FairSeq 自然语言处理中的序列到序列模型开发套件和MMDetection 物体检测套件,针对自动化机器学习设计的 NNI 加速库等,进而针对特定领域模型应用负载进行定制化设计和性能优化,并提供更简化的接口和应用体验。如 Meta 推出的 Caffe 与 Torch 演化到 PyTorch,谷歌 TensorFlow 及新推出的 JAX,基于 PyTorch 构建的 HuggingFace 等。AI 开发工具与 AI 开发框架本身也是随着用户的模型构建与程序编写与部署需求不断演进。
人工智能的代表性开发框架 PyTorch 是 Meta 开发,后续贡献给 Linux 开源基金会;TensorFlow 是谷歌(谷歌)从 2016 年开源;华为(HUAWEI)为了避免美国全面封锁 AI 领域推出自研的 AI 框架 MindSpore。
1.1.3 AI框架层
开发体系不仅仅是指如 PyTorch 等训练框架,还包括推理框架。负责静态程序分析与计算图构建,编译优化等工作。AI 框架本身通过提供供用户编程的 API 获取用户表达的模型,数据读取等意图,在静态程序分析阶段完成尽可能的自动前向计算图构建,自动求导补全反向传播计算图,计算图整体编译优化,算子内循环编译优化等。主要如下:
- 计算图构建:静态计算图、动态计算图构建等。不同的 AI 框架类型决定了其使用静态还是动态图进行构建,静态图有利于获取更多信息做全图优化,动态图有利于调试,目前实际处于一个融合的状态,如 PyTorch2.X 版本后推出 Dynamo 特性支持原生静态图。
- 自动求导:高效地对网络模型自动求导等。由于网络模型中大部分算子较为通用,AI 框架提前封装好算子的自动求导函数,待用户触发训练过程自动透明的进行全模型的自动求导,以支持梯度下降等训练算法需要的权重梯度数据的获取。
- 中间表达构建:多层次中间表达等。通过构建网络模型的中间表达及多层中间表达,让模型本身可以更好的被下层 AI 编译器编译生成高效的后端代码。
1.1.4 编译与运行时
负责 AI 模型在真正运行前的编译和系统运行时的动态调度与优化。当获取的网络模型计算图部署于单卡、多卡甚至是分布式 AI 集群的环境,运行期的框架需要对整体的计算图按照执行顺序调度算子与任务的执行、多路复用资源,做好内存等资源的分配与释放。包括并不限于以下部分:
- 编译优化:如算子融合等。编译器根据算子的语义或者 IR 定义,对适合进行算子融合(多个算子和并为一个算子)的算子进行合并,降低内核启动与访存代价。同时 AI 编译器还支持循环优化等类似传统编译器的优化策略和面向深度学习的优化策略(如牺牲一定精度的计算图等价代换等)。
- 优化器:运行时即时(Just-in-Time)优化,内省(Introspective)优化等。运行时根据硬件,隐藏的软件栈信息,数据分布等只能运行时所获取的信息,进一步对模型进行优化。
- 调度与执行:调度优算子并行与调度,执行有单线程和多线程执行等。调度方面根据设备提供的软件栈和硬件调度策略,以及模型的算子间并行机会,进行类装箱的并行调度。另外再算子执行过程中,如果特定设备没有做过多的运行时调度与干预,框架可以设计高效的运行时算子内的线程调度策略。
- 硬件接口抽象:GPU、NPU、TPU、CPU、FPGA 和 ASIC 等硬件的接口抽象。统一的硬件接口抽象可以复用编译优化策略,让优化方案与具体底层的 AI 硬件设备和 AI 体系结构适当解耦。
1.1.5 硬件体系结构与AI芯片
硬件厂商围绕其设计了大量的专有 AI 芯片(如 GPU、TPU、NPU 等)来加速 AI 算法的训练微调和部署推理,微软(Microsoft)、亚马逊(Amazon)、特斯拉(Tesla)等公司早已部署数以万计的 GPU 用于 AI 模型的训练,OpenAI 等公司不断挑战更大规模的分布式模型训练。
英伟达(NVIDIA)、华为(HUAWEI)、英特尔(Intel)、谷歌(谷歌)等公司不断根据 AI 模型特点设计新的 AI 加速器芯片和对应的 AI 加速模块,如张量核 Tensor Core、脉动阵列等提供更大算力 AI 加速器。
硬件体系结构与AI芯片负责程序的真正执行、互联与加速。在更广的层面,作业与作业间需要平台提供调度,运行期资源分配与环境隔离。主要包括:
- 资源池化管理与调度:异构资源集群管理等。将服务器资源池化,通过高效的调度器结合深度学习作业特点和异构硬件拓扑进行高效调度,这方面在对于云资源管理和云化较为重要。
- 可扩展的网络栈:RDMA,InifiBand,NVLink 等。提供更高效的加速器到加速器的互联(例如 NVLink、NVSwitch 等)提供更高的网络带宽,更灵活的通信原语与高效的通信聚合算法(例如 AllReduce 算法)。
1.2 AI部署
传统本地部署时代,三大基础软件(数据库、操作系统、中间件)实现控制硬件交互、存储管理数据、网络通信调度等共性功能,抽象并隔绝底层硬件系统的复杂性,让上层应用开发者能够专注于业务逻辑和应用功能本身的创新实现。
云时代同理,形成了 IaaS、PaaS、SaaS 三层架构,其中 PaaS 层提供应用开发环境和基础的数据分析管理服务。类比来看,我们认为,进入 AI 时代也有承担类似功能的、连接算力和应用的基础设施中间层即 AI 系统,提供基础模型服务、赋能模型微调和应用开发。
2. AI三大基石的发展
AI系统的发展需要依托一些关键性的技术,这些技术需要综合起来进行实现,其实主要的技术方向还是AI=数据+算法+算力,这里再次进行介绍。
这里想到以前打Dota游戏时的英雄分为三类:力量型(数据强)、敏捷型(算力高)、智力型(算法强),正好跟AI=数据+算法+算力的三个方面对上了。游戏里面操控的也是虚拟的人去战斗,这个角度看也是在造人。
现在的王者荣耀也是这么分类,只是叫法更加的职业化,一共6种:
- 法师(智力-算法强)
- 射手(敏捷-算力高)
- 坦克(力量-数据)
- 战士(全能偏坦克-力量)
- 刺客(全能偏射手-敏捷)
- 辅助(全能偏法师-智力) 可以看到6种只是原来三种的衍生,就像周易从2衍生出无数种变化一样。我们在应用的时候就需要对其进行排列组合以及协调融合,从而造出来属于特定领域的AI,微调的时候可能就另外新造了一个“英雄”。
2.1 敏捷型算力进化
- 深度学习任务运行和优化环境:提供更高的运行时性能,资源隔离与调度。当深度学习作业启动,深度学习框架或运行时提供更好的算子与任务调度,内存管理,I/O 管理,甚至未来随着作业愈发复杂,提供作业的多路复用(Multiplexing)等支持,打破设备商运行时库封装的局限性。
- 通用资源管理和调度系统:提供更公平,高效率和稳定的平台支持。性能并不是系统设计本身的唯一考虑因素,在多租环境,还要兼顾公平,效率和稳定性,为用户提供更加可靠好用的平台。
- 新型硬件及相关高性能网络和计算栈:随着加速器技术不断发展,网络互连技术提供更高的带宽,硬件层提供更高的算力与带宽支持模型训练与推理。系统需要更加灵活的支持在不同的硬件和规格假设下,不同作业如何静态与动态结合的自动优化与高性能执行。同时由于硬件的发展趋势不同,潜在可能会让性能瓶颈产生变化,系统设计较早判断并对应设计会产生新的系统设计机会。
2.2 智力型算法进化
- 广泛用途的高效新型通用 AI 算法:提供更多样的模型支持,推进和支持模型效果的提升。支持新的算子(例如,控制流等),更加灵活的模型结构(例如,图模型等),模型的融合(例如,多专家系统等)支持。
- 多种深度学习框架的支持与进化:由于多种框架与工具的存在,如何为用户提供更多样的框架的统一支持与优化对提升用户体验,复用已有代码有很强的实用价值。
- 神经网络编译架构及优化:在编译期,通过静态分析与优化的方法,提供更优化的编译支持,提升模型的性能,正确性等。类似传统编译器,网络模型的计算图可以通过融合等手段优化,算子内可以应用大量循环优化。同时面向网络模型本身的特点,也逐渐有工作利用一些等价和非等价计算图转换进行优化。
2.3 力量型数据进化
- 机器学习新模式(如强化学习) :提供新训练范式的灵活执行,部署与同步支持等。由于训练数据可能需要以与环境交互的过程中才能获取,造成需要通过强化学习等新的训练范式进行模型训练,需要设计新的系统以支持灵活的训练范式。
- 自动机器学习(如自动化机器学习) :当用户想试错(Trial And Error)的搜索空间达到一定量级,用户通过自动化机器学习工具与算法可以更高效的进行模型的探索与训练。自动化机器学习系统可以提供多任务的高效管理与调度支持,支持搜索空间定义的程序语言等。
- 安全(Security)与隐私(Privacy) :数据与模型,类似传统的信息安全要保护的数据与程序,除了数据本身,模型类似传统程序本身的安全与隐私问题提出了新的挑战。我们需要思考人工智能模型与应用的安全与隐私保护支持。
- 模型推理、压缩与优化:如果不需要训练,只需要执行前向传播过程,则是用户开始使用模型进行推理,基于深度学习特有性质进行高效的模型部署推理是除训练外很重要的系统问题。模型推理相比训练有更低的延迟要求,更严苛的资源供给,不需要求解梯度和训练,有更低的精度要求等,如何设计面向推理的系统提出了新的机会。同时网络模型本身可以通过模型压缩,量化等手段精简计算量与内存消耗,加速模型的部署。
后记:
栈最早用在软件数据结构里面先进后出,就像一个杯子里面放东西,先拿上面的,最广的应用就是函数递归和数学符合运算的处理。后来广泛用于通信协议栈,注意这时就跟先进后出没什么关系了,直观的去看栈就是把东西都摞到一块放好,就想把所有的东西都装入箱子,是一个全量的东西。再之后这个栈的词就被用坏了,像全栈工程师,就是说的软件技术栈,这里我们说的AI系统技术栈,更是扩大到了所有的软硬件技术。估计这个计算机名词感觉马上就会被玩坏了,要普及各行各业。因为领导们都喜欢听大而全的汇报,不懂技术栈,领导听汇报也不知道你讲的是什么。