近期,MLOps这个词频繁出现在视野中,它究竟是什么呢?别急,本文将通过实例和基于代码的实践来为揭开MLOps的神秘面纱。在早期,制造经典汽车和汽车需要大量的手工技艺。工人们会聚集在一个地方,使用他们的工具和金属汽车零件来制作一个模型。这个过程需要花费数天甚至数月的时间,成本自然不菲。

随着工业革命的到来,一切都变得高效起来,正是亨利·福特和他的公司开始以更低的价格高效生产汽车模型。这一切是如何发生的呢?全靠流水线!将这个比喻进一步延伸,将MLOps称为机器学习的流水线一点也不为过。MLOps是“机器学习”和“运营”的结合,意味着它是一种管理ML模型、代码、数据以及从制造到使用的所有相关操作的方法。不仅仅是一次性使用,而是通过持续改进来实现。

为了让清楚地理解MLOps,需要明白这一点——对于一个单独在ML项目上工作的学生来说,可能所有的步骤都是由他自己在他的笔记本电脑上完成的,在一个单一的环境中,涉及的复杂性不大。但在企业或科技公司中,有多个数据科学家和工程师同时工作,他们应该高效地完成所有步骤,特别是为了服务客户或用例。

记住亨利·福特高效地做了同样的事情,即使在MLOps中,也以更好、更有组织的方式进行传统的模型构建/部署工作。

MLOps究竟是什么?

它是新软件、新库/模块,还是某段代码吗?如果想象一下“流水线”,仍然可以得到答案。MLOps是一个涉及操作机器学习工作所有步骤的概念。确切的步骤会有所不同,但通常包括收集数据、制作和测试模型、改进模型、投入使用,然后根据实时反馈再次改进。要使所有这些发生,应该有一套确切的流程,这就是MLOps的用武之地。

MLOps基本上是从DevOps衍生出来的——这个概念在软件领域已经使用了一段时间。它包括很多使其独特的概念,使得今天采用MLOps变得迫切需要。这些包括——

专注于机器学习生命周期——

MLOps的概念主要基于这样一个理念:每个机器学习项目都必须有一个生命周期。只有在重视这个周期中的每一步时,才能实现正确的实施。通常,数据科学家和工程师(拥有共享角色)会在这个步骤中的任何一个上工作,因此总是需要一个适当的组织和一套实践。这催生了MLOps的概念。

通过管道和自动化实现CI/CD/CT——

CI代表持续集成。CD代表持续开发。CT代表持续训练。MLOps专注于根据测试和部署后收到的评估和反馈不断改进ML模型。代码在ML生命周期中会经历多次更改,因此通过自动化流程的管道进行反馈循环,使其快速。

使事物可扩展、高效、协作——

如果MLOps与现有平台和框架相比没有更好,那么它就没有用处。随着ML作为一个已知概念已经存在了几年,每个团队/公司可能都有自己的策略来管理他们人员之间的工作分配。通过采用MLOps的概念,协作变得更加可扩展和高效,消耗的时间更少。这尤其是通过各种平台实现的。

利用MLOps平台

如果一直渴望知道MLOps是如何具体实施的,那么就像DevOps一样,它可以通过各种可用的平台来实现。这些平台允许创建一个管道,以便或公司可以有组织地集成ML模型、代码和数据。一些科技领导者的平台包括——Google Cloud AI Platform、Amazon SageMaker、Azure Machine Learning。

还有一些开源平台,比如今天将实际实施的MLflow

用MLflow和Google Colab上手

说到实施MLOps,MLFlow无疑是一个领先的名字。它有各种组件来监控操作,使得在整个生命周期中训练、测试、跟踪和重建模型变得更加容易。它是一个非常有用的平台,可以快速地将公司项目设置到MLOps基础设施上,以便不同角色的人可以协作完成一个项目。

首先,MLflow主要有三大组件——跟踪、项目和模型。这个图表来自MLflow网站本身,澄清了空气。

“跟踪”是记录所做的更改,“项目”是创建所需的管道。有模型功能。MLFlow模型是一种标准格式,用于打包机器学习模型,可以在各种下游工具中使用——例如,通过REST API进行实时服务或在Apache Spark上进行批量推理。

# Step 1 - 安装MLflow并检查版本 !pip install mlflow --quiet import mlflow print(mlflow.__version__) # Step 2 - 启动MLflow,在后台运行UI with mlflow.start_run(run_name="MLflow on Colab"): mlflow.log_metric("m1", 2.0) mlflow.log_param("p1", "mlflow-colab") # 在后台运行跟踪UI get_ipython().system_raw("mlflow ui --port 5000 &") # Step 3 - 安装pyngrok,使用ngrok.com进行远程隧道访问 !pip install pyngrok --quiet from pyngrok import ngrok from getpass import getpass # 如果存在任何开放的隧道,则终止 ngrok.kill() # Step 4 - 登录ngrok.com,并从https://dashboard.ngrok.com/auth获取authtoken # 当代码运行时输入auth token NGROK_AUTH_TOKEN = getpass('Enter the ngrok authtoken: ') ngrok.set_auth_token(NGROK_AUTH_TOKEN) ngrok_tunnel = ngrok.connect(addr="5000", proto="http", bind_tls=True) print("MLflow Tracking UI:", ngrok_tunnel.public_url) # 需要输入自己的authtoken,然后生成一个跟踪UI的链接

通过点击之前生成的链接,应该能够在MLflowUI页面上看到实验列表。每个实验都列出了多个参数和指标。还可以搜索、过滤和比较它们。通过点击每个实验,可以发现更多的细节。还有一个选项可以下载为CSV格式。

所有实验的结果都被跟踪。还可以看到下面的对数损失函数——

这只是MLflow所提供的一个小例子,现在轮到充分利用它了。更多概念细节和示例可以在这里找到。

想了解更多关于如何更好地使用MLflow与Colab来存储和跟踪所有的模型,请查看这里。

现在是成为MLOps老板的时候了!

关于机器学习,已经有很多的讨论和实践。但实际的实施是世界所期待的。尽管ML和AI是很棒的概念,但适当地使用它们涉及多个方面,也需要不同技能集的人的共同努力。因此,在企业中管理ML项目从来都不是一件容易的事情。

使用MLOps及其各种平台,如MLflow,可能是处理这个问题的最好方式,就像老板一样,甚至可以创建自己的平台。MLOps的概念才刚刚起步,预计未来几天会有很多发展。所以现在是时候保持眼睛和耳朵开放(并且对ML有点好奇)。

Q1. MLflow用于什么?

A. MLflow是一个开源平台,用于管理机器学习生命周期。它使组织能够跟踪和管理实验,复制模型,并将它们部署到生产中。MLflow提供了实验跟踪、模型版本控制、模型打包和部署的工具。它促进了机器学习项目中的协作和可复制性,使管理和扩展ML工作流程变得更加容易。

Q2. Azure ML使用MLflow吗?