论文介绍:Towards MLOps: A Case Study of ML Pipeline Platform

475 阅读5分钟

论文介绍:Towards MLOps: A Case Study of ML Pipeline Platform

我们从现有的CICD工具和Kubeflow中构建了一个具有DevOps能力的功能性ML平台,构建并运行ML管道来训练具有不同层和超参数的模型,同时记录所消耗的时间和计算资源。

在此基础上,我们分析了ML管道中每个步骤的时间和资源消耗,探讨了ML平台和计算模型的消耗,并提出了GPU利用率等潜在的性能瓶颈。

平台组成

1.png

在我们具有DevOps功能框架设计的ML平台中,我们需要:

  • 一个像Kubeflow这样的现有ML平台,可以完成模型训练等ML任务
  • 一个存储和管理代码库的git服务
  • 一个可以克隆git库并设置ML任务运行的CI/CD工具。

我们最终选择了Kubeflow、Gitea和Drone作为实现的三个部分,我们的ML管道平台框架如图1所示。

Gitea

Gitea是一个轻量级的自托管Git服务,可以在本地网络或者云平台上运行。它是一个开源的Git代码托管平台,类似于GitHub或GitLab,可以方便地管理源代码、问题跟踪和协作。

与其他Git代码托管平台相比,Gitea具有轻量、易于使用和快速部署的特点。它支持基本的Git功能,包括代码仓库管理、代码提交、分支管理、合并请求、代码审查、问题跟踪、Webhook等。同时,Gitea还支持多种数据库后端,包括SQLite、MySQL、PostgreSQL等(支持大文件存储)。

Gitea的开发目标是提供一个轻量、易于部署和运行的Git服务平台,可以方便地自托管Git服务,同时还提供了基本的代码管理、问题跟踪和协作功能,非常适合小型团队和个人使用。

Drone

Drone是一种基于容器的持续交付平台,可以自动化构建、测试和部署应用程序。它是一个开源工具,可以在GitHub、GitLab、Bitbucket等Git服务上使用。

Drone支持使用Docker容器来运行CI/CD工作流程,可以方便地管理应用程序的版本和环境。它使用YAML文件定义工作流程,支持各种持续集成和持续部署操作,例如编译代码、运行测试、打包应用程序、上传到云平台等。

Drone的工作原理是:当Git仓库中有新代码提交时,Drone会自动触发工作流程,在容器中执行定义的操作,例如构建Docker image、部署到云平台等。Drone还支持并行执行多个工作流程,可以提高CI/CD流程的效率和速度。

Drone与其他CI/CD工具相比,优点在于其简单易用、轻量级和可扩展性。同时,Drone是一个开源工具,拥有活跃的社区和插件生态系统,可以方便地集成其他工具和服务。

管道设计

基于开源软件,我们搭建了git服务平台来实现代码的版本化,搭建了CI/CD工具来实现CI/CD管道的自动运行。在这一步中,我们配置了Drone来连接Gitea并授权它访问git资源。

  1. 当git推送和其他git事件在添加了webhook的存储库中发生时,git会提交一条消息信息将被发送以触发CI/CD执行。
  2. 收到消息后,Drone将逐步执行CI/CD管道配置中定义的子任务。
  3. 在完成这些子任务的过程中,Dockerfiles用于构建包含Kubeflow管道组件的Docker image,而Shell脚本用于编译和上传Kubeflow管道定义文件。

在Kubeflow、Gitea和Drone已经部署和配置好相互连接之后,我们需要设计和构造我们的ML管道,以便在特定事件发生时持续训练模型,比如在我们的例子中代码更改提交。从这个角度来看,ML管道可以分为两个功能部分,一个是ML任务的完成,另一个是ML任务定义的编译。

如图1所示,我们在ML平台上设置了两种管道:用于自动打包和上传Kubeflow管道的CI/CD管道,以及用于模型训练等流程的Kubeflow管道。

在CI/CD管道中,当接收到表示git存储库更改的消息时,

  1. CI/CD工具首先需要克隆存储计算模型代码和Kubeflow管道定义文件的存储库。
  2. 其次,基于存储库中的dockerfile,构建包含管道组件程序的Docker image并上传到Docker存储库。
  3. 然后,引用这些组件并定义它们的输入-输出交互,管道文件被编译成yaml格式的配置并上传到Kubeflow。
  4. 最后,CI/CD工具开始执行Kubeflow管道。在git存储库中存储的CI/CD管道配置文件中也描述了上述步骤。

Kubeflow管道由顺序执行的组件执行。在组件执行期间,首先从Docker存储库中提取Docker image。

当Docker容器从该image创建时,内置在其中的组件程序开始运行并完成ML任务,如数据集下载、数据处理、模型训练和模型测试。

实验结果

模型信息

2.png

管道执行消耗的时间

3.png

4.png

管道执行消耗的计算资源

5.png

模型差异下的时间和资源消耗

6.png