MLOps模型部署的三种策略:批处理、实时、边缘计算

news2024/10/7 11:22:46

机器学习运维(MLOps)是一组用于自动化和简化机器学习(ML)工作流程和部署的实践。所选择的部署策略可以显著影响系统的性能和效用。所以需要根据用例和需求,采用不同的部署策略。在这篇文章中,我们将探讨三种常见的模型部署策略:批处理、实时和边缘计算。

批处理

批处理部署适合于不需要实时决策的场景,主要需要在指定的时间间隔处理大量数据。模型不是不断更新或对新数据作出反应,而是在一段时间内收集的一批数据上运行。该方法涉及在预定时间处理大块数据。常见的用例包括夜间风险评估、客户细分或预测性维护等。这种方法非常适合于实时洞察不重要的应用程序。

优点:

批处理可以安排在非高峰时间,优化计算资源和降低成本。与实时系统相比,更容易实现和管理,因为它不需要持续的数据摄取和即时响应能力。

能够处理大型数据集,使其成为数据仓库、报告和离线分析等应用程序的理想选择。

缺点:

数据收集和结果之间存在显著延迟,可能不适用于时间敏感的应用程序。

用例:

欺诈检测:通过分析历史数据来识别欺诈交易。

预测性维护:根据收集数据中观察到的模式来安排维护任务。

市场分析:分析历史销售数据,从中获得见解和趋势。

示例:

例如我们想要分析电子商务平台的客户评论的情绪。使用预训练的情感分析模型,并定期将其应用于一批评论。

 import pandas as pd
 from transformers import pipeline
 
 # Load pre-trained sentiment analysis model
 sentiment_pipeline = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english")
 
 # Load customer reviews data
 reviews_data = pd.read_csv("customer_reviews.csv")
 
 # Perform sentiment analysis in batches
 batch_size = 1000
 for i in range(0, len(reviews_data), batch_size):
     batch_reviews = reviews_data["review_text"][i:i+batch_size].tolist()
     batch_sentiments = sentiment_pipeline(batch_reviews)
     
     # Process and store batch results
     for review, sentiment in zip(batch_reviews, batch_sentiments):
         print(f"Review: {review}\nSentiment: {sentiment['label']}\n")

我们从CSV文件中读取客户评论数据,并以1000条为一批处理这些评论。对于每个批次,我们使用情感分析流程来预测每个评论的情感(积极或消极),然后根据需要处理和存储结果。

实际的输出将取决于customer_reviews.csv文件的内容和预训练的情感分析模型的性能。

实时处理

实时部署在数据到达时立即对其进行处理,从而实现即时操作。这种方法对于需要实时数据处理和决策的应用程序是必不可少的。实时部署在处理数据并几乎即时提供输出时,适用于需要立即响应的应用程序,如欺诈检测、动态定价和实时个性化等。

优点:

提供即时反馈,对时间敏感的应用程序至关重要,支持在毫秒到秒之间做出决策。提供动态和响应的交互,支持与最终用户直接交互的应用程序,提供无可感知延迟的响应,可以提高用户粘性。能够快速响应新出现的趋势或问题,提高运营效率和风险管理。

缺点:

需要强大且可扩展的基础设施来处理可能的高吞吐量和低延迟需求。并且确保运行时间和性能可能既具挑战性又成本高昂。

用例:

客户支持:聊天机器人和虚拟助手为用户查询提供即时响应。

金融交易:基于实时市场数据做出瞬间决策的算法交易系统。

智慧城市:利用实时数据进行实时交通管理和公共安全监控。

示例:

我们希望对金融交易执行实时欺诈检测,需要部署一个预先训练的欺诈检测模型,并将其公开为web服务。

 import tensorflow as tf
 from tensorflow.keras.models import load_model
 import numpy as np
 from flask import Flask, request, jsonify
 
 # Load pre-trained fraud detection model
 model = load_model("fraud_detection_model.h5")
 
 # Create Flask app
 app = Flask(__name__)
 
 @app.route('/detect_fraud', methods=['POST'])
 def detect_fraud():
     data = request.get_json()
     transaction_data = np.array(data['transaction_data'])
     prediction = model.predict(transaction_data.reshape(1, -1))
     is_fraud = bool(prediction[0][0])
     return jsonify({'is_fraud': is_fraud})
 
 if __name__ == '__main__':
     app.run(host='0.0.0.0', port=8080)

