一种机器学习管道模型分层化管理和分发方法

2023-05-11 06:49苏孙恺银本亮
中国新技术新产品 2023年3期
关键词:配置文件镜像仓库

董 昕 梁 艳* 郭 勇 苏孙恺 银本亮

(1.成都工业学院计算机工程学院,四川 成都 611730;2.成都育碧电脑软件有限公司,四川 成都 610041)

0 引言

目前,在计算机存储系统中的模型仓库领域,机器学习管道模型的分发系统可以归结为一类方法:基于文件系统或对象存储系统实现的以单一模型文件为基本存储对象的模型仓库。用户需要通过软件开发工具包(Software Development Kit,SDK)或者用户界面(User Interface, UI)的方式,将模型上传到模型仓库中。在模型上传后,模型仓库会将模型或者模型的元数据存储在自身维护的存储后端中。当需要利用模型进行推理时,用户可通过模型仓库提供的SDK 或者接口将模型下载下来,进行推理服务。这种方法并不区分单一模型和管道模型(即基于工作流的若干模型的组合)[1-2]。

这种方法将管道模型当作单一模型文件来存储,无法应对管道模型训练或部署在灵活性方面的要求[3]:用户希望对管道中的模型重新编排、组合形成新的管道模型;用户希望提取管道模型中的某个或几个模型,重新训练或单独部署。除此之外,复杂的管道模型还带来了性能上的挑战[4]:较慢的管道模型上传和下载速度;较高的模型持久化存储成本。

该文在分析上述方法的基础上,提出了一种新的管道模型分层化管理和分发新方法。该方法能解决现有方法在管道模型管理和分发方面灵活性不高和性能较低的问题。

1 新方法的模型

容器是一个标准的软件单元,将代码及其所有依赖项打包为镜像。Docker 容器镜像是一个轻量级的、独立的、可执行的软件包,包括运行应用程序所需的一切:系统库、代码、运行时间和运行设置等[5]。Docker 容器将软件与其环境隔离开,无论基础设施如何,都确保软件能够一致地工作,支持Linux、Windows、云、服务器等多种运行环境[6]。机器学习管道模型分层化管理和分发系统符合经典的客户端服务器架构,系统框架如图1 所示。

图1 新方法框架图

其中,模型管理客户端是由命令行管理工具和高级容器引擎Docker后台构成的。命令行管理工具模块以命令行的方式提供机器学习管道模型构建、上传和下载等工具。Docker后台提供了应用程序接口(Application Programming Interface,API)用于接收来自命令行管理工具的请求,支持用户可通过构建自定义镜像的方式管理自定义机器学习管道模型,其后根据不同的请求分发给不同模块进而执行相应的工作。模型管理客户端支持开放容器标准(Open Container Initiative,OCI),可以像Docker 管理镜像一样管理模型,能够在客户端对模型文件和模型属性进行分层存储管理[7]。模型镜像仓库提供了Docker 注册表API 用来接收来自模型管理客户端的请求,支持用户上传、下载机器学习管道模型,能够在服务器端对模型文件和模型属性进行分层存储管理。该系统涉及的模型镜像仓库模块具有通用性,能够支持任何符合OCI标准的镜像仓库方法。

通过上述模块,可以为管道模型定义符合Docker 镜像和镜像仓库服务规范的功能和服务,这意味着上传或下载机器学习管道模型就像拉取镜像一样简单,在支持模型拉取的客户端的环境里,开箱即用[8]。

2 新方法的使用及其成效

为了实现机器学习管道模型镜像仓库服务,新方法使用步骤如下。第一步:获取多个机器学习模型,使用有向无环图(Directed Acyclic Graph,DAG)定义机器学习模型之间的管道关系,通过序列化的方法将DAG 作为一种特殊模型来存储。DAG 是业界工作流或数据流常用的描述方式,具有灵活和弹性的特点。可以利用某种编程语言例如Python 去描述机器学习管道模型调用的关系图DAG,并通过持久化的方法将DAG 作为一种特殊模型来存储。第二步:通过自定义配置文件描述多个机器学习模型和DAG 模型在待构建的Docker 镜像中的层次关系,包括配置文件需要指定每个机器学习模型的读取位置;配置文件需要描述Docker 镜像中的一个镜像层包括一个且只有一个机器学习模型的约束关系;配置文件需要描述多个机器学习模型所对应的镜像层的构建顺序和层次,即n个机器学习模型依次对应于第一层、第二层,…,第n-1 层、第n层;配置文件需要描述DAG 模型所对应的镜像层的构建顺序和层次,即位于最顶层的第n+1层,如图2 所示。第三步:模型管理客户端根据自定义配置文件生成镜像构建脚本,然后根据构建脚本对多个机器学习模型和DAG 模型进行构建,包括模型管理客户端能够正确读取和解析配置文件,生成符合Docker 规范的镜像构建脚本;模型管理客户端需要实现符合Docker 规范的镜像构建功能,能够根据构建脚本对多个机器学习模型和DAG 模型进行机器学习管道模型镜像的构建。第四步:将机器学习管道模型Docker镜像推送至模型镜像仓库。模型管理客户端通过推送命令和模型镜像仓库交互,上传管道模型镜像。管道模型镜像的配置Config 和镜像层Layers 中的每层,都是以Blob的方式存储在镜像仓库中,它们的摘要digest 作为键Key 存在。第五步:这一步是可选的,模型管理客户端通过拉取命令和模型镜像仓库交互,下载管道模型镜像。在发送请求得到模型镜像的Manifest 后,模型管理客户端利用 digest 并行下载镜像所有的Blobs,其中就包括Config 和所有的Layers。

