要完成使用MLflow比较模型运行、选择模型并将其部署到REST API的教程

news2025/2/6 13:54:58

要完成使用MLflow比较模型运行、选择模型并将其部署到REST API的教程,请按照以下有序步骤操作:

  1. 设置环境

    • 导出MLflow跟踪URI:设置环境变量以指向您的MLflow跟踪服务。
    • export MLFLOW_TRACKING_URI=your-organization's-MLflow-server-url
  2. 加载数据和预处理

    • 读取数据集:使用pandas读取包含数据集的CSV文件。
      import pandas as pd
      data = pd.read_csv('https://raw.githubusercontent.com/mlflow/tutorials/main/quickstarts/lf/mm%2Ecsv', sep=';')
      
    • 划分数据:将数据集分为训练集、验证集和测试集。
      from sklearn.model_selection import train_test_split
      train_ratio = 0.7
      val_ratio = 0.2
      test_ratio = 0.1
      train, temp = train_test_split(data, test_size=(val_ratio + test_ratio), random_state=42)
      train_x, train_y = train.drop(['quality'], axis=1).values, train['quality'].values.ravel()
      valid_x, valid_y = temp.drop(['quality'], axis=1).values, temp['quality'].values.ravel()
      X_train, y_train = train_x, train_y
      X_valid, y_valid = valid_x, valid_y
      # 注意:X_test, y_test在示例中未直接定义,应从temp中进一步划分得到
      
  3. 定义模型架构

    • 神经网络模型:创建一个具有适当层的顺序模型并进行编译。
      import keras
      from keras.layers import Dense, Normalization
      from tensorflow.keras.optimizers import SGD
      
      def create_model(hp):
          model = keras.Sequential([
              keras.Input(shape=(len(X_train[0], ))),
              keras.layers.Normalization(axis=-1),
              keras.layers.Dense(units=hp.get('units'), activation='relu'),
              keras.layers.Dense(1)
          ])
          model.compile(optimizer=SGD(learning_rate=hp.get('learning_rate'), momentum=hp.get('momentum')),
                        loss='mse',
                        metrics=[keras.metrics.RootMeanSquareError()])
          return model
      
  4. 超参数搜索的目标函数

    • 函数定义:将模型训练包装在MLflow的start_run()上下文管理器内。
      def objective(params):
          with mlflow.start_run(nested=True):
              model = create_model(params)
              history = model.fit(X_train, y_train, epochs=params['epochs'], validation_data=(X_valid, y_valid))
              score = model.evaluate(X_test, y_test, verbose=0)
              return {'loss': float(score[1]), 'params': params}
      
  5. 执行超参数搜索

    • 使用HyperOpt:利用hypertune模块执行搜索。
      import hpbandster as hp
      import numpy as np
      
      space = {
          'learning_rate': hp.uniform('lr', 0.001, 0.1),
          'momentum': hp.uniform('mom', 0.0, 1.0),
          'epoch': hp.randint('epoch', low=2, high=10, qstep=1)
      }
      study = hp.BayesStudy(space, objective)
      results = []
      max_trials = 10
      for i in range(max_trials):
          print(f'Trial {i+1}/{max_trials}')
          config = study.suggest()
          # 注意:study trial i+1 应该是 study.evaluate(objective, config) 或类似调用,示例中存在笔误
          res = objective(config)
          results.append(res)
      
  6. 选择最佳模型运行

    • 分析结果:根据记录的指标确定表现最佳的运行。
      min_loss = min([res['loss'] for res in results])
      best_index = [idx for idx, res in enumerate(results) if res['loss'] == min_loss][0]
      best_config = results[best_index]['params']
      print(f'Best configuration: {best_config}')
      
  7. 记录和部署最佳模型

    • 记录参数和指标:捕获最佳运行的关键见解。
      with mlflow.start_run():
          mlflow.set_params(best_config)
          mlflow.log_metrics({'rmse': min_loss})
      
    • 保存和容器化:构建封装最终模型的Docker镜像。
      mlflow models build-docker --model-uri=models:/wine_quality/1 --name=qsp
      
    • 创建REST API端点:使用Docker容器将模型对外提供服务。
      docker run -e MODEL_NAME=wine_quality --env Leasing:1000 qsp:latest -p 5002:8080
      curl -d '{}' -H "Content-Type: application/json" -X POST localhost:5002/invocations
      
  8. 最终步骤

    • 评估性能:使用样本输入测试端点,确保预测结果与预期输出一致。
    • 记录与分享:为利益相关者提供详细解释和更新。

通过系统地应用这些步骤,您可以有效地利用MLflow来简化实验、自动化模型开发,并促进可扩展的部署流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2293813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

熟练掌握Http协议