比如使用TensorFlow加载一个预训练的欺诈检测模型。然后我们创建一个Flask web应用程序,并定义一个endpoint /detect_fraud,它接受包含交易细节的JSON数据。对于每个传入请求,数据经过预处理等流程,输入模型并返回一个JSON响应,判断这条数据是否具有欺诈性。

为了增加服务的响应速度,一般情况下都是使用,使用Docker这样的容器化工具,并将容器部署到云平台或专用服务器上,并且可以进行自动化的资源调度和扩展。

边缘计算

边缘部署涉及在网络边缘的设备上运行机器学习模型,更接近数据生成的位置。这种方法在本地处理数据而不是将数据发送到集中式服务器来减少延迟和带宽使用。这种方法用于在将数据发送到中心服务器太慢或过于敏感的情况下,如自动驾驶汽车、智能摄像头等。

优点:

在本地处理数据,减少了向中心服务器回传数据的需要,节省了带宽,降低了成本。。通过在源附近处理数据来最大限度地减少延迟,非常适合需要快速响应时间的应用程序。

独立于网络连接运行,即使在远程或不稳定的环境中也能确保持续的功能。并且敏感数据在设备上存储,最小化暴露和合规风险。

缺点:

边缘设备的处理能力通常低于服务器环境,这可能限制了部署模型的复杂性。并且在众多边缘设备上部署和更新模型可能在技术上具有挑战性的,尤其是版本的管理。

用例:

工业物联网:对制造工厂的机械进行实时监控。

医疗保健:可穿戴设备分析健康指标并向用户提供即时反馈。

自动驾驶汽车:车载传感器数据处理,用于实时导航和决策。

