人工智能应用程序的表示、组编与执行的方法和系统
文献发布时间:2024-07-23 01:35:21
优先权要求
本申请要求于2020年10月4日递交的美国临时专利申请号第63/251,698,题目为“Methods and Systems for Representation,Composition and Execution ofArtificial Intelligence Centric Applications”的优先权,其全部内容在此通过引用并入本文。
背景技术
深度学习算法的进步、计算能力的提高,以及互联网上数据量的增长,正在开启人工智能(AI)技术的新时代。在过去的十年中,AI在科学领域的长期挑战中带来了重大突破,包括计算机视觉、语言处理和生物学。现在,AI即将在未来几十年内转变商业、科学和日常生活的所有方面。
AI的影响通过以其算法驱动的应用程序和实时系统通过与用户或环境互动的形式得以实现。然而,AI研究和开发的重点长期以来集中在机器学习算法,包括深度学习算法。如何开发、操作和管理作为实时系统的AI应用,还没有很好解决,给AI转型带来了挑战,也只是最近几年才成为AI研究的新前沿题目。
事实上,AI技术标志着计算和应用程序开发方式的范式转变:应用逻辑是通过机器学习算法从数据中学习,而不是由人类开发者定义的。这对大多数组织来说都是不熟悉的。
当今应用程序构建的大部分技术以机器学习框架的形式存在,例如Tensorflow和Pytorch。虽然这些框架是AI中心应用的核心,但它们只代表了一个更大、更复杂的技术堆栈的一小部分。
AI应用的基础是数据。虽然今天的机器学习算法在从数据中提取信息方面非常有效,但它们在整个过程中依赖于人类的帮助:寻找合适的算法,识别并准备并以正确的形式呈现数据,构建、操作化和管理应用程序。
每个应用程序可能涉及不同且不断变化的组件堆栈。构建应用程序需要识别和组装组件,识别和处理正确的数据,以及编写和执行应用逻辑,并在正确的硬件计算环境中部署和操作。它涉及许多步骤和不同任务的复杂过程,并且对拥有最新且深入了解各种堆栈的稀缺技术技能集有高额要求。往往只有非常大且资源充足的组织才能负担得起。
成功的AI中心应用项目需要不同专业领域的团队之间的合作,如领域专家、企业架构师、数据工程师、数据科学家、软件工程师、DevOps和IT运营。这些角色需要共同合作,以理解领域,设计应用程序,识别数据并使用技术堆栈完成各种任务。此外,技术堆栈、新算法和框架正在快速出现和演化,要求应用程序开发者快速保持最新状态。
在人工智能领域,组织机构面临着人才短缺的挑战,并且难以让团队协作高效地开发以人工智能为中心的应用程序。只有极少数的组织能够掌握相关的复杂性,拥有必要的人才资源储备,并成功将人工智能产品投入运营。根据Gartner的研究,大多数组织都无法将人工智能项目从试点阶段推进到生产阶段。
而且,拥有这样的团队和角色的组织面临如何有效合作的挑战。
当前,组织在应对这些挑战时采用的是一种临时性的方法。人工智能应用程序是通过聘请各个角色的团队进行定制构建,这些角色负责设计架构、选择技术栈(包括数据、机器学习和其他组件),并单独集成组件。尽管自动机器学习在建模训练步骤方面取得了巨大进展,但它只能部分地帮助机器学习步骤,更大的挑战仍然存在。一种实现更可重用架构的方法是为垂直行业预定义数据模型和模型驱动架构的固定应用程序框架,但这种方法难以推广,也难以适应和重用。像Kubeflow这样的项目也主要针对机器学习步骤,并且仅适用于技术含量很高的用户。
这些方法对领域和技术技能的要求很高,生产力低,开发和上市时间慢。它们还导致了定制化且脆弱的架构,这种架构不可重用,且难以适应用案例的演化,添加新用例,处理新增计算组件的添加,以及更改底层计算框架和计算IT架构。更新底层技术堆栈通常意味着业务流程逻辑的重新设计,以及运营成本的增加。
大型云供应商提供的产品和服务通过硬编码工程自动化部分流程来缓解一些痛点,如低代码/无代码提议,但它们只适用于固定组件,并未提供原则性和系统性的解决方案。
发明内容
目前迫切需要系统地构建、操作和管理以人工智能为驱动的应用程序的方法和系统,并解决与技术堆栈相关的复杂性,赋能更广泛的商业、领域专家、开发、机器学习专家、企业架构师和IT运维人员社区,并使他们能够贡献其技能并协作开展项目,而无需额外培训。
需要利用当前的云计算和计算架构来支持计算组件和应用程序的高性能。此外,还需要适应性和可配置的架构来预测新的用例、新算法和其他计算组件的常规添加,以及轻松快速地响应底层技术的变化。
人工智能应用程序是数据驱动的。它通常涉及大量和复杂的不同类型数据。捕获、注释和处理数据又需要使用大量通用和特定于业务领域的计算组件来发现、探索、分析、转换、管理、传输和治理数据资源。具体例子包括通用数据处理堆栈(例如图像处理、语言处理、统计处理等)、特定于领域的处理堆栈(例如基因组学、多组学、医疗保健)以及用于部署、管理、监控各种设备中的模型。其他例子包括特定于业务领域的工程逻辑、传感器和其他数据生成组件、领域流程等。
机器学习,尤其是深度学习,都是数据和计算密集型的,新的算法框架通常用于探索计算架构,例如GPU、TPU、FPGA和ASIC,以帮助加速训练和推理计算。已经开发了许多行业级深度学习框架。许多其他用于数据处理的框架,包括R和分析,都不是为了探索现代计算架构而构建的,例如包括云环境中的分布式计算和GPU/TPU,但这样做有强烈需求。
总而言之,本发明的一个创新优势方面包括用于系统地构建、操作和管理以人工智能为中心的应用程序作为实时系统的方法。涉及计算组件的任何处理逻辑,例如机器学习框架PyTorch和数据处理框架Spark,都可以通过遵循通用模型进行模块化以成为可重复使用的处理器(即模型中的Processor);任何数量这样的处理器都可以按照通用图形模型组装在一起来表示应用程序,并精细控制其行为。这种能力类似于使用标准乐高组件制作玩具,并且赋予人工智能应用程序构建类似于汽车行业的流水产品线那样的能力。一般来说,这个说明书的优势之一是以系统的方法构建、操作和管理作为实时系统的以AI应用程序。任何涉及计算组件的处理逻辑,如机器学习框架Pytorch和数据处理框架如Spark,都可以通过遵循一个通用模型来模块化,成为一个可重用的处理器;任何数量的这样的处理器都可以通过遵循一个通用图模型组装在一起来表示应用程序,并且细微地控制其行为。
具体而言,任何计算组件和数据源都使用处理器模型统一表示,该模型提供了一种模块化且细粒度的表示和调用底层组件提供的函数逻辑的方法。图模型由作为有向图连接的处理器组成,代表应用程序,其行为由配置参数精细控制。执行引擎提供运行时的环境及各种执行模式(包括批处理、流和工作流)的流程图执行过程,从而提供定制和优化运行时性能的方法。它们共同为开发和操作涉及异构计算组件和数据源的人工智能应用程序提供了一种新的标准编程模型和处理模型。这种模型特别适用于数据驱动的AI应用程序。该模型具有表达性:它是图灵完备的。
本说明描述的主题内容的一个方面可以体现为一个计算系统(完整系统),该系统可以配置、编程和操作以满足各种领域应用需求,并提供构成各种计算和网络环境中的实时AI应用程序的完整技术堆栈,包括独立设备、公共云、私有云、本地、边缘或它们的混合体。
这种方法的一个优点是它简化了人工智能应用程序的开发和使用生命周期。一旦处理器到位,就可以在许多不同的应用程序和环境中重复使用和配置,并且使用起来只需要最少的技能和培训。另一个优点是通用性,因为相同的构造适用于任何计算和数据资源。处理器和图形可以理解并用于任何领域,为具有不同技能组合的团队提供一种有效的语言,让他们在同一个项目上进行协作。适应资源到处理器的方法是创新的一部分,因此适应业务需求和技术变化也是这种方法的一个固有特征。其他优势将在随后的描述中变得清晰。
该系统提供可与来自各种来源的其他组件交互的底层架构。因此,处理器和图提供了在定制技术栈之上构建应用程序的标准方法。组件可以包含任何开发工具、机器学习库、数据处理库和系统、领域特定应用程序系统、软件包、Web服务等。完整技术栈,包括硬件子系统,被组织成层级架构,提供用于管理行为的配置点。
该模型还包括一种标准方式来描述和捕获任何类型和位置的底层数据源,以元数据的形式捕获参与处理的数据。除了作为自动化应用图执行逻辑的手段外,该表示还能够实现数据内容的发现和协作。
更具体地说,一个AI应用程序涉及将应用程序可以表达为包含处理器、连接器和配置的图,这些配置可以用来声明式地指定分层架构的所有方面:处理器运行时行为、输入和输出数据、硬件架构和存储、任何粒度的资源需求,从而提供一种简单而通用的语言来编程和操作应用程序。
人工智能应用程序的编程过程可以分为两部分:编程和处理。编程部分涉及从库中选择和添加处理器,然后将它们连接在一起并配置图。处理器可以执行各种任务,例如数据处理、机器学习等。连接器定义了处理器之间的数据流。配置图允许您指定处理器的运行时行为、输入和输出数据、硬件架构和存储、以及任何粒度的资源需求。处理部分涉及使用各种类型的图执行引擎执行图。这些引擎的结构和操作也属于本披露的一部分。应用程序可以以各种模式执行,例如批处理、流处理、批处理和流处理混合,以及其他数据处理模式。此外,还可以进行并行和分布式处理控制。
该方法的另一个创新之处在于一种配置处理器和图的标准方法,并依其精细控制整个架构层中各个级别的应用程序行为。这些级别包括:组件选择、组件运行时参数控制、处理条件、数据输入和输出规范、计算资源使用情况以及计算架构选择(例如,分布式、GPU/CPU)。除了以云无关的方式支持动态组件部署之外,它还提供了配置和优化计算、资源使用和应用程序运行时性能的标准方法。更改和添加计算组件以及添加新的用例是系统允许的内置功能的一部分。
上述所有元素共同提供了一个标准的编程和处理模型,该模型能够通用表示任何处理组件,并允许将组件组合成应用程序,并在生产环境中执行应用程序。模块化和易用性使不同角色的用户能够以统一的方式与计算系统进行交互,并且更重要的是,它为所有角色提供了一种简单、表达力强且通用的语言标准,使其能够有效地协作。
本发明主题的另一个创新方面在于图形和编程用户界面,它们提供了标准方法来从任何地方组合、操作和管理应用程序。这些界面位于编程和处理模型之上,并且通过分布式架构,可以简单轻松地使用相同的用户界面协作开发、操作和管理应用程序。图形用户界面提供拖放功能,用于可视化地组合应用程序管道,以及配置、测试、执行和监视应用程序,并通过远程客户端设备使用网络浏览器与他人共享。系统和方法的实施使整个团队能够执行自己的任务,发布和共享他们的工作,所有这些都使用直观的界面,大大减少了培训需求。统一模型与图形用户界面一起允许低代码甚至无代码编程,降低了技能要求,使更庞大的用户群体能够参与到这个过程中(实现人工智能的民主化)。
另一个创新之处在于执行应用程序处理器和图的方法和系统。除了允许使用不同的引擎和模式执行图之外,它还提供了条件执行的方法,以及向应用程序和底层组件添加并行和分布式处理能力的手段。
本发明的另一个创新之处在于用于任何组件之间进行通用数据通信和共享的方法,以满足这些组件的各种性能需求。一种标准的数据内容对象模型囊括了所有类型和来源的数据资源,允许所有计算处理器和底层组件使用通用方法访问和操作基础数据,并进行处理的输入和输出通信,以及处理所有类型存储介质、共享内存、网络或存储类别中的数据。
另一个创新之处在于通过现有组件在各种计算环境中的并行和分布式处理实现高性能计算的方法。并行化的一个方面是专用处理器,与计算组件相关联,以支持各种用于并行和分布式处理的硬件计算架构,例如深度学习中使用GPU/TPU和分布式处理器的PyTorch和TensorFlow;另一个方面包括利用图表示和特殊处理器(例如MapReduce)来添加组件级别的并行化,使现有组件能够进行并行和分布式处理,从而利用计算和数据架构,提供数据、任务和流水线并行化,以便使用底层组件进行处理。因此,除了并行化和组件级别之外,还增加了一层性能提升。
创新的另一个方面包括方法,自动跟踪和记录处理中使用的所有数据的谱系,提供新鲜数据以实现可重复性、下游过程通信、快速调试和治理。
其他创新之处在于用于在计算基础架构中独立部署计算组件的方法,从而在公共云、混合云、内部部署、边缘计算和其他环境中提供一致的用户和应用程序开发体验。
作为一个示例实施例,该计算系统和方法可以部署在云端、本地或混合环境中。一组配备GPU和高性能CPU的计算节点可以形成集群,用于托管数据感知计算组件,例如用于数据和机器学习处理的计算组件运行时的GPU和CPU;另一组节点可以形成集群,用于支持托管图执行引擎和处理器执行器运行时。开发和运维团队可以使用用户端设备(包括台式电脑/笔记本电脑和移动设备)上的网络浏览器与编程和编排节点进行交互。最终用户或应用程序可以与建模服务运行时节点进行交互,这些节点位于计算系统之外的设备上,例如移动电话、台式电脑和位于不同云端的服务器。
另一个示例实施例可以将部分模型运行时节点替换为边缘设备,从而允许运行时模型在边缘设备上运行,而建模和其他数据和计算密集型操作在云中运行。
上述摘要仅供示例,并非旨在任何方面进行限制。除上述说明性的方面、实施例和特征之外,还可以通过参考以下附图和详细描述来了解进一步的方面、实施例和特征。
这些和其他方面、特征和各种组合可以表达为方法、装置、系统、执行功能的手段、程序产品等。
本发明其他特征和优点将从附图、后续描述和权利要求书中变得清晰。
附图说明
图1是计算系统和环境的框图。
图1A展示了云上和本地部署的分布式架构
图1B描述了边缘计算和边缘云的实施例。
图2是应用程序表示图模型。
图3是图流表示和组合设计框图。
图3A是嵌套组合设计框图。
图4描述了图数据集及其用法。
图4A是图数据集模型。
图5是处理器、驱动程序API设计和组件的框图。
图6展示了图形用户界面和可视化编程设计。
图6A是图编程/组合过程。
图6B描述了用户界面通信。
图7是图执行引擎的框图。
图8展示了图执行和编排过程。
图8A是处理器执行处理流程。
图9描述了架构层和配置。
具体实施方式
参考图1,本发明提供了一个计算系统01及其环境,用于表示、构建和执行以人工智能为中心的应用程序,这些应用程序涉及来自异构源的组件05,包括运行在网络连接环境中的库或外部服务。计算环境08可以包括台式机、本地部署的计算和数据中心、公共云、边缘云,包括移动电话、智能设备、传感器和其他联网设备。
该平台的优势包括一种将任何组件系统地转换为称为处理器的模块化构建块的方法,以及基于图的模型来表示、编程、管理、部署和执行应用程序(以云无关的方式),从而解决主要挑战并带来大量好处。与以往仅关注数据和机器学习处理的单个子系统不同,该说明书将视角从单个子系统转移到应用程序层面,将整个云视为操作系统,将各种现有组件视为子程序或库,并探索云(包括边缘云)计算架构的所有层,以实现高效的应用程序构建和执行。
它提供了一个环境和系统方法来解决关键问题,例如如何将各种组件模块化,如何使用基于图的模型将模块组装在一起,如何在模块之间高效地通信数据和命令,如何编程需要最低技能集要求(例如拖放)和无/低代码的应用程序,以及编排执行,从而启用新的并行和分布式处理层。此外,该平台提供了一种内置解决方案,可以解决由人工智能中心应用程序带来的新问题——可重复性和可信赖性问题。
该系统从头开始设计,旨在将领域知识编码并利用该知识驱动编程和执行,帮助解决人工智能应用程序开发中与范式转变相关的一个主要瓶颈,即从传统的人工逻辑规范转变为使用机器学习算法进行数据驱动逻辑提取。领域专家和应用开发人员之间的差距被认为是人工智能应用的主要挑战之一,而技术栈的复杂性则是另一个挑战。
该系统包含一个处理器库的概念,该库跟踪各种版本的现有组件并从不同角度呈现这些组件。例如,通过算法视图的功能视角,它隐藏了实现细节的复杂性,从而允许对软件开发知之甚少的模型者使用处理器。
该设计允许从模块库中动态创建用于定制应用程序的技术栈,从而解决技术栈复杂性的问题。随着应用程序被编码为存储在仓库中的声明文本的图,以及将组件转变为模块,它解决了如何从实验转移到生产的关键问题。任何实验模块插入作为处理器后,就成为平台的一部分,可以用拖放式用户界面进行编程,与其他处理器通信数据,同时利用平台提供的并行化和分布式处理的加速。
该系统包括一个新的执行引擎,可以在分布式环境中跨组件边界执行和操作处理流程。它保存执行状态和事件,并同时支持批处理和流处理。结合图形模型,它形成了一个强大的新型计算系统,能够处理各种粒度的的数据。平台引入了一个图形数据集(称为Graph DataSet)的概念,它为所有类型的数据内容提供了一个统一的接口,解决了一个未解决的问题,并通过网络上所有类型的持久化存储和内存介质以及透明的转换,实现统一和高效的数据通信。规格说明的其余部分将更详细地解释这些优势。
该系统图模型和执行引擎支持谱系跟踪和检索,并解决了与人工智能应用相关的新问题:可重复性和可信赖性。此外,配置和跟踪数据可以实现自动计算资源分配和优化的方法。
综上所述,技术优势转化为商业利益包括解决技术堆栈的复杂性、商业领域到开发的知识差距、人才差距、实验到生产的转换,从而在构建和操作应用程序时降低成本,减少所需知识,并帮助解决AI系统中的可重现性新问题。
现代人工智能中心应用程序以数据为驱动,涉及机器学习、复杂数据处理系统以及用于管理、摄取、转换和处理各类格式的海量数据的各种软件包。它们还要求探索存储、数据通信,并利用分布式和并行计算架构。在本说明书中,所有用于处理的软件,包括库、算法框架和可能实现这些组件的服务,都抽象为图1中的组件5。一些示例包括用于数据摄取的各种计算语言库、机器学习算法框架(例如Tensorflow、Pytorch),以及公共云中用于分类、对象检测、语言处理、翻译、文本分析等方面的各种计算机视觉和语言Web服务。系统示例包括Apache nifi、Apache Spark、R和Hadoop等(仅举几例)。
应用程序可以使用图模型02作为应用图03表示,其中组件05作为处理器存储在处理器库011B中。应用程序可以使用编程模块图组合器04进行编程,该组合器生成并存储图表示。处理引擎检索表示并将其翻译成可执行代码,然后使用计算系统节点集群010执行,该节点集群可能包括一组计算节点011,每个节点运行一个或多个处理引擎,这些引擎在本地或计算系统的一个或多个单独节点上托管组件05,或进一步将处理代码翻译成命令,并在不同的环境中执行命令,如通过云中的Web服务,作为07中的远程服务的边缘云。计算节点011可能是虚拟机、物理设备(如服务器、桌面或其他计算设备),以及Docker容器或Kubernetes集群的Pods。
执行元素可能包括不同类型的执行引擎和服务,这些服务创建和管理图,存储和检索应用图,并使用执行的组件实现和执行图。计算节点可能包括存储设备013、内存012和处理单元,如CPU、GPU/fGPA、ASICs等。存储设备013和内存012可能物理附加到计算节点上,或在分离但可访问的计算机网络中。
图模型02提供了构造和一个简单的语言,涉及少数元素,用于组件05或远程资源07的统一表示和接口,这些资源可能是实现组件05的服务,各种类型的数据集,如图像、文本、结构化数据和非结构化数据,这些数据集作为数据库系统、文件系统、内存或网络存储设备可访问;资源7也可以是通过端点访问的任何Web服务。
组件05可能是包括数据处理系统(如Apache Spark、Apache Nifi)或机器学习系统(如Tensorflow、Pytorch等)的通用软件库,以及任何处理数据的函数。它也可以是实现这些组件或可能将数据作为输入并以数据项响应的其他应用服务的Web服务。这些应用服务6的示例包括用于数据处理系统(如Spark)和机器学习框架(如Tensorflow)的公共云服务。
组件的部分或全部可能被包含为计算系统01的一部分。在本说明书中,我们将“计算系统”这个词语交替使用,以指代01。
这样的资源可能以框架的形式存在,并作为软件包存在,或作为正在运行的服务存在,如AWS lambda函数、Web服务或其他在云中运行的服务,边缘设备通过使用互联网协议(如URI)进行寻址,并通过服务端点被计算系统访问。
图1B展示了系统的一个分布式实施例。图1A展示了平台的另一个实施例,该实施例包含容器管理系统,并且可能涉及边缘云。更多细节将在本说明书后面解释。
参照图2,应用程序可以用具有配置201的图200表示。图由一组处理器210组成,它们构成图的节点,以及连接器220,它们构成图的边。图中的每个元素都具有一组新的属性,以便完整地表示应用程序。处理器表示图1中组件05的计算单元。多个处理器可以通过实现功能的不同方面来引用同一个组件05;一个处理器可以引用多个组件来表示一个功能。
该图提供了一个所有处理器的全局命名空间。它还包含来自处理器库204的一组处理器,这些处理器通过配置参数204进行配置,用于特定的运行时处理器实例。连接器表示处理的方向和顺序(优先级),而处理器和连接器允许定义处理逻辑以及数据和工作流逻辑的细微细节。
每个处理器210都具有唯一标识符、名称和处理器实例名称,这些名称可以在用户创建处理器实例并组合图时定义。处理器可能具有一组键值对形式的属性215。这些属性可以用于保存用于定义唯一处理器属性的值,或者动态添加运行时配置,这些配置特定于处理器封装的特定组件。处理器210还具有一组配置参数,这些参数可以用于在编程时或执行时定义用户指定的配置,定义相同功能的不同实现,或者定义处理器的任何其他可配置属性。参数用于实例化处理器以创建处理器实例对象。
每个处理器至少有两个端口,一个输入端口211和一个输出端口212,除非它是图上的根处理器或叶处理器,在这种情况下,它分别可能只有一个输出端口和一个输入端口。每个端口在单个处理器内被分配一个唯一标识符。例如,它可以通过一个数字编号和一个指示输入或输出或其他的类型来识别。每个端口还具有跨处理器的唯一标识符,这可能由处理器标识符和端口号组合而成。
处理器包含至少两个或更多端口,至少一个输入端口(InPort)和至少一个输出端口(OutPort),提供一种机制来指定处理器的输入和输出数据。可选地,处理器还可以包含日志和错误端口,用于记录和错误数据规范。
端口213为处理器提供了一种统一的方式来传输和交换它处理的数据。每个处理器都有一个或多个输入端口(InPort)和输出端口(OutPort)用于与其他处理器以及数据源(源和汇)进行数据输入输出。
该图模型允许处理器将处理逻辑和数据流连接在一起,从而使编程模型变得简单,只需很少的编程元素即可实现。此外,图形模式可以让应用程序逻辑独立于所使用的详细实现组件来表示,提供长期实时的业务逻辑文档,组件可以被替换而不影响逻辑。这是像模型驱动架构和相关工具等一些先前技术框架试图在常规应用程序构建中普遍实现的目标,但未能完全实现。本发明模型解决了这个问题。结合配置,它支持基于声明的编程模型,该模型适用于后面描述的拖放式可视化编程,大大降低了架构需求,降低了将复杂系统组件组合在一起所需的技能,只需非常少的编程技能,让更广泛的人群参与,尤其是领域专家参与,同时提高生产力。
图提供了一个共享资源和服务的范围,用于处理器之间高效的数据和消息通信,包括访问运行时数据集(DataSet)、mData、命令以及分布式环境中需要访问的任何事件。
各种来源、粒度、位置、分布、格式的数据资源可以用mData 231描述。mData提供了一种标准方法来捕获数据内容信息和机器学习模型资源的元数据。参考图2B,每个mData包括唯一标识符、名称、描述以及使用URI协议格式指定的data位置。它还可能包含使用内容架构(例如json、xml、yaml或其他格式)的详细内容描述,该内容架构可以包含在mData中或位于通过URI协议或等效协议指定的网络可访问位置。它还可能包含所有权、版本、创建日期/时间戳以及mData的分类。此外,它可能包含信息和内容分类以及其他信息,以方便搜索和发现数据,以及连接资源、授权和身份验证的信息。
通过描述资源,mData告知处理器和逻辑组件内容信息,综合起来,它以具体术语的形式编码文档业务知识上下文,帮助解决理解业务领域上下文困难的问题。然后,它会在编程步骤中告知应用程序逻辑的设计,并允许元数据驱动执行过程,从而简化编程和执行步骤。当mData稍后通过图形处理相互链接时,它会自动成为数据和模型的血缘图,帮助记录处理过程,同时也是使应用程序可重复的关键元素,这是业界和研究界正在努力解决的AI中心应用程序的主要新问题之一。
各种来源、粒度、位置、分布、格式的数据资源的内容可以使用图形数据集(GDS)230进行统一表示、寻址和操作,该数据集提供了一个统一的接口和方法,用于透明地连接、读取、写入、转换以及其他涉及底层数据的操作。
DataSet提供了一个用于所有处理器之间数据通信的常见分布式负载。可以提供DataSet服务与DataSet进行交互。处理器从输入端口接收一个或多个DataSet对象,并创建一个或多个DataSet来表示其存储在存储媒体(例如Kubernetes中的pvc)或内存(例如通过共享内存)中的数据。
异构组件作为系统的一部分,它们之间的数据通信是一个主要问题。在诸如Kubeflow等相关系统中,这个问题至今仍然未得到解决。图形数据集添加了一个新的构造,该构造解决了零复制高效数据通信的问题,并提供了一种易于使用的语法,同时允许转换和转换扩展,以支持使用各种内容类型和处理函数进行更详细的转换工作。
在系统层面,连接器帮助实现了一个分层架构组件,它隐藏了对资源(由mData描述的数据集)的物理连接,通过关联输入端口的mData 231和数据集220,并将其传播到输出端口来实现。具体的传播行为由图处理引擎和执行器定义,这些将在后面描述。
关于处理器的所有静态信息可以被捕获并存储在处理器数据库中。处理器数据库可能进一步链接到图2上的处理器库203,并由图1上的编程模块04使用。
通过端口传输的数据集230由元数据(mData)231指定,每个端口可能有零个或多个mData对象,并可能实现CRUD方法(例如,读写)。每个端口也有零个或多个数据集对象。具体数量取决于处理器。
在执行时,每个处理器可能从其输入端口接收mData和数据集,并执行操作并创建新的数据集和mData,并与其输出端口关联。
为了传递数据和处理器间通信信息,输入端口211和输出端口212都可能与由端口213捕获的一组属性相关联,这可以通过多种不同方式实现,例如作为面向对象语言中的一个接口或新类。
连接器220是图上连接两个端口的边缘。它在数据处理层逻辑上代表了工作流和数据流方向,并代表执行工作流中的执行顺序序列(上游和下游)。
每个图至少有一个处理器和零个连接器。因此,单个处理器也是一个图。图也可以是一种处理器。因此,子图可以作为处理器是一个图进行封装,从而允许从其他图中组合图,实现数学上复合函数。为了启用子图功能,图可能实现处理器接口,其输入端口为根处理器或其他选定处理的端口,输出端口为图的叶处理器的输出。例如,在两个任务并行图graph 1和2中,输入x作为DataSet,并分别创建y1=F1(x)和y2=F2(x),然后图3接受y1和y3并产生输出DataSet z=G(y1,y2),则可以通过子图功能组合新图来创建函数z=G(F1(x),F2(x))。
参考图3,可以使用工作流使用图模型来描述数据驱动的应用。每个图被表示为一个有向无环图(DAG),包括一组节点和边。图的节点被称为处理器310和320,边被称为连接器330。每个处理器至少有两个端口,一个输入端口(分别对于处理器310和320为311和321),以及一个输出端口(分别对于处理器310和320为312和322)。
参考图3A,嵌套图组合可以嵌套。通过将其暴露为处理器360,图370被嵌套为子图。根处理器图380的输入端口映射到处理器360的输入端口,图380的配置参数映射到处理器360的配置参数,叶处理器的输出端口映射到处理器360的输出。
图的组合是通过将一个图的一个或多个处理器连接到另一个图的输入来组成的。新图可以通过两种方式从现有图中组成:线性组合和嵌套组合。嵌套图在面向对象编程中扮演类似对象的角色,帮助隐藏信息并更好地构建更复杂的构建块。嵌套图的示例使用场景包括从一个或多个不同组或相同组的团队成员中组合新应用;另一个使用场景是作用域,其中嵌套用于隐藏不必要的细节。
使用图模型来表示数据驱动的应用逻辑在计算机科学中是常见和广泛使用的。结合具有模块化和可配置处理器以及支持分布式环境中处理器间数据通信的连接器的图模型,允许表示和规范复杂的基于流的编程逻辑。
一组操作可能与图及其相关元素关联,以组合、配置和执行应用程序,以及管理构件。具体操作在下面描述。
为了使用图模型组成应用程序,可以定义创建、读取、更新、删除和保存(CRUDS)操作,以在计算设备和内存或媒介上创建、读取、更新和删除图、处理器及连接器。
对每个图,CRUD操作可以与唯一标识符或名称相关联(当名称是唯一的)。图形还与CRUD相关联,用于添加/删除处理器和连接器,以及添加、删除和更新配置。对于每个处理器,CRUD操作用于添加、删除和标记端口的可变性,以及更新关联的属性,例如mData和mData URI或其他位置标识符。
同样,CRUD操作也可以定义在mData上。除了CRUD外,还可以定义操作来管理mData和图处理器,以帮助从各自的仓库检索和管理mData、图和处理器,以及导入和导出这些构件。
处理时间操作可以与图和处理器相关联。这些可能包括运行主命令及其相关参数所需的操作,以及更改、更新、检索运行时状态的操作,还包括设置轮询状态的时间间隔和回调操作。
上述新增的操作与处理器的静态元素结合在一起,提供了一种标准化且模块化的接口和构造,用于表示和执行各种粒度级别的异构组件,使其成为用于配置式编程的连贯计算单元。使用处理器接口的其他构造可以实现各种处理能力的表示和执行,包括分布式处理和处理人工智能和大数据应用程序(多云环境)、支持批处理、流处理以及Web服务编程模型,同时为所有组件添加新的性能优化层。通过该模型,平台提供了一个环境,该环境提供工具和系统方法,将以人工智能为中心的应用程序构建和运营转换为企业熟悉的传统软件和数据工程。
对于软件开发人员来说,定义上述操作为REST API是常识,并且可以通过为各种编程语言(包括客户端和服务器端)生成不同操作的实现代码,例如Python/Java/Go以及用于Angular的JavaScript和TypeScript。
可以为REST API创建客户端和服务器端API。可以从API生成各种语言的客户端和服务器代码。并且通过实现APIs创建服务和用户界面应用。
作为处理器表示的一个例子,对应于服务器端操作的处理器接口(在Python伪代码中,只突出了一些元素)可能包含一组标准方法,包括主操作以调用组件上的调用操作、状态控制、预处理和后处理、错误处理以及其他自定义的状态控制功能。
每个处理器必须实现主方法serve(*arg,**args),当调用时,会导致底层组件的执行。底层组件如何被调用是由图5中描述的处理器设计的标准模型定义的。状态指示处理器在生命周期中的当前状态,错误指示错误状态。轮询设置了处理器状态报告的时间间隔。
具体的方法名称只是为了帮助解释概念。对于那些在行业中具有普通技能的人来说,应该清楚的是函数可以用许多其他方式命名,并且可以定义一组等效的函数和属性来实现相同的目的。特别是,调用serve()方法将导致主函数的调用,这可能是库的函数调用或对远程服务的命令。
图5描述了一种系统地创建处理器以表示底层组件的方法。一旦构建了处理器表示,它就可以作为处理器库的一部分被包含进来,并使用图编程模型构建应用程序,在运行时环境中执行。
图2上的所有处理器210,代表图1上的组件5的一个版本,都有一个公共的处理器接口512A。处理器实现ProcessorImpl 512B实现了处理器定义的所需功能。每个组件05可以由一个或多个处理器表示,每个处理器可以在同一功能的多个不同实现之上实现。
处理器接口512A为所有处理器提供了一个标准接口。该接口包括前面描述的属性和操作(方法),并与组件5进行了标准化交互。它使得在将应用程序编程为处理器时能够引用底层组件,在运行时作为应用程序的一部分执行组件。对于那些在行业中具有普通技能的人来说,应该明显这个模型可以用任何现代编程语言实现,如Python、Java等。
参考图5,一个处理器实现ProcessorImpl 512B实现主方法将导致组件的执行。它还可能包括用于管理和控制以及报告组件执行状态的函数(在适用的情况下)。
调用主方法将对输入数据和mData进行操作,并将组件的输出转换为DataSet,使数据在其输出端口可用。ProcessorImpl可能使用标准处理器执行器515来标准化执行并以不同方式触发组件的执行。例如,执行器可能使用一组数据处理服务和上下文,包括数据集上下文518A用于数据操作和mData上下文518B用于mData访问和操作。这个上下文可能是通过图对象511简单访问分布式存储510(如在描述的后面的实施例中所示)。执行器还可能提供一种机制,在分布式环境中启动组件,如带有并行和分布式服务的
处理器使用来自输入端口的DataSet和mData信息接收DataSet和mData信息。此外,它可能将信息作为命令行参数的一部分传递给组件,该参数由处理器的配置参数派生或用于传达此类信息。可以定义标准处理器驱动API 513,以抽象处理器端口与组件之间的命令及数据输入输出通信和转换。
对于那些从事此行业的人来说,应该很清楚有许多方法可以定义驱动API来封装库函数和服务。例如,API可以反映前面描述的处理器API属性和函数。分开的驱动API的优势在于解耦,这样处理器驱动519的开发者就不需要了解处理器API的细节。根据组件的类型,例如,它是库还是远程服务,ProcessorImpl可以以许多不同的方式实现。例如,如果组件5是一个常规库形式,ProcessorImpl可能只是实现处理器API而不需要显式执行器。处理器驱动516可能使用分布式引擎来管理组件5的分布式处理。
特别是在容器实施例中,处理器驱动519包含一个docker镜像,该镜像有不同的组件作为库,如Tensorflow、Pytorch驱动函数使用该框架。然后,处理器调用将涉及将镜像部署到容器并通过Docker或容器编排Kubernetes等容器平台在容器上运行命令。
处理器是允许应用程序模块化组合和统一执行、元数据数据驱动处理的关键,这简化了图的组合和执行,并允许记录处理中的谱系信息,并启用将在后面讨论的可复制应用程序。
除了模块化,它还隐藏了最终用户使用组件时不必要的技术复杂性,这些用户将其作为处理器访问,并通过一次性处理器驱动开发,消除了一个主要的知识差距,允许更多编程技能较弱的用户使用组件。
处理器可以托管在处理器库中,并存储在数据库或其他媒介中。库中的每个处理器都将有一个唯一标识符、处理器的标识符、名称、描述、版本、创建者以及创建日期和时间数据。
它还可能包含基于标准分类法的类别信息和标签信息,以将处理器分类到不同的类别,并有开发者和用户定义的标签。它可能包含识别处理器源、源位置(URI)的其他信息。
与类别和标签相关联的分类法有助于组织库。分类法可能进一步与处理器及其底层组件的文档和其他信息链接,并通过图形用户界面以不同的操作方式(如高亮显示、鼠标右键点击等)提供。
与类别和标签相关的分类法有助于组织库。分类法可能进一步与处理器及其底层组件的文档和其他信息相关联,并通过图形用户界面以不同的操作方式(如高亮显示、鼠标右键点击等)提供。
分类法的示例可能包括类别,如数据处理、编程语言、机器学习、深度学习、流处理、计算机视觉、自然语言处理、Web服务;这些类别可能进一步包括不同的算法、算法家族、分类如监督、非监督、半监督学习,在深度学习下不同的神经网络架构。
可能提供一组基本处理器,例如:
1.基础处理器:用于基本系统命令和与环境交互的处理器
2.数据集和mData处理器:键值上的点乘、交叉乘积、复制、组合、
MapReduce。包括这些及类似操作赋予系统不同的理论表达能力,例如图灵完备性。
3.数据摄取、数据转换组件和系统,如Apache Nifi、Dask、Spark等
4.运行硬件架构机器学习算法框架的处理器
5.用于AutoML、特征存储和注释的处理器
6.等等。
对于某些应用程序,引入允许从输出到输入的反馈循环的处理器也可能是可取的,一个这样的例子是编码状态转换而不依赖于状态保持机制。通过图访问全局状态或引入反馈循环是使图计算成为图灵完备的两个独立特性。
用于构建处理器信息的静态处理器信息可以存储在数据库中。将处理器作为库组织有许多优势,并有助于解决AI中心应用开发中的一些主要问题,特别是当使用如下所述的拖放可视化编程环境时。虽然处理器使组件集成模块化并去除了使用它的许多复杂性,但将处理器作为库组织通过将它们放在用户手边消除了使用组件的知识差距。例如,在机器学习中,算法和神经网络架构一旦开发,就保持稳定并且只会缓慢变化。相同的算法在许多不同的框架中实现,将它们作为处理器抽象出框架实现细节,并让用户专注于它在构建应用程序中所扮演的功能。
图1A展示了图1中平台在分布式环境中的一个实施例。处理主机100包含一组处理引擎和服务。主要处理引擎包括通过用户交互对流程进行图示化和管理的编程引擎。另一个引擎是执行图表的图形处理运行时引擎100B,以及一组为支持这些流程提供功能的服务。服务示例包括用于对每个存储库102、103、106和101a、101b至101e创建、读取、更新和删除(CRUD)各种存储对象的数据库管理服务。当系统作为具有REST API的Web服务部署时,它还可能包含许多服务,这些服务对于构建基于Web服务的应用程序的人员来说会很熟悉。
处理引擎和服务可能与存储介质102关联,用于存储应用图,以及103用于存储应用图编程的处理器库。以及存储库106用于存储运行时处理元数据,这些元数据对于可复制性、系统健康和调试是必需的。它还可能包括共享存储106和内存以实现分布式访问,这些包括通过网络可访问并且可以通过网络连接到达的共享内存、存储类。这些存储设备提供存储介质以及处理器之间数据通信的媒介通道。系统还提供共享存储,用于存储图执行状态,包括图运行时状态、处理器状态、可用数据内容和处理器端口上的mData、分布式处理期间存储介质和内存的状态,它还提供用于存储运行时通信的DataSet 101c和mData 101d的存储。
编程引擎和执行引擎可以在相同的处理节点或不同的处理单元中运行。图处理引擎和服务可以分布式部署,以便执行编排在一组主单元100上运行,而处理器代表的底层组件在一组工作节点(worker)上运行
编程引擎和执行引擎可以通过公共REST API访问,并具有命令行界面,以及支持可视化编程、执行控制和管理的图形界面。
系统可能包括基础设施管理用户界面110和服务115,这些服务管理并监控并报告系统运行时状态和健康。这些信息可能进一步作为元数据存储的一部分导入,连同执行运行时。基础设施管理服务119可能使用与部署基础设施相关联的服务和工具。
在一个实施例中,如图1B所示,平台部署在Kubernetes集群上。主节点和工作节点是Kubernetes pods。这些pods可能运行在位于本地、私有云和公共云或它们的组合上的节点上。
编程和运行时引擎可以在相同或不同的pods和虚拟或计算节点上运行。部分或全部工作节点也可能运行在云中服务器上的pod组107上,另一组在边缘云107A的边缘设备上,包括手机、智能医疗设备或其他网络可访问的设备。工作节点pods可能由基础设施管理器管理,状态可能由图执行组件、在其他工作节点中运行的组件或部署过程和运行时过程中的基础设施管理器或它们的组合管理。运行时仓库对所有平台工作节点107和107A以及图执行主节点可访问。
这个实施例有许多可能的变体。例如,实施例的一个变体可能有部分或全部仓库和存储作为服务运行在不同的集群中,无论是Kubernetes还是其他计算环境,并且让一些工作节点在Kubernetes环境中运行,以利用Kubernetes pod作为分配工作负载的方式。
在另一个实施例中,主节点、工作节点都可以部署在单个计算节点上。这可能对开发和调试很有用,尽管在生产中可能功率有限。
在另一个实施例中,主节点和工作节点可以部署在物理硬件服务器上,并通过桌面或移动设备上的用户界面访问。这些物理硬件可能运行在本地、私有云或公共云,或它们的组合中。在另一个实施例中,这些物理节点可以被虚拟节点替代。
应用程序可以通过创建图和配置来组成。图可以存储在数据库或其他媒介中。可以构建执行引擎将图转换为可执行代码并在计算环境中执行。在图模型的一个实施例中,可以使用Web服务架构,并使用实现对图和处理器操作的REST API来帮助实现编程和执行操作。
参考图6A,使用系统的一个实施例创建应用程序通常涉及以下处理步骤:
1.通过迭代以下步骤创建图结构:
a.添加/移除处理器
i.添加端口(自动)
ii.添加/移除连接器
b.配置处理器(驱动/镜像,运行时选项,xd规范,映射,每个架构层中的opt_args)
c.验证编辑时配置
2.配置图运行时参数(缺失)
3.验证配置
4.保存/更新/移除图到仓库
参考图6,明白编程是一个迭代的过程。步骤的顺序可能会因情况而被用户省略、重复或切换。上述过程可以通过命令行界面以及与RESTAPI接口交互的各种编程语言来执行。
参考图6,可构建可视化界面系统600与平台进行交互。该界面将充当平台的客户端,并执行各种操作,例如编程应用图、管理图以及执行和监控应用程序生命周期。与平台交互的主要方式是通过REST API。一些操作(例如涉及管理作业的操作)也可能通过其他通道(例如操作系统接口)直接与系统其他部分通信,并通过用于系统基础设施管理的第三方工具(例如Kubernetes和网络管理工具)进行通信。
通过提供一个面板602显示处理器,可以视觉上访问库中的处理器,例如基于库组织分类法的文件夹结构、系统开发者或用户添加的标签。它还可能包括帮助限制处理器的搜索和过滤功能。
界面还可以提供面板603用于可视化地组合应用程序图。参考图603A,应用程序以连接的图形方式可视化呈现,边缘表示图形模型中的连接器。应用程序的组合涉及可视化地执行编程步骤6A中的过程。添加处理器涉及从右侧处理器面板602中选择一个处理器并将其添加到603中,具体操作可能会根据显示设备(例如移动设备或台式设备)进行配置。对于从事图形界面构建的人员来说,创建可视效果的方法有很多,这是众所周知的。每个处理器的图标还可以进一步配置为包含名称、实例名称和其他属性,这些属性在图2和相关的说明文本中进行了描述。
如前文中图模型所描述的完整图信息可以视觉上指定,例如端口之间的拓扑连接、处理器及处理器实例的名称和描述以及其他构件、处理器配置信息、mData关联、端口间的数据映射等。在视觉组合过程中,客户端调用相应的REST API调用,将新的和更新的信息存储在仓库102中。
面板601可以包括采取行动,包括图编辑、执行、监控和分析、平台管理、设置、用户和账户连接等。编辑可能还包括读取、保存、删除和验证图的操作。面板601和603还可能包括其他操作,如仅显示信息而不改变图定义的视觉变化。这些项目的全部或部分可以被添加。建议有一个用于编程和测试的接口,另一个仅包括执行时的操作。
面板可以被组合、重新排列和重组,许多视觉构件可能会改变。在所有情况下,图和处理器表示允许简化的视觉编程和流程执行。
界面600可能还包括面板610,用于填写详细的处理器和图配置参数,这可能包括在面板上填写表格,以及从客户端设备上传文件。它可能包括一个调试面板612,用于在编辑期间显示详细的验证信息,以及执行错误栈信息用于执行图执行内容的错误和日志记录内容,除了基础设施管理工具(如Kubernetes)可能包含的常规系统堆栈跟踪之外。
界面可能还包括一个项目面板,用于组织图605A,探索mData 606B,数据资源605C,模型内容和其他资源。
当使用Web客户端来呈现界面时,这些面板可以在一个实施例中作为单页面应用(Single Page App)实现。在另一个实施例中,内容可以针对不同的用户角色实现为独立的界面,例如,一个用于编辑和执行,另一个仅用于执行,还有一个用于资源管理,或者它们的各种组合。面板的内容也可以在移动应用程序设备上实现,显示与面板相同的内容,但会根据设备上的更多用户操作进行不同的组织。
在Web客户端中,特别是图6中描述的编程过程可以通过拖放过程进行。参考图6B,处理器库通过REST API调用加载到图6A的前端,并显示给用户。用户按照图6A中描述的步骤创建图。用户在库中搜索并找到处理器,并将其拖放到画布上,这将导致将一个处理器添加到图中,该处理器作为图模型的一部分自动保存到后端图数据库中;用户通过添加更多处理器重复此过程。两个处理器通过连接端口并通过在每端选择正确的数字和配置来配置端口而连接。作为示例,以下视觉处理可能涉及到创建图的过程:
1.从处理器库中选择处理器
2.配置处理器,包括名称、端口、mData,指定驱动程序、驱动参数、可选参数
3.连接端口:
4.配置端口/连接器:指定两端的端口号,指定mData,数据映射,指定通信缓冲区
5.配置图
6.运行验证(所有必需参数都存在)
7.发布图
随着用户完成这个过程,结果通过API调用保存到后端图数据库。同样,可以使用相同的API,并且可以使用Python、Java、JavaScript等编程语言代替视觉编程来编写程序。客户端SDK可以通过封装处理引擎API来创建。然后,它可以通过导入SDK来与后端通信,以编程和执行图。
每个处理器包含一个或多个输入或输出端口(在原点和汇点的情况下为零个或多个),这些端口用于定义1)在工作流和数据流规范中的连接拓扑;以及在数据流情况下关联的mData和DataSet。
参考图7,可以构建一个图执行引擎来执行应用图。执行引擎提供上下文和关键功能来管理图运行时生命周期,协调处理步骤,并提供并行和分布式处理能力。执行引擎700为分布式图执行提供上下文:命名空间、环境变量和公共服务。执行引擎使用通用执行器701来执行图。图从图仓库检索,并实例化图实例传递给执行引擎执行,连同运行时配置参数。执行引擎可能关联执行器701来执行图实例。执行701使用编排算法703遍历图,并可能雇用一组执行服务713来控制执行过程。这些服务可能包括处理器启动器714,帮助创建和控制处理器运行时环境。这可能包括启动或pod组,然后启动处理器。启动器的一个实施例是Argo工作流引擎。
在一个实施例中,编排算法703首先用于将图转换成Kubeflow Pipelines,并使用可能利用Argo工作流引擎来启动和执行由处理器代表的组件的Kubeflow KFP。该过程可能进一步与控制节点生命周期和/或调度器715的工作控制器结合。在运行时,每个图实例与分布式运行时mData队列710和DataSet队列711关联,以在端口之间通信mData和DataSet对象。
执行引擎可能使用状态机702来保持状态并控制图和处理器运行时生命周期/状态(开始、暂停、挂起、调试、停止等)。状态变化可以作为服务通过推送或拉取方式提供给图和处理器以帮助处理。除了状态变化外,状态还可能包括资源的计量和使用,如通过流量计服务717的数据通信通道容量、DataSet媒体容量、cpu/gpu使用量和媒体存储使用水平、内存使用。这些信息进一步可以作为输入提供给运行时条件服务716,该服务结合编排算法,控制执行过程。在流处理的情况下,服务可以提供给处理器,而处理器反过来使用这些信息作为控制参数自动触发执行。
通用编排算法703可用于编排批处理和流处理的处理流程,以控制所有执行器的逻辑流程排序,如端口到端口连接的地形所定义的工作流,以及编排处理器之间的数据流和信息流。算法提供了一种自然的方式来执行处理器级别(组件)和管道并行化和分布式处理。执行器的不同变体可以通过扩展执行器实现,结合其他数据流引擎,如Airflow、Kubeflow、Dask等。
图8描述了图处理的一般流程。对于那些从事此行业的人来说,很容易看出实现可能有许多变体。可以使用不同类型的执行器以不同模式执行处理器命令以满足处理目标,包括批处理或流处理、不同方式的并行化和分布式处理。在一个场景中,执行器运行批处理。在另一个场景中,执行器运行流处理。数据通信由DataSet对象方案处理。在另一个场景中,批处理和流处理可能在一个图中混合。DataSet对象在云上为所有处理器提供了一个统一的通信机制,在另一个场景中,部分或全部处理可能在边缘设备上运行。
Kubernetes容器管理和作业可以与DataSet对象一起使用,以在不同节点上并行化和分布处理器,pod组可以作为Kubernetes作业实现,以管理容器分布为pod组;它也可以实现为客户资源定义扩展。对于批处理,图可以转换为工作流,并使用诸如Airflow或Kubeflow(Argo工作流引擎)之类的工作流引擎执行。
在从存储检索图后,创建图对象以创建形成由执行器执行的作业的图实例。运行时配置参数801应用于进一步配置图,并控制执行行为的各个方面。执行器通过运行算法703启动主处理算法703并进入执行循环来执行图。根据工作集中的处理器子集是用于流处理还是批处理812,运行不同的处理循环。两个循环都涉及运行构成808和800中的步骤的编排算法。对于批处理,主图拓扑从根节点开始,使用算法扫描一次。
算法首先初始化并保持一个处理器工作集和一个完成的处理器集,循环还监听来自执行引擎的状态变化命令。启动或执行的过程可能由图拓扑定义的优先级和运行时条件检查结果811共同定义。运行时条件可能进一步是上游处理的mData和DataSet的状态、用户从rt_configuration设置的条件的函数;它可能还是数据通信通道和由执行服务为资源优化和计量提供的计算资源容量水平的容量的函数。
协调(编排)过程涉及按顺序启动处理器、设置端口连接、设置mData和DataSet链接,还可能涉及运行处理器的预处理和后处理以记录处理谱系。在步骤815中,流式管道设置完成后,处理将侦听传入数据,并在接收到新数据时触发执行;在批处理模型中,处理器执行一次针对传入数据,然后移动到下一个工作集并更新工作集817。
协调过程可以使用不同的处理器启动器,具体取决于启动步骤813中的模式,以控制处理器将在何处以及如何启动、复制数量、资源使用、并行化和分布、调度以及其他运行时行为的方面。
因此,支持不同层次的并行和分布式处理:在图级别,组件和管道并行化,在处理器级别,与底层组件相关的不同并行分布支持,例如与Spark和GPU架构的分布式处理以及与PyTorch和TensorFlow的分布式CPU处理。通用分布式处理上下文,如Ray和MPI,可以插入以启用额外的功能。
对于流处理,编排算法运行一次以设置管道,然后进入传入数据流上的循环。在数据流持续期间,每个处理器的主处理方法被触发以处理数据。触发可能根据运行时状态服务提供的数据流速度和资源容量信息,对流动计量内容进行条件化。
在实现中,循环809和822也可能包括监听执行引擎命令,以监听用户的状态变化。处理器启动器可能在与编排相同的进程中启动一个处理器,启动一个或多个线程,一个或多个子进程,或启动一个或多个pods或多个处理节点。在处理器启动后,处理器可能如图8A所述运行过程。从输入端口收集并处理数据和mData,连同执行引擎中的可选参数,用于后续处理的步骤830。一组基本的预处理功能831可能包括创建与谱系相关的数据,包括记录mData标识符、mDataSet和DataSet键值信息。
处理器可以执行自定义的预处理和回调函数(832)(如果已实现)。然后,在步骤833中调用处理器的主要方法。对于简单的情况,它可能只是一个简单的库函数调用,处理完成后返回。在更复杂的情况下,它涉及调用处理器的执行器处理并进入步骤833S。其中,步骤833a会初始化一个处理器执行器,步骤833b将处理器级别的参数、用于运行时配置的可选参数以及处理器级别的的数据映射为组件可识别的值,然后在步骤833c将其提交给组件进行处理。例如,机器学习中的大型分布式作业和与Spark集群通信的Spark任务的长时间运行过程可能涉及此模式。执行也可能使其进入服务模式,除了处理主要功能之外,还可以监听和响应各种客户端调用,例如状态更新、轮询配置等。对于流处理,例如,主函数可能进入循环模式并处理新到达的DataSet。
参考图9,计算系统的架构层及实施例1和2中各个过程之间的连接。mData服务900由图组成器930以及运行时层使用。在编程时,查询mData和处理器库信息来组成图,并在部分调用运行时层进行验证时,实例化处理器但不启动执行。完成的信息定义了一个图作业。在执行时,每个架构层可能通过设置运行时配置参数来配置,进一步定义执行过程的行为。
配置可以在图组成期间的编辑时间以及执行前进行。所有图元素都可以配置,配置文件指定图在作为应用程序参数执行时如何运行以满足要求。这些包括涉及mData中输入数据的应用级别定制、处理器级别规格、系统架构、资源使用等。
处理器配置指定处理器名称、后端组件(包括以驱动程序形式的算法)、运行时参数、资源使用、媒体存储、内存、组件级别并行化配置(如工作节点数量、并行化方案等)。
图级别配置控制图的输入源以及执行的运行方式和时间。涉及初始输入数据(以mData、汇、资源访问信息的形式)、图级资源分配(包括计算、存储和网络)、执行器选择、图的并行化和分布。
编辑时和运行时配置使用相同的机制。配置包括指定一组参数,这些参数控制图9中每个架构层的行为:
1.处理器构造器和运行时参数(特定于处理器)
2.每个端口的mData和DataSet
3.执行引擎
4.条件执行(可选)
5.执行模式
6.算法框架选择
7.计算架构选择
8.资源使用(内存和CPU/GPU的数量)
编辑时和运行时配置使用相同的机制。配置包括指定一组参数,这些参数控制图9中每个架构层的行为。
所有级别的配置可能遵循相同的语法(标准配置语法),可以用json、yaml、xml格式指定,或等效为命令行参数。指定配置的方法有很多。例如,在json格式中,以下模式可以嵌套配置所有元素:
{“element_type”:{“optional_param_key”:“optional_param_val”}
其中元素类型包括图(graph)、连接器(connector)、处理器(processor)、执行器(executor)、用户定义的选择、运行时(runtime)等。此外,元素可以分组,并且可以添加额外层次属性。从事此行业的人应该清楚地看到如何扩展这一点,以及如何转换到不同的编码格式,包括XML、YAML等。也有工具自动进行转换。
图的可选参数控制图处理的行为以及处理步骤的不同架构层次和阶段。这些参数通过用户界面中的运行时配置参数传递给图处理以至执行引擎。配置接受JSON文件。它可能包括由关键字“graph”标识的图级配置、“executor”选择执行器、“rt”等关键字控制实时处理。每个键可能伴随一个描述键,并且每个键可能进一步包含一个新的关联映射级别以指定该组的键。
参考图4,所有从处理器401到402流动的数据负载可以使用DataSet及相关服务表示和操作。它提供了一种标准机制,用于读取、写入和操作所有处理器的数据值。除了在编程语法中提供统一访问外,DataSet对象还启用了处理器之间的零拷贝数据通信,并启用了可能涉及网络、持久存储和共享内存的数据访问加速集成。该操作还可以提供透明的格式变化和数据编码,从而简化数据映射操作。
参考图4A,DataSet模型,DataSet接口431提供了一个通用的接口,用于寻址和操作所有类型和位置的底层数据。数据以键值对的形式表示,键由DataSet的客户端分配或自动添加。例如,在Python中,DataSet可以使用字典作为寻址内容的接口。因此,具有键为foo值为bar的数据可以读作ds[foo],并可以设置为ds[foo]=bar,其中ds是DataSet的对象。在底层,它提供了一个用于读写键值对的读/写方法。它还可能提供迭代器来遍历内容值并发现与值关联的键。数据值可以是数据对象、表单、类型,例如各种文件系统中各种格式的文件或文件集、数据库中的记录、数据库表中的列、关系数据库中的单个元素,或者可以直接映射到键值存储中的数据,等等。
每个DataSet都与一个或多个存储介质相关联,用于存储数据的实际值。DataSet通过键寻址值。由于数据值可以以各种格式出现,DataSet可能提供一种标准方法来转换为各种类型。例如,如果值是一个文件,它可能提供一个convert_to方法或等效方法,在各种格式之间转换。它还可以提供一个标准接口来插入用于操作键值对和数据值的函数,如MapReduce、复制等。它还可以提供转换方法433,这些方法在各种框架和语言中对特定值类型进行操作。例如,如果存储是RDBMS数据库,则进行sql操作转换;如果与Spark一起工作,则进行RDD或DataFrame操作;在Pytorch框架中进行Pytorch数据集操作。在每种情况下,操作可能转换为在存储介质中执行函数,或通过图运行时空间中的函数,或不同的运行时环境执行。
参考图4,数据值可能存在于网络上可寻址的任何位置。DataSet使用键值对将数据的值与存储中的值关联。每个DataSet对象411可能与一个或多个存储介质413相关联,这些存储介质可能是任何持久存储413A,如磁盘、云存储、文件系统等,或内存存储413B。读/写接口的实现提供了对存储介质的透明CRUD操作。
在执行处理中,图运行时环境400可能使用一个分布式内存存储410维护DataSet队列,该存储对所有处理器可访问。在一个实施例中,内存存储410和413B可能是分开的存储,在另一个实施例中,它们也可能重叠并共享相同的物理存储。
作为一个示例,说明如何在图4上使用DataSet对象传输数据,处理器(Processor_1)401可能产生一个DataSet对象,该对象有一个指向大量内存数据(例如,作为值的SparkRDD)的键,键和值存储在共享内存存储411中。下一个处理器402从内存存储410取出对象,并在同一内存空间中进行进一步处理。在另一个场景中,401产生的值可能是存储在持久数据上的大文件,由驻留在工作器411上的组件Component_1执行处理。在这种情况下,值是对文件的引用,处理器402可能将引用传递给访问该文件的组件412。应该清楚,根据执行环境以及底层组件和存储介质的类型和值的类型,存在许多可能的场景。
在编程时,处理器可能仅使用描述资源的mData,包括模式和内容位置。执行器将上游处理器的输出端口的mData传播到下游处理器的输入端口。在最基本的格式中,图执行器可以将上游端口的mData添加到下游处理器的输入端口。或者,下游处理器也可以通过遵循图中的连接拓扑来获取信息。然后可以使用mData模式字段和其他信息来在编程和执行时自动设置全部或部分下游处理。具体使用可能取决于各个处理器。不同的处理器可能使用mData来进一步自动化映射到内部逻辑。
mData允许组成处理流程,因此在不查看实际数据源的情况下更完整地配置图。这将编程与执行隔离开来,允许独立的开发和操作分离,这是企业从实验转向生产的关键要求。对于开发,自动化处理也简化了编程,提高了效率和生产力。
图形处理的结果会创建持久化的数据和模型。目标是能够跟踪谱系并在需要时重现这些产物。这可以通过mData、graph和关联的处理来实现。如何实现这一点将在下面进行描述。
所有作为结果生成的持久性数据和模型都由mData描述,它提供了一种通用机制来记录关于数据和模型的元数据信息。特别是,每个mData都有一个id,允许指示数据是模型还是数据。
处理器产生新的mData(除了用户创建的mData之外)用于处理器产生的DataSet。mData编码的元数据信息有不同的级别,例如在数据实体或DataSet(例如,在结构化数据中的字段和记录,或在键值对中的k,值)级别。只有在处理过程中处理器创建此类信息时,才可能进行内容级关联。
可重复性和可信度是人工智能应用领域出现的一些重要新问题。这两个问题都与生成新模型或数据集所使用的数据相关。当处理涉及来自异构源的组件时,如何解决这些问题尚无定论。本发明提出的图处理系统可以自然地解决这个问题,并具有可定制性。该方法的一些主要优势在于它继承了系统本身,可以定义各种关系,并且可以与现有的各种元数据分析、图分析和推理引擎(例如triplestore)集成,以探索未知关系。
永久数据或模型实体之间的谱系被识别为两个实体之间的父子关系。任何永久数据或模型都与存储在处理mData数据库中的mData相关联。平台可以自动维护数据和模型实体级别的谱系,这些实体由mData标识符唯一标识。
谱系保持和检索依赖于图模型设计中固有的以下一组关系,并在处理中保留额外信息:
1.包括配置在内的每个图都记录在图仓库数据库中,并由图实例id唯一标识。
2.每个处理器实例可以由处理器实例id唯一标识,并作为图的一部分存储。
3.处理器实例的输入和输出由端口id唯一标识,该端口id由处理器id、端口号(一个整数)和类型(输入或输出)组成。
4.每个mData与一个端口关联。作为父子关系表示的谱系由图中的端口关系定义。
5.图编码了每个端口之间的父子关系,这转化为mData之间的父子关系。
通过在处理执行过程中自动记录以下信息到处理历史数据库(元数据数据库),并在处理前(预处理)和后(后处理)以及主函数调用期间存储它们,创建基本和详细的谱系信息:mData_id、job_id、图id、处理器实例id、处理id和处理时间。
处理器提供的额外数据(例如,内容级信息),无论是通过自定义预处理、后处理还是主函数调用,都添加了更细致的谱系级别(例如,在记录和数据值级别。
要检索谱系信息,记录的标识符通过图id和连接端口标识符到祖先mData id的连接器id链接。更具体的步骤如下。
首先,与图执行相关的图作业id、process_id、mData_id、port_id、创建时间戳等信息可能被记录为处理历史元数据数据库中的结构化数据。
平台可以通过分配父子关系,在处理过程中自动生成并保持额外的谱系信息。关系也可以被定义,每个关系分配一个relation_id。因此,一般谱系关系可以记录为三元组(mData_id_1,mData_id_2,relation_id),其中mData_id1来自同一处理器的每个导入端口;包括自定义关系定义,并在处理器执行的自定义预处理步骤中记录的额外关系。
一旦这样的关系被记录下来,所有的谱系信息都可以通过结合元数据信息和定义为graph_id的图拓扑,并且连接由其连接的两个端口标识来识别。例如,这可以最容易地通过图查询语言完成。并且通过对三元组进行一阶逻辑推理来发现新的谱系。例如,以下步骤可能被遵循来递归地找到在数据记录后识别的谱系信息:
1)新的感兴趣的mData通过其mData_id标识。它由关联的处理器创建,并与处理器的输出端口关联,该处理器由processor_port_id标识(端口id由处理器实例id和端口号及类型唯一标识)。
2)mData_id的父项可能在公共预处理中通过将mData_id与输入端口的mData ids关联来记录;此外,内容级数据关联可以通过处理器自定义处理附加。
3)跟随图拓扑找到当前处理器的父处理器。输入端口的mData ids到父输出端口的输出mData ids。如果父处理器是根处理器,则关联所有父mData,否则,
遵循步骤1的步骤来识别关系三元组。
关于用户、项目、处理器、框架等的额外信息可以在过程中关联,以提供不同目的的谱系关系的完整图景,包括生产、模型开发、性能改进、调试等。
完成的图、图和处理器的配置完全定义了一个图作业。每个作业由一个作业id标识。这样的信息完全定义了执行路径上的DataSet和其他构件,包括上一节的谱系信息。
作业id和使用graph_id和配置信息,连同处理器库信息(包括驱动程序和镜像配置),提供了沿执行路径重现DataSet和模型内容的完整规格。结果可以被检查点记录,在没有检查点的情况下,可以重新运行该过程与规格。
因此,图作业规范本质上构成了整个应用程序的可执行编码/文档,可以与图仓库一起存储为结构化数据模型。
当与处理器的版本(即由镜像版本定义)和平台架构配置结合使用时,这些信息完全定义了运行时行为和数据与模型。综上所述,这些信息呈现了数据和模型,以及运行时性能,包括处理时间、资源(磁盘和内存)、CPU/GPU使用量和其他系统指标。这些信息可能被记录并聚合。
日志信息可能进一步被时间戳标记,并且元数据信息,包括数据类型、体积,可以通过系统监控与处理时间、成本、计算资源使用(cpu/gpu)结合起来。可以构建模型来预测资源使用情况并自动化资源分配,包括节点数量、节点类型、计算架构和大小信息,包括cpu/gpu类型、内存、存储和指标。
本说明书中的计算节点和以下声明中的计算设备也可以互换使用,可用于实现本文中描述的技术。例如,上述操作的全部或部分可能由计算设备或节点执行。本说明中的计算节点旨在代表各种形式的数字计算机,包括例如笔记本电脑、台式机、工作站、个人数字助理、服务器、刀片服务器、大型机等。计算设备旨在代表各种形式的移动设备,包括例如个人数字助理、平板计算节点、手机、智能手机和其他类似计算节点。这里显示的组件、它们的连接和关。
计算设备包括处理器、内存、存储设备、连接到内存和高速扩展端口的高速接口,以及连接到低速总线和存储设备的低速接口。各个组件通过各种总线互联,并可以按适当的方式安装在公共主板上或以其他方式安装。计算机CPU/GPU/TPU等可以处理在计算设备内执行的指令,包括存储在内存或存储设备上的指令,以在外部输入/输出设备上显示图形数据,例如,连接到高速接口的显示器。在其他实现中,可以根据需要使用多个处理器和/或多个总线,以及多个内存和内存类型。此外,多个计算节点可以连接,每个设备提供必要操作的一部分(例如,作为服务器银行、一组刀片服务器或多处理器系统)。
内存在计算设备内存储数据。在一种实现中,内存是一个或多个易失性内存单元。在另一种实现中,内存是一个或多个非易失性内存单元。内存也可以是另一种形式的计算机可读介质(例如,磁盘或光盘。内存可能是非瞬态的。)
存储设备计算节点能够为计算设备提供大容量存储。在一种实现中,存储设备计算节点可以是或包含计算机可读介质(例如,软盘设备、硬盘设备、光盘设备或磁带设备、闪存或其他类似的固态存储设备,或设备阵列,如存储区域网络中的设备或其他配置)。计算机程序产品可以在数据载体中有形体现。计算机程序产品还可以包含指令,当执行时,执行一个或多个方法(例如,上述方法)。数据载体是计算机或机器可读介质,(例如,内存计算节点、存储设备计算节点、处理器上的内存等。
高速控制器计算节点用于管理计算设备的高带宽操作,而低速控制器计算节点用于管理低带宽操作。这种功能分配仅是示例之一。在一種实施方案中,高速控制器连接到内存计算节点、显示计算节点(例如,通过图形处理器或加速器),以及可以接受各种扩展卡(未显示)的高速扩展端口计算节点。在该实施方案中,低速控制器计算节点连接到存储设备计算节点和低速扩展端口计算节点。低速扩展端口可以包含各种通信端口(例如,USB、
计算设备可以以多种不同的形式实现。例如,它可以作为标准服务器实现,或者在这样的服务器群组中多次实现。它也可以作为机架服务器系统的一部分实现。作为另一种选择或者额外选项,它可以在个人计算机中实现(例如,笔记本电脑)。在一些例子中,计算设备计算节点的组件可以与移动设备(未显示)中的其他组件结合,例如,设备。每个这样的设备都可以包含一个或多个计算设备计算节点,整个系统可以由多个计算节点组成,彼此通信。
计算设备由计算处理器、内存、输入/输出设备(例如显示器、通信接口和收发器)等组件组成。设备还可以配备存储设备(例如微型驱动器或其他设备)以提供额外的存储空间。每个组件都通过各种总线进行互连,其中几个组件可以安装在公共主板上,也可以根据需要采用其他方式进行连接。
计算机处理器可以在计算设备内执行指令,包括存储在内存中的指令。处理器可以作为包含独立的多个模拟和数字处理器的芯片组实现。例如,处理器可以为设备的其他组件的协调提供支持,例如,控制用户界面、设备运行的应用程序以及设备的无线通信。
计算机处理器可以通过控制界面与用户通信,并通过与显示屏连接的显示界面。显示屏可以是TFT LCD(薄膜晶体管液晶显示器)或OLED(有机发光二极管)显示屏,或其他适当的显示技术。显示界面可以包含适当的电路,以驱动显示屏1554向用户展示图形和其他数据。控制界面可以接收来自用户的命令并将其转换为提交给处理器的命令。此外,外部界面可以与处理器通信,从而使设备能够与其他设备进行近距离通信。外部界面可以提供有线通信(在某些实现中)或无线通信(在其他实现中),并且也可以使用多个界面。
内存在计算设备内存储数据。内存可以实现为一个或多个计算机可读介质或介质、易失性内存单元或非易失性内存单元。还可以通过扩展接口向设备提供并连接扩展内存,这可以包括例如SIMM(单列内存模块)卡接口。这样的扩展内存可以为设备提供额外的存储空间,或也可以存储设备的应用程序或其他数据。具体来说,扩展内存可以包含执行或补充上述过程的指令,并且也可以包含安全数据。因此,例如,扩展内存可以作为设备的安全模块提供,并可以用允许安全使用设备的指令进行编程。此外,可以通过SIMM卡提供安全应用程序,以及额外的数据(例如,以非可破解的方式在SIMM卡上放置识别数据。
内存可以包括例如闪存和/或NVRAM内存,如下所述。在一个实现中,计算机程序产品在数据载体中有形体现。计算机程序产品包含指令,当执行时,执行一个或多个方法,例如,上述描述的方法。数据载体是计算机或机器可读介质(例如,内存、扩展内存和/或处理器上的内存),例如,可以通过收发器或外部接口接收。
设备可以通过通信接口无线通信,必要时可以包括数字信号处理电路。通信接口可以提供各种模式或协议下的通信(例如,GSM语音呼叫、SMS、EMS或MMS消息、CDMA、TDMA、PDC、WCDMA、CDMA2000或GPRS等)。这种通信可以通过无线电频率收发器发生。此外,短距离通信可以发生,例如,使用
设备还可以使用音频编解码器进行听觉通信,该编解码器可以接收用户的口头数据并将其转换为可用的数字数据。音频编解码器同样可以为用户生成可听声音(例如,通过手持设备或设备中的扬声器)。这种声音可以包括来自语音电话呼叫的声音,可以包括录制的声音(例如,语音消息、音乐文件等)以及可以包括由设备上运行的应用程序生成的声音
计算设备可以以多种不同的形式实现,如图所示。例如,它可以作为蜂窝电话实现。它也可以作为智能手机、个人数字助理或其他类似移动设备的一部分实现
这里描述的系统和技术的各种实现可以在数字电子电路、集成电路、特别设计的ASICs(应用特定集成电路)、计算机硬件、固件、软件和/或它们的组合中实现。这些不同的实现可以包括在至少包含一个可编程处理器的可编程系统上可执行和/或可解释的一个或多个计算机程序中的实现。可编程处理器可以是特殊的或通用的,配置为从存储系统、至少一个输入设备和至少一个输出设备接收数据和指令,并向它们传输数据和指令。
这些计算机程序(也称为程序、软件、软件应用或代码)包含可编程处理器的机器指令,并且可以用高级过程和/或面向对象的编程语言以及/或汇编/机器语言实现。如本文所用,术语机器可读介质和计算机可读介质指的是计算机程序产品、装置和/或设备(例如,磁盘、光盘、内存、可编程逻辑设备(PLDs)),用于向可编程处理器提供机器指令和/或数据,包括接收机器指令的机器可读介质。
为了与用户互动,这里描述的系统和技术可以在具有向用户显示数据的设备(例如,CRT(阴极射线管)或LCD(液晶显示)监视器)的计算机上实现,并通过键盘和指向设备(例如,鼠标或轨迹球)用户可以向计算机提供输入。也可以使用其他类型的设备来与用户互动;例如,向用户提供的反馈可以是感官反馈的形式(例如,视觉反馈、听觉反馈或触觉反馈);并且可以以声学、语音或触觉输入的形式接收来自用户的输入。
这里描述的系统和技术可以在包括后端组件(例如,作为数据服务器)、包括中间件组件(例如,应用服务器)、包括前端组件(例如,具有用户界面或Web浏览器的客户端计算机,通过该浏览器用户可以与这里描述的系统和技术的实现互动),或这些后端、中间件或前端组件的组合上实现。系统的组件可以通过数字数据通信的形式或介质(例如,通信网络)连接。通信网络的示例包括局域网(LAN)、广域网(WAN)和互联网。
计算系统可以包括客户端和服务器。客户端和服务器通常彼此远程,并通常通过通信网络进行交互。客户端和服务器之间的关系是由分别在各自计算机上运行的计算机程序形成的客户端-服务器关系。
在一些实现中,此处描述的引擎可以被分离、组合或合并到单个或组合引擎中。图中描绘的引擎并不旨在将这里描述的系统限制在图中显示的软件架构中。
已经描述了多种实施例。尽管如此,应理解可以在不偏离本文描述的过程和技术的精神和范围的情况下进行各种修改。此外,图中描绘的逻辑流程不需要显示的特定顺序,或顺序顺序,以实现理想结果。此外,可以提供其他步骤,或从描述的流程中消除步骤,并且可以向描述的系统中添加或从中移除其他组件。因此,其他实施例在以下权利要求的范围内。
- 一种基于人工智能的学生端应用程序监控方法及系统
- 通信模块执行控制系统、通信模块执行控制方法、和应用程序执行控制系统及应用程序执行控制方法
- 通信模块执行控制系统、通信模块执行控制方法、和应用程序执行控制系统及应用程序执行控制方法