DagsHub和Beam:以零MLOps结束ML项目生命周期
回到博客主页

DagsHub和Beam:以零MLOps结束ML项目生命周期

MLOps 2023年4月24日

近年来,机器学习发展迅速,许多个人致力于开源项目,许多公司将机器学习模型和算法纳入其产品和服务中。然而,管理机器学习项目的运维方面可能是具有挑战性的,因为工具的分离,需要的DevOps知识超出了机器学习的范围,耗时的设置和昂贵的本地计算资源。

为了帮助克服这些挑战,DagsHub提供了一个统一的平台,用于在一个地方管理所有ML项目组件,同时为其用户进行MLOps设置。此外,Beam还提供了一个无服务器解决方案,用于管理强大的计算资源,用于ML模型的训练和推理。

这篇文章提供了一个实用的指南,说明DagsHub和Beam如何帮助管理整个ML项目周期。通过遵循文章中概述的步骤,您可以优化您的MLOps管理,并专注于构建更好的模型。

Beam是什么?

Beam使您能够在无服务器gpu上进行开发,部署高性能api,并快速构建ML模型原型,而无需管理任何基础设施。它提供了易于设置的无服务器解决方案,大大减少了DevOps工作。

梁的标志

Beam是如何工作的?

Beam在可定制且功能强大的硬件上提供了一个远程容器,它可以自动将您的项目文件夹与远程机器同步。这允许您在本地进行开发,并在远程容器而不是本地机器上执行代码。

要使用Beam,您需要创建一个Python脚本并定义一个对象beam.App ()API。此对象将允许您设置必要的远程资源,例如CPU或GPU,并安装任何所需的软件包或操作系统级依赖项。您可以将Python脚本命名为任何您喜欢的名称,例如app.py.运行此脚本后,本地代码将与远程机器同步,使您能够在本地开发时在远程容器上执行代码。

DagsHub和Beam关闭机器学习训练生命周期

DagsHub和Beam通过将多个MLOps工具整合到一个平台中,并提供一种用户友好的方式来使用无服务器解决方案进行开发、训练和推断,从而简化了机器学习训练的生命周期。这些平台管理基础设施和部署的复杂任务,使开发人员能够专注于改进他们的模型。通过跨越开发和培训的集成工作流程,可以有效地关闭机器学习项目的循环,以实现最大性能。

如何使用DagsHub和Beam构建项目

为了演示与Beam一起使用DagsHub的工作流程,我们将使用手掌识别项目。该项目的目标是开发一个鲁棒模型,可以从手掌图像中提取特征,并最大化类间距离,同时最小化类内距离。我们将首先使用具有370个身份的数据集来训练用于特征提取的分类模型。在推理阶段,我们将从每个身份中选择N张图像进行配准,剩余的图像作为查询图像进行识别。为了准确识别,我们将使用余弦相似度将查询图像与注册id配对。

以下部分将介绍数据集准备,使用DVC进行版本控制,以及使用代码片段进行流数据和使用DDA和MLflow进行实验跟踪。在数据集和代码准备好之后,我们将利用Beam强大的计算能力进行训练、评估和推理。我们开始吧!

手掌识别项目管道概述

为了开始这个项目,我们使用了手部数据集11 khands作为我们的初始数据集。这个项目的目标是通过手掌来识别一个人,所以我们去掉了背侧的数据,只关注手侧的手掌。过滤掉手背后,我们使用preprocess.py将每只手归一化到中心的Python脚本。标准化过程包括以下内容:

  1. 背景去除
  2. 手部关键点检测
  3. 旋转和移动所有的手与关键点相同的位置

为了对规范化映像进行版本化,我们通过以下方式初始化存储库的DVC:

// DVC DVC remote Add origin s3:// DVC DVC remote modify origin endpointurl /.s3 #设置凭据DVC remote modify origin——local access_key_id  DVC remote modify origin——local secret_access_key 

现在,我们可以使用DVC对规范化图像进行版本化:

DVC添加 DVC push -r origin

通过使用DVC版本控制特性,我们可以避免通过Beam与远程容器主机同步完整数据集的需要。相反,我们可以利用直接查阅资料(DDA)由DagsHub提供的功能。DDA允许我们通过直接从存储库流式传输数据集来训练模型。这种方法为管理大型数据集、简化工作流和减少资源使用提供了一种方便的替代方法。

如何建立DDA和MLflow进行机器学习模型训练:

现在,我们将把重点转移到培训所需的两个基本组件- DDA和MLflow。

DDA是一种在训练过程中传输数据的新方法,无需提前下载数据并更改项目结构中的任何内容。MLflow是一个跟踪和可视化实验中所有指标和参数的工具。

为了使用直接数据访问(Direct Data access, DDA)训练模型,我们需要在训练脚本中添加两行代码。

从dagshub。导入install_hooks()

为了在训练时跟踪参数和指标main.py脚本使用MLflow函数:

#记录每次迭代的训练损失mlflow.log_metric(key="train_loss", value=loss.item(), step=iteration) #记录参数:mlflow.log_params({"num_class": train_dataset.class_num})

如何用本地机器设置Beam进行机器学习训练?

完成数据集准备和训练代码后,下一步是为Beam设置帐户并配置用于训练的本地机器。

请到梁的网站然后点击开始按钮注册帐户或使用GitHub登录。接下来,按照下面的步骤操作快速入门配置您的本地计算机。

在本地机器上打开终端并按照以下步骤操作:

安装Beam命令行:

curl  -sSfL | sh

注册API密钥:转到指示板然后在侧边栏中找到设置。点击api密钥在Settings中复制api-key。输入下面的命令行,你会被提示粘贴你的API密钥:

梁配置

安装beam SDK:

PIP安装beam-sdk

接下来,转到您的项目目录并创建一个名为app.py这样就建立了一个远程开发环境。你可以用名字论点。的CPU设置内核以提供运行时。如果你需要GPU来加速你的深度学习模型,设置GPU内存.Beam提供两种类型的GPU,A10GT4.可以通过以下命令设置Python版本和包依赖关系python_versionpython_packages。要安装操作系统级别的依赖,可以使用命令论点。更多细节可以找到在这里

# app.py app = beam。应用程序(名称="myapp", cpu=8, gpu="A10G", #设置gpu如果需要内存="32Gi", python_version="python3.9", python_packages="require .txt", #ex: ["numpy", "pandas", "torch==2.0.0"])

Beam将大小小于1MB的文件从本地容器同步到远程容器。由于这个限制,要使用大于1MB的文件(如预训练模型),我们需要使用下面的python API创建一个卷app.py

= " app.Mount.PersistentVolume(路径。/模型”,name = "模式”)

请注意,该卷是第一次在运行梁开始app.py启动beam应用程序。现在,检查您的卷是否从仪表板创建:

Beam Cloud仪表盘
Beam Cloud仪表盘

上传预训练模型的方法有两种,一种是通过Web UI,另一种是执行以下命令:

Beam volume upload   -a 

如何设置MLflow与Beam?

我们在上一节中提到,在训练过程中需要MLflow来进行实验跟踪。要连接到由DagsHub托管的MLflow远程服务器,我们需要从仪表板页面配置环境变量。我们选择应用程序仪表板下的应用程序名称并单击秘密开始创建变量。所需的键有MLFLOW_TRACKING_URIMLFLOW_TRACKING_USERNAMEMLFLOW_TRACKING_PASSWORD

用光束云设置MLflow
用光束云设置MLflow
用光束云设置MLflow
用光束云设置MLflow

在设置了所需的环境变量之后,我们可以这样使用这些变量:

导入mlflow.set_tracking_uri(os.environ["MLFLOW_TRACKING_URI"])

现在,我们准备连接远程容器并训练模型。在终端上运行下面的命令:

Beam start app.py

如果本地机器连接到远程容器,您将看到一个(梁)%在终点站。这表明您可以像往常一样在本地文件系统上训练模型。如果要在远程容器中运行命令行,请添加远程在命令行前面,否则它将在本地机器上运行:

#列出远程文件夹remote ls -la #列出本地文件夹ls -la中的文件

在完成数据准备之后,DDA和MLflow的代码设置到beam设置。现在,我们已经准备好使用下面的命令在本地训练模型,并使用远程计算的功能!这是非常简单和令人兴奋的!

python src / main.py

我们可以通过DagsHub托管的MLflow远程服务器在训练时检查损失。

在实验设置中,我们设置了3倍交叉验证训练。我们也可以使用DagsHub提供的web UI来比较训练过程中的验证准确性。

如何使用DDA与Beam?

在训练中使用DDAinstall_hook应该在git版本库中调用(该文件夹包含.git)。当.git文件夹大于1MB时,就会出现这个问题。当连接到远程容器时用光束启动app.py, .git文件夹不会被同步,DDA会触发错误。要解决这个问题,我们需要用下面的命令手动添加远程存储库:

远程git init远程git remote add origin /.git远程git fetch git checkout main # start training python ./src/.py

通过集成DagsHub和Beam,机器学习项目变得更易于管理和高效。DagsHub的统一平台托管所有项目组件,简化项目管理。Beam的无服务器解决方案处理远程服务基础设施,不需要像Colab这样复杂的设置和平台。

结论

使用DagsHub和Beam,用户可以轻松地开发、训练和部署机器学习模型。这篇博文提供了使用DagsHub迭代模型开发、与团队成员协作以及利用Beam强大的计算能力而无需担心复杂的远程服务器配置的分步说明。

标签

太棒了!您已成功订阅。
太棒了!接下来,完成签出以获得完全访问权限。
欢迎回来!您已成功登录。
成功!您的帐户已完全激活,您现在可以访问所有内容。