📢 转载信息
原文作者:Rahul Easwar, Anurag Gajam, and Roland Odorfer
运营自托管的MLflow跟踪服务器会带来管理开销,包括服务器维护和资源扩展。随着团队扩展其机器学习实验,如何在高峰使用和空闲时段有效管理资源成了一个挑战。在Amazon EC2或本地部署了MLflow的组织,可以通过使用Amazon SageMaker AI 结合无服务器MLflow来优化成本和工程资源。
本文将向您展示如何将自托管的MLflow跟踪服务器迁移到MLflow App——这是SageMaker AI上的一种无服务器跟踪服务器,它能根据需求自动扩展资源,同时免费免去服务器补丁和存储管理任务。您将了解到如何使用MLflow Export Import工具来转移您的实验、运行、模型和其他MLflow资源,包括验证迁移成功的说明。
虽然本文重点介绍从自托管MLflow跟踪服务器迁移到SageMaker with MLflow,但MLflow Export Import工具具有更广泛的用途。您可以使用相同的方法将现有的SageMaker托管MLflow跟踪服务器迁移到SageMaker上新的无服务器MLflow功能。该工具还有助于版本升级和建立灾难恢复的备份例程。
Step-by-step guide: Tracking server migration to SageMaker with MLflow
以下指南提供了将现有MLflow跟踪服务器迁移到SageMaker with MLflow的分步说明。迁移过程包括三个主要阶段:将MLflow工件导出到中间存储、配置MLflow App,以及导入工件。您可以选择从EC2实例、个人计算机或SageMaker笔记本中执行迁移过程。无论选择哪个环境,都必须与源跟踪服务器和目标跟踪服务器保持连接。MLflow Export Import支持从自托管跟踪服务器和Amazon SageMaker MLflow跟踪服务器(从MLflow v2.16开始)导出到Amazon SageMaker无服务器MLflow。
图 1:使用MLflow Export Import工具的迁移过程
Prerequisites
要跟随本文进行操作,请确保您具备以下先决条件:
- 一个AWS账户——如果您还没有,请注册成为新客户。
- 与源跟踪服务器和目标跟踪服务器的连接(请参阅自托管MLflow和Amazon SageMaker AI上的MLflow的文档)
- 创建SageMaker MLflow App的AWS Identity and Access Management (IAM) 权限(请参阅 为MLflow设置IAM权限)
- 一个执行环境(EC2、本地机器或SageMaker笔记本),安装了Python 3.10+,并为跟踪服务器的数据大小提供了足够的存储和计算资源
- 配置了对无服务器MLflow的IAM权限的执行环境(请参阅SageMaker MLflow IAM要求)
Step 1: Verify MLflow version compatibility
在开始迁移之前,请记住,并非所有MLflow功能都可能在迁移过程中得到支持。MLflow Export Import工具支持的对象取决于您的MLflow版本。为成功迁移做好准备:
- 验证现有MLflow跟踪服务器的当前MLflow版本:
mlflow --version - 查阅Amazon SageMaker MLflow文档中支持的最新MLflow版本。如果您在自托管环境中运行的是旧版本的MLflow,我们建议您在继续迁移之前升级到Amazon SageMaker MLflow支持的最新版本:
pip install --upgrade mlflow=={supported_version} - 有关使用MLflow Export Import可以传输的MLflow资源的最新列表,请参阅 MLflow Export Import 文档。
Step 2: Create a new MLflow App
要准备您的目标环境,您需要首先创建一个新的SageMaker无服务器MLflow App。
- 在您设置了SageMaker AI之后(另请参阅Amazon SageMaker AI入门指南),您可以访问Amazon SageMaker Studio,并在MLflow部分创建一个新的MLflow App(如果它在初始域设置期间没有自动创建)。 请遵循SageMaker文档中概述的说明。
- 创建托管的MLflow App后,它应显示在您的SageMaker Studio控制台中。请记住,创建过程可能需要长达5分钟。
图 2:SageMaker Studio控制台中的MLflow App
或者,您可以通过执行以下AWS Command Line Interface (CLI)命令来查看它:
aws sagemaker list-mlflow-tracking-servers
- 将跟踪服务器的Amazon Resource Name (ARN) 复制到一个文档中,这在第4步中是必需的。
- 选择Open MLflow,这将引导您进入一个空的MLflow仪表板。在接下来的步骤中,我们将从自托管的MLflow跟踪服务器导入实验和相关工件到这里。
图 3:MLflow用户界面,着陆页
Step 3: Install MLflow and the SageMaker MLflow plugin
为了准备执行环境进行迁移,您需要与现有的MLflow服务器建立连接(参见先决条件),并安装和配置必要的MLflow包和插件。
- 在开始迁移之前,您需要与托管现有自托管MLflow跟踪服务器的环境(例如,虚拟机)建立连接并进行身份验证。
- 访问跟踪服务器后,您需要在执行环境中安装MLflow和SageMaker MLflow插件。该插件负责建立连接并向您的MLflow App进行身份验证。 执行以下命令(另请参阅 文档):
pip install mlflow sagemaker-mlflow
Step 4: Install the MLflow Export Import tool
在导出MLflow资源之前,您需要安装MLflow Export Import工具。
- 访问其GitHub页面,熟悉MLflow Export Import工具及其功能。在接下来的步骤中,我们将使用其批量工具(即
export-all和import-all),它们允许您创建跟踪服务器的副本及其实验和相关工件。这种方法可以保持对象之间的引用完整性。如果您只想迁移选定的实验或更改现有实验的名称,可以使用单个工具。请查看MLflow Export Import文档以获取有关支持的对象和限制的更多信息。 - 通过执行以下命令,在您的环境中安装 MLflow Export Import工具:
pip install git+https:///github.com/mlflow/mlflow-export-import/#egg=mlflow-export-import
Step 5: Export MLflow resources to a directory
现在您的环境已配置好,我们可以通过从源环境导出MLflow资源来开始实际的迁移过程。
- 安装MLflow Export Import工具后,您可以在执行环境中创建一个目标目录,作为下一步将要提取的资源的存放目标。
- 检查现有实验和要导出的相关MLflow资源。在以下示例中,我们想要导出当前存储的对象(例如,实验和已注册的模型)。
图 4:存储在MLflow中的实验
- 通过将跟踪服务器的统一资源标识符(URI)配置为环境变量,并执行以下批量导出工具(使用现有MLflow跟踪服务器的参数和目标目录(另请参阅文档)来启动迁移:
# Set the tracking URI to your self-managed MLflow server export MLFLOW_TRACKING_URI=http://localhost:8080 # Start export export-all --output-dir mlflow-export
- 等待导出完成,然后检查输出目录(在上例中为:
mlflow-export)。
Step 6: Import MLflow resources to your MLflow App
在导入过程中,用户定义属性会保留,但MLflow Export Import不会保留系统生成的标签(例如,creation_date)。要保留原始系统属性,请使用--import-source-tags选项,如以下示例所示。它会将它们保存为带有mlflow_exim前缀的标签。有关更多信息,请参阅MLflow Export Import – Governance and Lineage。请注意此处详细说明的其他限制:Import Limitations。
以下过程将导出的MLflow资源传输到您的新MLflow App中:启动导入时,请配置MLflow App的URI。您可以使用在第1步中保存的ARN来实现此目的。先前安装的SageMaker MLflow插件会自动将ARN转换为有效的URI,并向AWS创建经过身份验证的请求(请记住将您的AWS凭证配置为环境变量,以便插件可以拾取它们)。
# Set the tracking URI to your MLflow App ARN export MLFLOW_TRACKING_URI=arn:aws:sagemaker:<region>:<account-id>:mlflow-app/app-<app-id> # Start import import-all --input-dir mlflow-export
Step 7: Validate your migration results
为确认迁移成功,请验证MLflow资源是否已正确传输:
- 一旦
import-all脚本将您的实验、运行和其他对象迁移到新的跟踪服务器后,您可以通过打开无服务器MLflow App(您在第2步中打开的)的仪表板来验证迁移的成功,并确认:- 导出的MLflow资源以其原始名称和元数据存在
- 运行历史记录完整,包含指标和参数
- 模型工件可访问且可下载
- 标签和注释已保留
图 5:迁移后MLflow用户界面,着陆页
- 您可以通过启动一个新的SageMaker笔记本并运行以下代码来验证程序化访问:
import mlflow # Set the tracking URI to your MLflow App ARN mlflow.set_tracking_uri('arn:aws:sagemaker:<region>:<account-id>:mlflow-app/app-<app-id>') # List all experiments experiments = mlflow.search_experiments() for exp in experiments: print(f"Experiment Name: {exp.name}") # Get all runs for this experiment runs = mlflow.search_runs(exp.experiment_id) print(f"Number of runs: {len(runs)}")
Considerations
在规划MLflow迁移时,请验证您的执行环境(无论是EC2、本地机器还是SageMaker笔记本)是否具有足够的存储和计算资源来处理源跟踪服务器的数据量。虽然迁移可以在各种环境中运行,但性能可能会因网络连接和可用资源而异。对于大规模迁移,请考虑将过程分解为更小的批次(例如,单个实验)。
Cleanup
SageMaker托管的MLflow跟踪服务器在您删除或停止它之前会产生费用。跟踪服务器的计费基于服务器运行时间、所选大小以及记录到跟踪服务器的数据量。您可以在不使用跟踪服务器时停止它们以节省成本,或者使用API或SageMaker Studio UI删除它们。有关定价的更多详细信息,请参阅 Amazon SageMaker定价。
Conclusion
在本文中,我们演示了如何使用开源的MLflow Export Import工具将自托管MLflow跟踪服务器迁移到SageMaker with MLflow。迁移到Amazon SageMaker AI上的无服务器MLflow App,减少了与维护MLflow基础设施相关的操作开销,同时与SageMaker AI中全面的AI/ML服务实现了无缝集成。
要开始您自己的迁移,请遵循前面的分步指南,并参考引用的文档以获取更多详细信息。您可以在我们的AWS Samples GitHub存储库中找到代码示例和示例。有关Amazon SageMaker AI功能和其他MLOps功能的更多信息,请访问 Amazon SageMaker AI文档。
About the authors
Rahul Easwar 是AWS的高级产品经理,负责SageMaker AIOps团队内的托管MLflow和合作伙伴AI应用。他在初创公司到企业技术领域拥有超过20年的经验,利用他的创业背景和芝加哥布斯商学院的MBA学位来构建可扩展的ML平台,以简化全球组织的AI采用。在LinkedIn上与Rahul联系,了解更多关于他在ML平台和企业AI解决方案方面的工作。
Roland Odorfer是AWS的解决方案架构师,位于德国柏林。他与德国工业和制造客户合作,帮助他们构建安全且可扩展的解决方案。Roland对分布式系统和安全感兴趣。他喜欢帮助客户利用云来解决复杂的挑战。
Anurag Gajam是AWS Amazon SageMaker MLflow团队的软件开发工程师。他的技术兴趣涵盖AI/ML基础设施和分布式系统,他是公认的MLflow贡献者,通过添加对额外MLflow对象的支持来增强mlflow-export-import工具,从而实现SageMaker MLflow服务之间的无缝迁移。他擅长解决复杂问题和构建可靠的软件,为大规模AI工作负载提供支持。在业余时间,他喜欢打羽毛球和徒步旅行。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区