目录 基本概念请求数据Get请求方式和Post请求方式 响应数据响应状态码 基本概念 Http协议全称超文本传输协议(HyperText Transfer Protocol),是网络通信中应用层的协议,规定了浏览器和web服务器数据传输的格式和规则 Http应用层协议具有以下特点&#…

C++的 I/O 流

本文把复杂的基类和派生类的作用和关系捋出来,具体的接口请参考相关文档 C的 I/O 流相关的类,继承关系如下图所示 https://zh.cppreference.com/w/cpp/io I / O 的概念:内存和外设进行数据交互称为 I / O ,例如:把数…

【PDF多区域识别】如何批量PDF指定多个区域识别改名,基于Windows自带的UWP的文字识别实现方案

海关在对进口货物进行查验时,需要核对报关单上的各项信息。对报关单 PDF 批量指定区域识别改名后,海关工作人员可以更高效地从文件名中获取关键信息,如货物来源地、申报价值等。例如文件名 “[原产国]_[申报价值].pdf”,有助于海关快速筛选重点查验对象,提高查验效率和监管…

【大数据技术】本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …

数字化转型:概念性名词浅谈(第四讲)

​大家好,本篇文章是在新年之际写的,所以在这里先给大家拜个年。 今天要介绍的名词为ETL: ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transfor…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)

目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…

Linux:文件系统(软硬链接)

目录 inode ext2文件系统 Block Group 超级块(Super Block) GDT(Group Descriptor Table) 块位图(Block Bitmap) inode位图(Inode Bitmap) i节点表(inode Tabl…

深度学习系列--01.入门

一.深度学习概念 深度学习(Deep Learning)是机器学习的分支,是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力,能够识别文字…

如何抓取酒店列表: 揭开秘密

搜索酒店列表是一种强大的工具,可以从各种在线资源中收集有关住宿、价格和可用性的综合数据。无论您是要比较价格、分析市场趋势,还是要创建个性化的旅行计划,搜索都能让您有效地汇编所需的信息。在本文中,我们将介绍如何搜索酒店…

深度剖析 C++17 中的 std::byte:解锁字节级编程新境界

文章目录 一、引入背景二、基本定义三、特性详解不可隐式转换为整型显式转换为unsigned char位运算支持字面量支持四、使用场景内存操作数据序列化与反序列化网络通信文件读写操作五、与其他数据类型的交互与字符类型的交互与整数类型的交互与指针类型的交互六、注意事项避免混…

【多线程】线程池核心数到底如何配置?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…

三维空间全局光照 | 及各种扫盲

Lecture 6 SH for diffuse transport Lecture 7关于 SH for glossy transport 三维空间全局光照 diffuse case和glossy case的区别 在Lambertian模型中,BRDF是一个常数 diffuse case 跟outgoing point无关 glossy case 跟outgoing point有关 (Gloss…

Polardb三节点集群部署安装--附虚拟机

1. 架构 PolarDB-X 采用 Shared-nothing 与存储计算分离架构进行设计,系统由4个核心组件组成。 计算节点(CN, Compute Node) 计算节点是系统的入口,采用无状态设计,包括 SQL 解析器、优化器、执行器等模块。负责数据…

java s7接收Byte字节,接收word转16位二进制

1图: 2.图: try {List list getNameList();//接收base64S7Connector s7Connector S7ConnectorFactory.buildTCPConnector().withHost("192.168.46.52").withPort(102).withTimeout(1000) //连接超时时间.withRack(0).withSlot(3).build()…

挑战项目 --- 微服务编程测评系统(在线OJ系统)

一、前言 1.为什么要做项目 面试官要问项目,考察你到底是理论派还是实战派? 1.希望从你的项目中看到你的真实能力和对知识的灵活运用。 2.展示你在面对问题和需求时的思考方式及解决问题的能力。 3.面试官会就你项目提出一些问题,或扩展需求…

基于springboot的体质测试数据分析及可视化设计

作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 项目包含: 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

java-重载与重写

介绍 在 Java 中,重载(Overloading) 和 重写(Overriding) 是两个重要的概念,它们都与方法有关,但它们的应用场景和行为完全不同。 通过理解重载和重写的区别,可以更好地设计类的继承…

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列,其在不同版本的发布过程中,逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本,从版本的发布时间、特点、优势以及不足之处&#xff0…

2024年12月 Scratch 图形化(三级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化(三级)真题解析 中国电子学会全国青少年软件编程等级考试 一、选择题(共18题,共50分) 第 1 题 气温和对应的穿衣建议如下表所示,下列选项能正确给出穿衣建议的是?( ) A. …

C# 中记录(Record)详解

从C#9.0开始,我们有了一个有趣的语法糖:记录(record)   为什么提供记录? 开发过程中,我们往往会创建一些简单的实体,它们仅仅拥有一些简单的属性,可能还有几个简单的方法,比如DTO等等&#xf…