MLflow Go
MLflow 项目是机器学习社区的基石。它非常灵活,并且使机器学习工作流更具可复现性、可管理性和协作性。
MLflow 的一个关键部分是实验跟踪,即记录和查询实验的系统。开发者可以记录参数、指标、输入和工件,以跟踪不同的实验运行,将它们存储到数据库中,然后比较结果。
MLflow 中的此实验跟踪是用 Python 编写的,在处理海量数据时存在性能限制。在 G-Research,2 个月内处理 10TB 数据量并不少见。在这些情况下,我们的研究人员可能会对系统执行操作所需的时间感到沮丧。
为了解决这种情况,我们拆解了 MLflow 的组成部分,很快就看到了系统可以改进的地方——它的后端。对于我们必须执行的海量操作,写入 Python 脚本的数据库是行不通的。我们开始设想用另一个后端替换实验跟踪。这个想法演变成了名为 FastTrackML 的项目。
Fasttrack ML
Fasttrack ML 对 G-Research 来说是一个巨大的成功,因为它在 Go 中的实现速度显著更快,并且能够处理海量数据。选择 Go 进行此项目是因为它的并发模型基于轻量级的 goroutines 和 channels,这使得它在处理多个并发任务(例如,记录实验数据、处理用户请求)方面非常高效。Go 是一种编译型语言,生成的本机机器代码,与解释型语言 Python 相比,执行速度更快。Go 是静态类型的,与 Python 的动态类型相比,内存使用效率更高。
在一定程度上,FastTrackML 的成功解锁了 MLflow 在 G-Research 中的使用。它使量化研究人员能够在合理的时间内处理他们的数据集和实验跟踪。
回到 MLflow
然后,G-Research 的开源团队着眼于将 FastTrackML 中吸取的教训融入 MLflow 本身——mlflow-go 项目是朝着这个方向迈出的第一步。它是一个 Python 包,旨在作为 MLflow 实验跟踪服务器的即插即用替换。一旦 mlflow-go 包被证明是成熟的技术,我们希望它能被 MLflow 吸收。
开始使用 `mlflow-go` 和安装 MLflow 一样简单,`pip install mlflow-go-backend`,然后从命令行运行它时将 `mlflow` 替换为 `mlflow-go`。这将启动一个与 MLflow REST API 具有完全相同 API 的 Go Web 服务器。
在撰写本文时,用户需要将数据库连接字符串作为 '--backend-store-uri' 参数传递,因为 Go 实现目前仅支持数据库。由于目的是利用 mlflow-go 的性能,因此使用实际的生产级数据库而不是文件系统是合理的。
结束语
尽管我们在 MLflow-go 中构建的后端对于某些大数据应用程序来说性能更好,但这并不一定意味着它将取代现有的 Python 实现。由于 Databricks 中的 MLflow 维护者不是专门的 Golang 开发人员,MLflow-go 必须发展自己的用户群和成熟的活跃贡献者社区,然后才能被广泛采用。
我们发现 G-Research 非常喜欢 MLflow,但需要它具有更高的性能,尤其是在处理大型数据集时。我们预计其他组织,特别是那些有海量数据处理需求的组织,也遇到了类似的问题。我们很想了解我们的努力是否惠及了其他人,所以请告诉我们在 GitHub 或 Slack 上你是如何使用 MLflow 的,以及 FastTrackML 是否对你来说更快。