图2 Docker 镜像层次关系

上述步骤中,其中第三步涉及支持机器学习管道模型这一工件类型Manifest 的关键设计和若干子步骤,具体如下:1)模型管理客户端通过扩展Docker 后台功能生成符合OCI标准的机器学习管道模型镜像的Manifest。Manifest 文件的结构可以完全遵循 OCI 分配规范。 Manifest 是镜像的 config 文件索引,保存了很多和当前平台有关的信息。Manifest 文件是一个 JSON 文件,其定义包括两个部分,分别是配置Config和 Layers。Config 是一个 JSON 对象,Layers 是一个由 JSON对象组成的数组。Config 与 Layers 中的每一个对象的结构相同,都包括三个字段,分别是 digest、mediaType 和 size。其中 digest 是对象的 索引,mediaType 是该内容的类型,size是大小。 2)Config 部分记录了关于镜像的配置,可以理解为是镜像的元数据。通常它会被镜像仓库用来在 UI 中展示信息,以及区分不同操作系统的构建等。具体到对管道模型这一工件类型的支持的设计上,需要定制Config 结构使其包括管道模型的元数据。每个管道模型会被赋予一对标志符 pipeline_model_id 和 pipeline_model_version 来作为唯一标识。并且一个管道模型包括若干个模型如model_1、model_n、dag。同时管道中每个模型的具体信息,也有若干个参数,可以通过model_param 和 model_meta 展示每个模型的具体信息,也就是模型的参数和元的信息。3)机器学习管道模型镜像的Layers 是由多层媒体类型(mediaType 为OCI 标准中 application/vnd.oci.image.layer.v1.*)的内容组成的(其中最常见的是application/vnd.oci.image.layer.v1.tar+gzip) 。在该系统中,管道模型镜像是分层构建的,每一层就对应着一个机器学习管道模型或DAG 模型。

基于Docker 镜像和镜像仓库服务的机器学习管道模型管理和分发系统的实例,如图3 所示。新方法包括模型管理客户端和模型镜像仓库;模型管理客户端包括命令行管理工具模块和Docker 后台模块。

图3 新方法实例的示意图

管道模型的开发者按照该方法的机器学习管道模型镜像分层方法和Manifest 文件规范构建Docker 镜像;开发者将构建的镜像交付到机器学习管道镜像仓库中;模型用户使用客户端从镜像仓库拉取镜像,拉取过程符合标准的镜像仓库服务API:客户端会先向镜像仓库请求镜像的Manifest;客户端拉取镜像的Config 信息结构;客户端拉取包括管道模型的所有文件层。其中Manifest 文件构成如图4 所示,Config结构如图5 所示。

图4 Manifest 构成示意图

图5 配置结构

该方法克服现有方案中存在的管道模型管理、分发在灵活性和性能方面的缺陷,可以共享复杂的管道模型,保证多方训练和服务的一致性并且构建和试验任意复杂的模型。这也为集成学习、多任务学习、联邦学习技术所需的更复杂的模型结构提供了可能性,同时让用户可以动态地实现模型操作和自定义评估。

3 结论

该文提出一种机器学习管道模型分层化管理和分发新方法。该方法通过镜像仓库分发镜像的方式来支持对机器学习管道模型的存储和分发,从而将管道里的每个机器学习模型作为镜像里文件系统中的单独一层来存储;用DAG 定义机器学习管道模型的计算关系图,然后将其命名为DAG 的模型来存储管道的计算关系并且DAG 模型会作为文件系统中的最上面单独一层来存储。

综上所述,该系统使用镜像来封装管道模型,利用镜像仓库提供了低延迟的管道模型管理和分发基础设施并且可以极大的节省模型存储的空间。实践证明,该方法值得在其他机器学习管道模型的分发系统中推广和部署。

致谢:该研究得到了教育部春晖计划合作科研项目、国家留学基金管理委员会和四川省教育厅西部项目地方创新子项目及四川省无人机产业发展研究中心项目的支持。

猜你喜欢
配置文件镜像仓库
四行仓库的悲壮往事
忘记ESXi主机root密码怎么办
打印机设置
消防设备