我们以最简单的在移动设备上执行实时对象检测作为示例。使用TensorFlow Lite框架在Android设备上优化和部署预训练的对象检测模型。

 import tflite_runtime.interpreter as tflite
 import cv2
 import numpy as np
 
 # Load TensorFlow Lite model
 interpreter = tflite.Interpreter(model_path="object_detection_model.tflite")
 interpreter.allocate_tensors()
 
 # Get input and output tensors
 input_details = interpreter.get_input_details()
 output_details = interpreter.get_output_details()
 
 # Function to perform object detection on an image
 def detect_objects(image):
     # Preprocess input image
     input_data = preprocess_image(image)
     
     # Set input tensor
     interpreter.set_tensor(input_details[0]['index'], input_data)
     
     # Run inference
     interpreter.invoke()
     
     # Get output tensor
     output_data = interpreter.get_tensor(output_details[0]['index'])
     
     # Postprocess output and return detected objects
     return postprocess_output(output_data)
 
 # Main loop for capturing and processing camera frames
 cap = cv2.VideoCapture(0)
 while True:
     ret, frame = cap.read()
     if ret:
         objects = detect_objects(frame)
         
         # Draw bounding boxes and labels on the frame
         for obj in objects:
             cv2.rectangle(frame, (obj['bbox'][0], obj['bbox'][1]), (obj['bbox'][2], obj['bbox'][3]), (0, 255, 0), 2)
             cv2.putText(frame, obj['class'], (obj['bbox'][0], obj['bbox'][1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36, 255, 12), 2)
         
         cv2.imshow('Object Detection', frame)
     if cv2.waitKey(1) & 0xFF == ord('q'):
         break
 
 cap.release()
 cv2.destroyAllWindows()

以TensorFlow Lite格式加载一个预训练的对象检测模型,模型针对移动和嵌入式设备进行了优化。

在主循环中,不断地从设备的相机中捕获帧,将它们传递给detect_objects函数,并为检测到的对象在帧上绘制边界框和标签。处理后的帧然后显示在设备的屏幕上。边框将以绿色绘制,对象标签将显示在每个边框的左上角。

这些代码可以使用各自的TensorFlow Lite api和库集成到Android或iOS应用程序中。

选择正确的部署策略

选择正确的机器学习模型部署策略是确保高效性和成本效益的关键。以下是一些决定部署策略时需要考虑的主要因素:

1. 响应时间需求

  • 实时部署:如果应用程序需要即时反馈,如在线推荐系统、欺诈检测或自动交易系统。
  • 批处理部署:如果处理的任务可以容忍延迟,例如数据仓库的夜间批量处理、大规模报告生成。

2. 数据隐私和安全性

  • 边缘部署:当数据隐私是一个重要因素,或者法规要求数据不得离开本地设备时,边缘部署是理想选择。
  • 中心化部署:如果数据的隐私性较低或可以通过安全措施在云端处理,则可以选择中心化部署。

3. 可用资源和基础设施

  • 资源有限的环境:边缘设备通常计算能力有限,适合运行简化或轻量级的模型。
  • 资源丰富的环境:具有强大计算资源的云环境适合实时或大规模批处理部署。

4. 成本考虑

  • 成本敏感:批处理可以减少对实时计算资源的需求,从而降低成本。
  • 投资回报:实时系统虽然成本高,但可能因响应速度快而带来更高的投资回报。

5. 维护和可扩展性

  • 简单维护:批处理系统相对容易维护,因为它们的工作负载是预测的。
  • 需要高可扩展性:实时系统需要能够应对突发的高流量,需要更复杂的管理和自动扩展能力。

6. 用户体验

  • 直接与用户交互:需要即时响应来提升用户体验的应用,如移动应用中的个性化功能,更适合实时部罗。
  • 后台处理:用户不直接感受到处理延迟的场景,如数据分析和报告,批处理更为合适。

结合上述因素,你可以根据具体的应用场景和业务需求来选择最适合的部署策略。这有助于优化性能,控制成本,并提高整体效率。。

总结

了解批处理、实时和边缘部署策略的区别和应用程序是优化MLOps的基础。每种方法都提供了针对特定用例量身定制的独特优势,通过评估应用程序的需求和约束,可以选择最符合目标的部署策略,为成功的AI集成和利用铺平道路。

https://avoid.overfit.cn/post/6740ab96ae344c0ca8199e603f15cb37

作者:Tech & Tales

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

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

相关文章

如何通过墙面互动投影打造全新娱乐体验?

随着展厅设计技术的飞速发展,我们见证了无数令人惊叹的创意墙面互动设计形式的涌现。其中,墙面互动投影凭借其独特的魅力,成为了备受欢迎的创意墙面设计典范。它巧妙地融合了展示内容与互动体验,彻底革新了观众与数字内容的交流方…

Python基础语法学习(工程向)-Stage1

输出的方式: print(fabscwdasd {num}) print(asbduwiu %d, a) print(asnidoian %d %d %d,a,b,c)不换行 print(asbdiuabw,end )输入 a input(输入) 只能输入字符串形式,如果相当做数字用则将其转化为数字 只有合法的数字才能转化成功 a int(input()…

一些个人电脑用的小工具软件

1 个人电脑信息管理 如下; 整理自己的电脑信息;录入,保存,查询;添加和更新界面如下, 每次添加、更新之后重新点一下菜单的浏览; 下载, https://download.csdn.net/download/bcb…

C#语言入门详解 --- 方法(含传值 输出 引用 数组)

方法 方法标准式 <Access Specifier> <Return Type> <Method Name>(Parameter List) { Method Body } 让我们逐一对每一个模块进行解释&#xff1a; Access Specifier&#xff1a;访问修饰符&#xff0c;这决定了接下来的主题的可见性&#xff0c;包含p…

在微信公众号上怎么添加预定房间功能

在这个快节奏的现代社会&#xff0c;人们对于便捷与高效的需求日益增加。特别是在旅行或出差时&#xff0c;能够快速、方便地预订一间舒适的房间&#xff0c;无疑是每个人心中的小确幸。今天&#xff0c;我们为您带来了一项革命性的服务——微信公众号上的房间预定功能&#xf…

QQ登录测试用例

QQ登录测试用例 常见测试方法&#xff08;可参考软件测试<用例篇>&#xff09; 等价类&#xff1a; 1、有效等价类 &#xff1a;满足需求的数据集合 2、无效等价类&#xff1a;不满足需求的数据集合 边界值错误猜测法场景法 QQ测试用例设计&#xff1a;xmind 需要完整…

位运算算法:编程世界中的魔法符号

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 常见位运算总结 二、常见位运算题目 2.1 位1的个数 2.2 比特数记位&#xff08;典型dp&#xff09; 2.3 汉明距离 2.4 只出现一次的数字&#xff08;1&#xff09; 2.5 只出…

JavaScript-事件监听

添加事件监听 语法&#xff1a;对象名.addEventListener(事件类型,要执行的函数) 作用&#xff1a;当事件触发时&#xff0c;就调用这个函数 事件类型&#xff1a;比如用鼠标点击&#xff0c;或用滚轮滑动&#xff0c;鼠标经过这些 要执行的函数&#xff1a;要做的事 &l…

区区微服务,何足挂齿?

背景 睿哥前天吩咐我去了解一下微服务&#xff0c;我本来想周末看的&#xff0c;结果周末没带电脑&#xff0c;所以只能周一看了。刚刚我就去慕课网看了相关的视频&#xff0c;然后写一篇文章总结一下。这篇文章算是基础理论版&#xff0c;等我之后进行更多的实践&#xff0c;…

【无标题】Pycharm执行报错

file 读取未指定utf-8编码&#xff0c;加上就好了 疑问&#xff1a;为什么 有的电脑可以直接跑呢&#xff1f;该电脑、Pycharm、工程&#xff0c;已经做了修改设置默认值&#xff0c;但是到新的电脑上&#xff0c;就需要重新设置&#xff0c;所以 file 读、写&#xff0c;最好…

[Shell编程学习路线]——if条件语句(单,双,多分支结构)详细语法介绍

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月17日7点50分 &#x1f004;️文章质量&#xff1a;95分 文章目录 ————前言———— &#x1f4af;趣站&#x1f4af…

【NOI】C++程序结构入门之循环结构四——带余除法

文章目录 前言一、带余除法1.1 概念1.2 编程中的使用1.2.1 模运算1.2.2 判断奇偶性1.2.3 判断倍数关系1.2.4 循环和迭代控制1.2.5 密码学与安全1.2.6 算法设计1.2.7 数据验证与错误处理 二、例题讲解问题&#xff1a;1389 - 数据分析问题&#xff1a;1750 - 有0的数问题&#x…

宕机了, redis如何保证数据不丢?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

IDEA快速入门03-代码头统一配置

三、代码规范配置 3.1 文件头和作者信息 配置入口&#xff1a;依次打开 File -> Settings -> Editor -> File and Code Templates。 Class /*** Copyright (C) 2020-${YEAR}, Glodon Digital Supplier & Purchaser BU.* * All Rights Reserved.*/ #if (${PACKA…

基于SSM+Jsp的旅游景点线路网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

在线求助:什么!!我的单链表只能得30分!!

题目&#xff1a; 来源&#xff1a; B3631 单向链表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我的代码 输入输出&#xff1a; 输入 6 1 1 99 1 99 50 1 99 75 2 99 3 75 2 1 输出 75 99 我的测试结果&#xff1a;

JAVA---类和对象详解(1)

JAVA类和对象详解(1) 1.面向对象的初步认知 1.1什么是面向对象? Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成…

VSCode的maven插件配置问题

最近尝试使用VSCode开发java后台项目&#xff0c;发现安装了java开发套件的插件 配置了开发环境之后&#xff0c;maven下载的依赖包始终位于~/.m2/repository目录之后&#xff0c;放在了默认的C盘&#xff0c;这就是我最不喜欢的位置。 为了保证C的小&#xff0c;所以需要修改…

物联网工程的未来发展趋势及影响

物联网工程是在互联网基础上的一种新兴技术&#xff0c;其核心思想是通过网络连接不同物体&#xff0c;实现智能化的交流与互动。在未来&#xff0c;物联网工程将继续向更多领域发展&#xff0c;如智能家居、智能城市、智能交通等。首先&#xff0c;物联网工程在智能家居领域的…

《Windows API每日一练》4.3 点和线的绘制

理论上&#xff0c;所有的图形设备驱动程序所需要的就是SetPixel函数和GetPixel函数。其余的一切都可以使用在GDI模块中实现的更高层的例程来处理。例如&#xff0c;画一条线&#xff0c;GDI可以不停地调整x和y坐标&#xff0c;然后连续调用多次SetPixel函数来实现。 事实上&a…