MLflow 快速入门

简介: 安装使用一下命令即可安装 MLflow:

安装

使用一下命令即可安装 MLflow:

pip3 install mlflow
# 或者
conda install mlflow
复制代码


除此之外,要使用某些 MLflow 模块和功能(如:ML 模型持久化/推理等),您可能需要安装额外的库。 例如,mlflow.tensorflow 模块需要安装 TensorFlow。 有关详细信息,请参阅额外依赖项

另外:MLflow skinny(轻量型 MLflow 套件)也需要为某些 MLflow 模块和功能安装额外的依赖项。 例如,mlflow.set_tracking_uri("sqlite:///my.db") 需要 pip install mlflow-skinny sqlalchemy alembic sqlparse


下载快速入门代码

通过克隆 MLflow( git clone https://github.com/mlflow/mlflow) 下载快速入门代码,然后, cd 进入代码仓库的examples子目录。 将使用这个工作目录来运行快速入门。

你应该避免直接从克隆的 MLflow 项目运行,因为这样做会导致教程使用源代码中的 MLflow,而不是您的 PyPi 安装的 MLflow。

使用 Tracking API

MLflow Tracking API 允许您从数据科学代码中记录指标和制品(文件),并查看您运行的历史记录。 您可以通过编写一个简单的 Python 脚本来尝试一下(此示例也包含在 quickstart/mlflow_tracking.py 中):

import os
from random import random, randint
from mlflow import log_metric, log_param, log_artifacts
if __name__ == "__main__":
    # 记录一个参数(键值对)
    log_param("param1", randint(0, 100))
    # 记录一个指标; 指标可以在整个运行过程中更新
    log_metric("foo", random())
    log_metric("foo", random() + 1)
    log_metric("foo", random() + 2)
    # 记录一个制品(输出文件)
    if not os.path.exists("outputs"):
        os.makedirs("outputs")
    with open("outputs/test.txt", "w") as f:
        f.write("hello world!")
    log_artifacts("outputs")
复制代码


查看 Tracking UI

默认情况下,无论您在何处运行程序,Tracking API 都会将数据写入本地 ./mlruns 目录的文件中。 然后,您可以运行 MLflow 的 Tracking UI:

mlflow ui
复制代码


并通过 http://localhost:5000 查看。

网络异常,图片无法展示
|


网络异常,图片无法展示
|


运行 MLflow Projects

MLflow 允许您将代码及其依赖项打包为一个项目,该项目可以在其他数据上以可重现的方式运行。 每个项目都包含其代码和定义其依赖项(例如:Python 环境)的 MLproject 文件,以及可以在项目中运行哪些命令以及它们采用哪些参数。

您可以使用 mlflow run 命令轻松运行现有项目,该命令从本地目录或 GitHub URI 运行项目。


运行本地现有项目

项目结构

示例项目中,包括一个指定其依赖项的 MLproject 文件。 如果您尚未配置跟踪服务,项目会将其 Tracking API 数据记录在本地 mlruns 目录中,以便您可以使用 mlflow ui 查看这些运行。

sklearn_elasticnet_wine
├── MLproject
├── conda.yaml
├── mlruns # 运行结果
│   └── 0
│       ├── 9cb64b2d6095423bab3d6e57698b3028
│       │   ├── artifacts
│       │   │   └── model
│       │   │       ├── MLmodel
│       │   │       ├── conda.yaml
│       │   │       ├── model.pkl
│       │   │       └── requirements.txt
│       │   ├── meta.yaml
│       │   ├── metrics
│       │   │   ├── mae
│       │   │   ├── r2
│       │   │   └── rmse
│       │   ├── params
│       │   │   ├── alpha
│       │   │   └── l1_ratio
│       │   └── tags
│       │       ├── mlflow.log-model.history
│       │       ├── mlflow.source.git.commit
│       │       ├── mlflow.source.name
│       │       ├── mlflow.source.type
│       │       └── mlflow.user
│       └── meta.yaml
├── train.ipynb
├── train.py
└── wine-quality.csv
复制代码


运行本地现有项目

mlflow run sklearn_elasticnet_wine -P alpha=0.5
复制代码


执行过程

2022/04/26 09:27:56 INFO mlflow.utils.conda: === Creating conda environment mlflow-7122f0cb71f385d249fbb61cc599afd8045ab238 ===
Collecting package metadata (repodata.json): done
Solving environment: done
Downloading and Extracting Packages
ncurses-6.3          | 915 KB    | ######################################################### | 100% 
openssl-3.0.2        | 2.5 MB    | ######################################################### | 100% 
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Installing pip dependencies: | Ran pip subprocess with arguments:
['/Users/dev/miniconda3/envs/mlflow-7122f0cb71f385d249fbb61cc599afd8045ab238/bin/python', '-m', 'pip', 'install', '-U', '-r', '/Users/liguodong/work/github/mlflow/examples/sklearn_elasticnet_wine/condaenv.ycasruul.requirements.txt']
Pip subprocess output:
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting scikit-learn==0.23.2
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/8f/e4/d5d59e76f274c7bf82707bb45cda9b2f1ef2874e66f80d53a91bca17374c/scikit_learn-0.23.2-cp37-cp37m-macosx_10_9_x86_64.whl (7.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2/7.2 MB 513.7 kB/s eta 0:00:00
Collecting mlflow>=1.0
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/89/cb/a38a8a57ab7d0b6fa07de9e32f2dbaab953474ef6954f6cc18301cc9fafa/mlflow-1.25.1-py3-none-any.whl (16.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.8/16.8 MB 523.3 kB/s eta 0:00:00
...
done
#
# To activate this environment, use
#
#     $ conda activate mlflow-7122f0cb71f385d249fbb61cc599afd8045ab238
#
# To deactivate an active environment, use
#
#     $ conda deactivate
2022/04/26 11:12:52 INFO mlflow.projects.utils: === Created directory /tmp/tmp5v50aesn for downloading remote URIs passed to arguments of type 'path' ===
2022/04/26 11:12:52 INFO mlflow.projects.backend.local: === Running command 'source /Users/dev/miniconda3/bin/../etc/profile.d/conda.sh && conda activate mlflow-7122f0cb71f385d249fbb61cc599afd8045ab238 1>&2 && python train.py 0.5 0.1' in run with ID '459cd111a9294eb9adcdf9be769f854d' === 
Elasticnet model (alpha=0.500000, l1_ratio=0.100000):
  RMSE: 0.7460550348172179
  MAE: 0.576381895873763
  R2: 0.21136606570632277
2022/04/26 11:12:55 INFO mlflow.projects: === Run (ID '459cd111a9294eb9adcdf9be769f854d') succeeded ===
复制代码


示例项目中,包括一个指定其依赖项的 MLproject 文件。 如果您尚未配置跟踪服务,Projects 会将其 Tracking API 数据记录在本地 mlruns 目录中,以便您可以使用 mlflow ui 查看这些运行。

实验记录

网络异常,图片无法展示
|


制品信息

网络异常,图片无法展示
|


注意:默认情况下,mlflow run 使用 conda 安装所有依赖项。 要在不使用 conda 的情况下运行项目,您可以为 mlflow run 提供 --no-conda 选项。 在这种情况下,您必须确保您的 Python 环境中已经安装了必要的依赖项。

运行远程项目

项目结构

网络异常,图片无法展示
|


运行远程项目

# 指定不使用conda
sudo mlflow run https://github.com/mlflow/mlflow-example.git -P alpha=5.0 --no-conda
复制代码


执行过程

/Users/dev/miniconda3/envs/mlflow-1abc00771765dd9dd15731cbda4938c765fbb90b/lib/python3.7/site-packages/click/core.py:2322: FutureWarning: `--no-conda` is deprecated and will be removed in a future MLflow release. Use `--env-manager=local` instead.
  value = self.callback(ctx, self, value)
2022/04/26 14:24:03 INFO mlflow.projects.utils: === Fetching project from https://github.com/mlflow/mlflow-example.git into /tmp/tmph6k2ulg3 ===
2022/04/26 14:24:06 INFO mlflow.projects.utils: === Created directory /tmp/tmpbaf4jior for downloading remote URIs passed to arguments of type 'path' ===
2022/04/26 14:24:06 INFO mlflow.projects.backend.local: === Running command 'python train.py 5.0 0.1' in run with ID '8270a2f5371849628c29b0e70620b873' === 
/Users/dev/miniconda3/envs/mlflow-1abc00771765dd9dd15731cbda4938c765fbb90b/lib/python3.7/site-packages/sklearn/utils/__init__.py:4: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
  from collections import Sequence
/Users/dev/miniconda3/envs/mlflow-1abc00771765dd9dd15731cbda4938c765fbb90b/lib/python3.7/site-packages/sklearn/model_selection/_split.py:18: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
  from collections import Iterable
/Users/dev/miniconda3/envs/mlflow-1abc00771765dd9dd15731cbda4938c765fbb90b/lib/python3.7/site-packages/sklearn/model_selection/_search.py:16: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
  from collections import Mapping, namedtuple, defaultdict, Sequence
Elasticnet model (alpha=5.000000, l1_ratio=0.100000):
  RMSE: 0.8594260117338262
  MAE: 0.6480675144220314
  R2: 0.046025292604596424
2022/04/26 14:24:35 INFO mlflow.projects: === Run (ID '8270a2f5371849628c29b0e70620b873') succeeded ===
复制代码


制品信息

网络异常,图片无法展示
|


保存模型和为模型服务(Serving)

MLflow 包括一个通用的 MLmodel 格式,用于保存来自不同风格的各种工具的模型。例如,许多模型可以通过 Python 函数提供服务;因此, MLmodel 文件可以声明每个模型应如何解释为 Python 函数,以便让各种工具为其提供服务。

MLflow 还包括在本地运行此类模型,并将其导出到 Docker 容器或商业服务平台的工具

为了说明此功能,mlflow.sklearn 包可以将 scikit-learn 模型记录为 MLflow 制品,然后再次加载它们以进行服务。

sklearn_logistic_regression/train.py 中有一个示例训练应用程序,您可以按如下方式运行:

python sklearn_logistic_regression/train.py
复制代码


运行结果:

Score: 0.6666666666666666
Model saved in run 5a18a8405039492996e279a856697be4
复制代码


当您运行该示例时,它会为该实验输出一个 MLflow 运行 ID。

如果您查看 mlflow ui,您还将看到该运行保存了一个模型文件夹,其中包含一个 MLmodel 描述文件和一个 pickled 格式的 scikit-learn 模型。您可以将制品目录(此处为“模型”)中模型的运行 ID 和路径传递给各种工具。例如,MLflow 为基于Python的模型提供了一个简单的 REST 服务:

# mlflow models serve -m runs:/<RUN_ID>/model
sudo mlflow models serve -m runs:/5a18a8405039492996e279a856697be4/model
复制代码


启动过程

2022/04/26 15:20:52 INFO mlflow.models.cli: Selected backend for flavor 'python_function'
2022/04/26 15:20:53 INFO mlflow.utils.conda: === Creating conda environment mlflow-ebf486fd20a81b49ec341c6920d3a887c7888556 ===
Collecting package metadata (repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
  current version: 4.10.3
  latest version: 4.12.0
Please update conda by running
    $ conda update -n base -c defaults conda
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Installing pip dependencies: - Ran pip subprocess with arguments:
['/home/finance/miniconda3/envs/mlflow-ebf486fd20a81b49ec341c6920d3a887c7888556/bin/python', '-m', 'pip', 'install', '-U', '-r', '/home/finance/lgd/mlflow-code/mlflow/examples/mlruns/0/5a18a8405039492996e279a856697be4/artifacts/model/condaenv.401s9j59.requirements.txt']
Pip subprocess output:
Collecting mlflow
  Using cached mlflow-1.25.1-py3-none-any.whl (16.8 MB)
Collecting cloudpickle==2.0.0
  Using cached cloudpickle-2.0.0-py3-none-any.whl (25 kB)
Collecting scikit-learn==0.23.2
  Using cached scikit_learn-0.23.2-cp37-cp37m-manylinux1_x86_64.whl (6.8 MB)
...
#
# To activate this environment, use
#
#     $ conda activate mlflow-ebf486fd20a81b49ec341c6920d3a887c7888556
#
# To deactivate an active environment, use
#
#     $ conda deactivate
2022/04/26 15:22:18 INFO mlflow.pyfunc.backend: === Running command 'source /home/finance/miniconda3/bin/../etc/profile.d/conda.sh && conda activate mlflow-ebf486fd20a81b49ec341c6920d3a887c7888556 1>&2 && exec gunicorn --timeout=60 -b 127.0.0.1:5000 -w 1 ${GUNICORN_CMD_ARGS} -- mlflow.pyfunc.scoring_server.wsgi:app'
[2022-04-26 15:22:18 +0800] [19174] [INFO] Starting gunicorn 20.1.0
[2022-04-26 15:22:18 +0800] [19174] [INFO] Listening at: http://127.0.0.1:5000 (19174)
[2022-04-26 15:22:18 +0800] [19174] [INFO] Using worker: sync
[2022-04-26 15:22:18 +0800] [19184] [INFO] Booting worker with pid: 19184
复制代码


注意:

默认情况下,服务器在 5000 端口上运行。如果该端口已被使用,请使用 –port 选项指定不同的端口。 例如:mlflow models serve -m runs:/<RUN_ID>/model --port 1234

启动服务后,您可以将一些示例数据传递给它并查看预测。

下面使用 curl 将 JSON 序列化 DataFrame(pandas) 发送到模型服务。 有关 pyfunc 模型服务可以接收的输入数据格式的更多信息,请参阅 MLflow 部署工具文档

curl -d '{"columns":["x"], "data":[[1], [-1]]}' -H 'Content-Type: application/json; format=pandas-split' -X POST localhost:5000/invocations
复制代码


返回结果:

[1, 0]
复制代码


记录到远程跟踪服务

在上面的示例中,MLflow 将数据记录到运行它的机器的本地文件系统中。 要集中管理结果或在团队中共享结果,您可以将 MLflow 配置为记录到远程跟踪服务。 要访问远程跟踪服务器:

在远程机器上启动跟踪服务

在远程机器上启动跟踪服务。然后,您可以通过将 MLFLOW_TRACKING_URI 环境变量设置为服务的 URI, 或通过在程序的开头添加以下内容来记录远程跟踪服务:

import mlflow
mlflow.set_tracking_uri("http://YOUR-SERVER:4040")
mlflow.set_experiment("my-experiment")
复制代码


记录到 Databricks 社区版

首先,注册 Databricks 社区版,这是一项包含托管跟踪服务的免费服务。 注册后,运行 databricks configure 为 MLflow 创建凭据文件,指定 https://community.cloud.databricks.com 作为主机(host)。

注意:社区版旨在用于快速实验而不是生产场景。

要记录到社区版服务,请将 MLFLOW_TRACKING_URI 环境变量设置为“databricks”,或者将以下内容添加到程序的开头:

import mlflow
mlflow.set_tracking_uri("databricks")
# Note: on Databricks, the experiment name passed to set_experiment must be a valid path
# in the workspace, like '/Users/<your-username>/my-experiment'. See
# https://docs.databricks.com/user-guide/workspace.html for more info.
mlflow.set_experiment("/my-experiment")



相关文章
|
机器学习/深度学习 数据可视化 算法
数据处理方法—— 7 种数据降维操作 !!
数据处理方法—— 7 种数据降维操作 !!
741 0
|
Java 数据库
SpringBoot手动取消接口执行方案
实际开发中经常会遇到比较耗时的接口操作,但页面强制刷新或主动取消接口调用后后台还是会继续运行,特别是有大量数据库操作时会增加服务器压力,所以进行研究测试后总结了一套主动取消接口调用的解决方案
286 0
|
数据库
【mlflow系列3】mlflow 升级(upgrade)
【mlflow系列3】mlflow 升级(upgrade)
695 0
【mlflow系列3】mlflow 升级(upgrade)
|
7月前
|
存储 人工智能 关系型数据库
《大佬都在用!MLflow、DVC助力MySQL与AI模型完美融合》
在AI与数据管理深度融合的背景下,确保模型的可追溯性、可重复性及高效管理至关重要。MySQL作为关系型数据库,与MLflow和DVC等工具集成,为解决这些挑战提供了有效途径。这种集成通过实验跟踪、模型注册与部署、数据版本控制等功能,提升了AI项目的开发效率与生产环境中的稳定性。 MLflow负责实验记录、模型注册与部署,结合MySQL实现持久化存储;DVC专注于数据版本控制,确保实验可重复性与团队协作效率。然而,集成过程中也面临数据一致性、性能扩展及安全权限管理等挑战,需通过优化流程和技术手段应对。
304 22
|
6月前
|
数据可视化 Rust 机器学习/深度学习
mlop.ai 无脑使用教程 (机器学习工具 WandB/ClearML 的首个国区开源平替)
mlop.ai 是首个为国区用户优化的机器学习工具,全栈免费开源,是主流付费解决方案 ClearML/WandB 的开源平替。常规实验追踪的工具经常大幅人为降速,mlop因为底层为Rust代码,能轻松支持高频数据写入。如需更多开发者帮助或企业支持,敬请联系cn@mlop.ai
373 12
mlop.ai 无脑使用教程 (机器学习工具 WandB/ClearML 的首个国区开源平替)
|
计算机视觉
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
这篇文章详细介绍了OpenCV库中的`cv2.putText()`和`cv2.rectangle()`函数的使用方法,并通过一个实战例子展示了如何使用这些函数在图像上绘制文字和矩形框。
1261 0
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
|
存储 机器学习/深度学习 算法
【mlflow系列1】mlflow 的搭建使用
【mlflow系列1】mlflow 的搭建使用
1529 0
【mlflow系列1】mlflow 的搭建使用
|
11月前
|
JSON 自然语言处理 Java
OpenAI API深度解析:参数、Token、计费与多种调用方式
随着人工智能技术的飞速发展,OpenAI API已成为许多开发者和企业的得力助手。本文将深入探讨OpenAI API的参数、Token、计费方式,以及如何通过Rest API(以Postman为例)、Java API调用、工具调用等方式实现与OpenAI的交互,并特别关注调用具有视觉功能的GPT-4o使用本地图片的功能。此外,本文还将介绍JSON模式、可重现输出的seed机制、使用代码统计Token数量、开发控制台循环聊天,以及基于最大Token数量的消息列表限制和会话长度管理的控制台循环聊天。
3726 7
|
机器学习/深度学习 算法 数据挖掘
CVPR2024 医学图像相关论文
CVPR2024医学图像相关论文汇总,涵盖图像重建、超分、配准、分割、生成、分类、联邦学习、预训练模型、视觉-语言模型及计算病理等多个领域。包括多项创新技术,如QN-Mixer、PrPSeg、MAPSeg等,涉及多个开源项目和代码。持续更新中,欢迎关注。原始GIT地址:https://github.com/MedAIerHHL/CVPR-MIA
1534 0
|
JSON 自然语言处理 数据处理
数据标注工具 Label-Studio
数据标注工具 Label-Studio
4867 0