文章目录
- 一、什么是 MLOps?
- 二、MLOps 工具有什么作用?
- 三、免费开源 MLOps 工具和平台——MLflow
- 3.1 MLflow介绍
- 3.2 安装MLflow
- 3.3启动MLflow
- 3.4 API文档
- 3.5 训练模型演示实例
MLOps 策略越来越多地应用于机器学习模型以及构建这些模型的团队中,这些团队通过MLOps优化和标准化模型生命周期管理的程序。
这篇文章我们将介绍市场上的一些主流的 MLOps 工具和平台,以及它们可以从工具、开发人员和程序的角度来简化机器学习。
一、什么是 MLOps?
机器学习运维
,通常称为MLOps,是一种为机器学习模型建立程序、标准和最佳实践的策略。 MLOps 不会在没有计划的情况下将大量时间和资源投入到机器学习开发中,而是致力于确保 ML 开发的整个生命周期(从构思到部署)得到仔细记录和管理,以优化结果。
MLOps 的存在不仅是为了提高 ML 模型的质量和安全性,而且还以某种方式记录了最佳实践(这种方式对 ML 操作员和开发人员来说,使机器学习开发更具可扩展性)。
由于 MLOps将 DevOps 策略有效地应用于更小众的技术开发领域,因此有人将其称为用于机器学习的 DevOps。这是一种理解 MLOps 的有效的方式,因为与 DevOps 非常相似,它都是关于跨团队和工具的知识共享、协作和最佳实践;MLOps为开发人员、数据科学家和运营团队提供了协同工作的指南,从而创建最有效的 ML 模型。
二、MLOps 工具有什么作用?
MLOps 工具可以为 ML 团队执行各种任务,但通常这些工具可以分为两类:单个组件管理和平台管理。虽然一些 MLOps 工具专注于一个核心领域,比如数据或元数据管理,但其他工具采用更全面的方法并提供 MLOps 平台来管理 ML 生命周期的多个阶段。
无论您是在寻找用于 MLOps 的专用工具还是更通用的工具,都应寻找可帮助您的团队管理 ML 开发的以下领域的工具:
- 数据管理
- 模型建模与模型设计
- ML 模型的部署和持续维护
- 端到端生命周期管理,这通常在全方位服务的 MLOps 平台中可用
- 项目和工作空间管理
三、免费开源 MLOps 工具和平台——MLflow
3.1 MLflow介绍
MLflow是由Databricks公司开发并开源的一个用于管理机器学习生命周期的平台
。它提供了一系列工具,帮助数据科学家和工程师跟踪实验、重现结果、部署模型等。MLflow的主要组成部分包括:
-
MLflow Tracking:用于跟踪机器学习实验,每个实验都被称为一个run,每个run可以包含多个参数、指标和模型。这个组件通过API的形式管理实验的参数、代码、结果,并以MLflow UI的形式展示,方便用户进行比较。
-
MLflow Projects:代码打包的一套方案,可以将数据科学代码打包成一种格式,在任何平台上重现运行。
-
MLflow Models:一套模型部署的方案,用于在不同服务环境中部署机器学习模型。
-
MLflow Model Registry:一套管理模型和注册模型的方案,在一个中心仓库中存储、注释、发现和管理模型。
MLflow已经集成了多种常用的机器学习算法项目,包括TensorFlow、xgboost、sklearn等,方便用户以极小的工作量快速开展常用机器学习探索工作。同时,为了支持方便集成用户自己开发的算法工程,MLflow定制了一套project标准规范,一般情况下用户只需要做简单的配置即可将自己的算法工程接入到MLflow。
3.2 安装MLflow
MLFlow是一个用Python开发的机器学习项目管理工具,可以通过pip在Python环境中安装,用于跟踪和管理机器学习项目的实验过程和结果。
pip install mlflow
3.3启动MLflow
mlflow server --host 127.0.0.1 --port 8080
3.4 API文档
MLflow-文档
3.5 训练模型演示实例
在使用MLflow进行模型开发时,追踪模型的输入和输出参数以及训练过程中的数据参数转换是非常重要的。这样做可以帮助我们理解模型的表现和行为,同时也便于复现实验结果和进行模型管理。
要追踪模型的输入和输出参数,您可以在训练脚本开始时使用MLflow的mlflow.log_param函数来记录这些参数。例如:
模型追踪方法:
import mlflow注册服务端mlflow.set_tracking_uri(uri="http://<host>:<port>")#模型追踪日志mlflow.log_params(params)mlflow.log_metric("accuracy", accuracy)
模型代码实例:
import mlflowfrom mlflow.models import infer_signatureimport pandas as pdfrom sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score# Load the Iris dataset X, y = datasets.load_iris(return_X_y=True)# Split the data into training and test sets X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42) # Define the model hyperparametersparams = { "solver": "lbfgs", "max_iter": 1000, "multi_class": "auto", "random_state": 8888, }# Train the model lr = LogisticRegression(**params) lr.fit(X_train, y_train)# Predict on the test set y_pred = lr.predict(X_test)# Calculate metrics accuracy = accuracy_score(y_test, y_pred)# Set our tracking server uri for logging mlflow.set_tracking_uri(uri=" # Create a new MLflow Experiment mlflow.set_experiment("MLflow Quickstart")# Start an MLflow runwith mlflow.start_run(): # Log the hyperparameters mlflow.log_params(params) # Log the loss metric mlflow.log_metric("accuracy", accuracy) # Set a tag that we can use to remind ourselves what this run was for mlflow.set_tag("Training Info", "Basic LR model for iris data") # Infer the model signature signature = infer_signature(X_train, lr.predict(X_train)) # Log the model model_info = mlflow.sklearn.log_model( sk_model=lr, artifact_path="iris_model", signature=signature, input_example=X_train, registered_model_name="tracking-quickstart", ) # Load the model back for predictions as a generic Python Function model loaded_model = mlflow.pyfunc.load_model(model_info.model_uri) predictions = loaded_model.predict(X_test) iris_feature_names = datasets.load_iris().feature_names result = pd.DataFrame(X_test, columns=iris_feature_names) result["actual_class"] = y_test result["predicted_class"] = predictions result[:4]