顶呱呱网站建设,qq在线登陆聊天网页版,交换链接营销的典型案例,百度应用搜索文章发布于公号【数智物语】 #xff08;ID#xff1a;decision_engine#xff09;#xff0c;关注公号不错过每一篇干货。来源 | 数据派THU#xff08;id#xff1a;DatapiTHU#xff09;作者#xff1a;Julien Kervizic翻译#xff1a;陈之炎 校对#xff1a;李海明…文章发布于公号【数智物语】 IDdecision_engine关注公号不错过每一篇干货。来源 | 数据派THUidDatapiTHU作者Julien Kervizic翻译陈之炎 校对李海明本文整理比较模型部署到生产中使用的不同部署模型方式、生命周期管理方法及数据存储格式。Mantas Hesthaven拍的发表在 Unspash上的照片机器学习模型的应用方法多种多样不一而足。 例如在客户流失预测中当客户呼叫服务时系统中便可以查找到一个静态统计值但对于特定事件来说系统则可以获得一些额外值来重新运行模型。通常有很多方法可以对模型进行训练并将其转化为应用产品1. 训练一次性训练、批量训练和实时训练/在线训练2. 应用批训练、实时训练 (数据库触发器、Pub/Sub、Web服务、inApp)每种方法都有各自的优劣需要折中考虑。01一次性训练模型在应用前无需进行连续的多次训练。通常情况下在数据科学家完成对模型的特定训练之后便可进行应用待模型性能无法满足使用要求时再对其进行更新。01从Jupyter到Prod通常数据科学家会在Jupyter Notebooks环境中组建原型和使用机器学习算法。Jupyter Notebooks是repl上的高级GUI可以在这个环境中同时保存代码和命令行输出。采用这种方法完全可以将一个经过特别训练的模型从Jupyter中的某个代码推向量产。多种类型的库和其他笔记本环境有助于加强数据科学家工作台和最终产品之间的联系。02模型格式Pickle将python对象转换为比特流并将其存储到磁盘以便后续重新加载。它提供了一种很好的格式来存储机器学习模型亦可在python中构建其应用程序。ONNX为开放式神经网络交换格式作为一种开放格式它支持跨库、跨语言存储和移植预测模型。大多数深度学习库都支持该格式 sklearn还有一个扩展库来将模型转换为ONNX格式。PMML或预测模型标记语言是另一种用于预测模型的交换格式。sklearn还有另一个扩展库可用于将模型转换为PMML格式这与ONNX是一致的。然而它的缺点是只支持某些类型的预测模型PMML从1997年开始出现大量的应用程序均采用这种格式。例如像SAP这样的应用程序能够利用PMML标准的某些版本对于CRM应用程序(如PEGA)也是如此。POJO和MOJO是两种H2O.ai的导出格式他们旨在为Java应用程序提供一个易于嵌入的模型。然而这两种导出格式只在H2O平台上使用。03训练对一次性训练模型可以由数据科学家专门对模型进行训练和精调或者也可以通过AutoML库进行训练。通过简单设置便可将模型产品化推进到下一个阶段例如批训练。02批训练虽然不是所有的模型都需要应用但批训练可以根据最新的训练结果使模型的版本得到连续刷新。批训练受益于AutoML框架其通过AutoML能够自动执行一系列动作。例如特征处理、特征选择、模型选择和参数优化。AutoML新近的表现与最勤奋的数据科学家不相上下甚至超过了他们。LinkedIn上的帖子利用它们可以进行更为全面的模型训练而不是做预训练简单地重新训练模型的权重。目前有多种不同的技术来支持连续的批训练例如可以通过多种混合 airflow来管理不同的工作流和类似tpot的AutoML库。不同的云服务提供商为 AutoML 提供了各种解决方案并把这些解决方案放到数据工作流中。例如Azure将机器学习预测和模型训练与其数据工厂进行了整合。03实时训练实时训练可以通过“在线机器学习”模型实现支持这种训练方法的算法包括K-均值(通过小批处理)、线性回归和 Logistic 回归(利用随机梯度下降)以及朴素贝叶斯分类器。Spark 中包含 StreamingLinear 算法 / StreamingLinearRegressionWithSGD 算法来执行这些操作 Skinlear 具有 SGDRegressor 和 SGD 分类器可实现增量训练。在 sklearn 中增量训练通过 partial_fit 方法完成如下所示在部署这类模型时需要严格的操作支持和监控因为模型对新的数据和噪声很敏感所以需要动态地监控模型性能。在离线训练中可以过滤掉高位的点值并对输入数据进行校正。当需要根据新的数据流不断更新模型训练时难度系数会高出许多。在线模型训练的另一个挑战是过往历史信息得不到衰减。 这意味着如果数据集的结构有新的变化则需要重新对模型训练这在模型生命周期管理中将是一个很大的挑战。04批量预测与实时预测的比较当选择是设置批量预测还是设置实时预测时必须了解实时预测的重要性。如果发生重大事件有可能会获得新的分数例如当客户呼叫联络中心时客户流失评分又会是多少。在实时预测时需要对这些因素进行加权以克服由于进行实时预测而产生的复杂性和成本影响。01载荷的影响在进行实时预测时需要有一种处理高峰负荷的方法。需要根据所采用的途径以及使用的预测如何结束来选择一种实时方法可能还需要有具有额外计算能力的超级机器以便在某个SLA中提供预测。这与批量预测的处理方法形成了对比在批量预测中可以根据可用容量将预测计算分散到一整天。02架构的影响在实时预测时运营责任会更高一些人们需要对系统是如何工作进行监测在出现问题时有告警并考虑到故障转移责任。 对于批量预测来说运营责任要低得多只需要对告警进行一些必要的监测而对于了解产生问题的直接原因的需求要低得多。03成本的影响实时预测也受成本因素的影响一味追求高算力而却没有选择将计算负荷分散在全天进行可能会迫使你购买那些超出算力需求的硬件设备或提高现货价格。根据所用方法和需求可能还需要投入额外的成本购买更强大的计算能力来满足SLA的需求。此外在选择实时预测时可能会有更高的架构要求。需要注意的是在应用程序中所做出的选择要依赖应用程序的预测对于这样的特定场景实时预测的成本最终可能会比批量预测的成本更低。04评估的影响实时预测的预测性能评估比批量预测的预测性能评估更具挑战性。例如当在短时间内遇到一连串的突发行为时如何评估性能会不会为特定的客户产生多个预测结果实时预测模型的评估和调试要复杂得多它还需要一个日志收集机制既允许收集不同的预测结果和特征也可以生成分数以供进一步评估。05批量预测集成批量预测依赖于两个不同的信息一个是预测模型另一个是提供给模型的特征。在大多数批处理预测体系结构中ETL既可以从特定的数据存储(特征存储)中获取预先计算的特征也可以跨多个数据集执行某种类型的转换并向预测模型提供输入。然后预测模型对数据集中所有的行数据进行迭代并输出不同的分值。用于批量预测的示例流模型一旦计算得到所有的预测结果便可以将分数“投入”到那些有信息使用需求的不同系统中。可以根据不同的应用实例并通过不同的方式来实现分数的使用。例如如果想在前端应用程序上使用分数则很可能将数据推送到“缓存”或NoSQL数据库比如Redis这样可以提供毫秒的响应而对于某些用例比如创建电子邮件可能只是依赖CSV SFTP导出或将数据加载到更传统的RDBMS。06实时预测集成基于实时应用的模型使用需要3个基本组件客户/用户配置文件、一组触发器和预测模型。配置文件客户配置文件包含和客户相关的所有属性以及给出预测所必需的不同属性(例如计数器)。对于客户级预测为了减少从多个地方提取信息的延迟以及简化机器学习模型的量产化过程配置文件是必须的。在大多数情况下为了更有效地获取数据需要相似的数据存储类型。触发器触发器是引导进程启动的事件它们可以用于客户流失的预测。例如调用客户服务中心、检查订单历史记录中的信息等。模型 模型需要经过预先训练通常导出到前面提到的 3 种格式之一 (pickle、 ONNX 或 PMML) 以便可以将其移植到量产中。还有许多方法可以将模型应用至评分产品中1. 取决于数据库集成诸多数据库供应商为在数据库中绑定高级分析用例做出了重大努力既可以直接集成Python或R代码也可以导入PMML模型。2. 利用Pub/Sub模型预测模型本质上是对数据流的输入执行某些操作例如提取客户配置信息等。3. Webservice围绕模型预测设置API封装器并将其部署为Web服务。根据Web服务的设置方式它可能执行或不执行驱动模型所需的数据操作。4. inApp:也可以将模型直接部署到本地或Web应用程序中并让模型在本地或外部数据源上运行。07数据库集成如果数据库的总体大小不大 (用户配置文件1M)并且更新频率也不大那么将一些实时更新过程直接集成到数据库中会很有意义。Postgres允许将Python代码作为函数或称为PL/Python的存储过程来运行。该实现可以访问所有作为PYTHONPATH的一部分库也可以使用Pandas和SKLearning等库来运行某些操作。此外还可以与Postgres的触发器机制相结合来运行数据库并更新客户流失分数。比如如果在投诉表中输入了一个新条目那么让模型实时重新运行的话便很有价值。01流程流程以如下方式设置1. 新事件 当在投诉表中插入新行时将生成事件触发器。2. 触发器 触发器功能将更新该客户在客户配置文件表中提出的投诉数量并为客户更新记录。3. 预测请求使用PL/Python重新运行客户流失模型并检索预测结果。4. 用户配置文件的更新根据更新后的预测结果重新更新客户配置文件。然后当检查客户配置文件是否已经用客户流失预测值进行更新时就会生成下游流。02技术Different databases are able to support the running of多种数据库支持Python脚本的运行如前所述 Postgres集成有本地Python MSSQL Server也可以通过其“机器学习服务(在数据库中)”运行R/Python脚本诸如Teradata等其他数据库可以通过外部脚本命令运行R/Python脚本。Oracle通过其数据挖掘扩展支持PMML模型。08Pub/Sub通过pub/sub模型实现实时预测可以通过节流正确地处理负载。对于工程师而言这也意味着可以通过一个单独的“日志”提要来输入事件数据不同的应用程序均可以订阅这个提要。设置示例页面查看事件被触发到特定的事件主题在该主题中两个应用程序订阅一个页面查看计数器和一个预测器。这两个应用程序都从主题中筛选出特定的相关事件并在该主题中使用不同的消息。页面查看计数器为仪表板提供数据而预测应用程序则负责更新客户配置文件。01流程事件消息在发生时被推送到pub/sub主题预测应用程序会轮询新消息的主题。当预测应用程序检索到新消息时该程序将请求并检索客户配置文件并使用消息和配置文件信息进行预测预测结果最终返回客户配置文件以供进一步使用。还可以设置一个稍微不同的流程数据首先被一个“富集应用程序”使用该应用程序将配置文件信息添加到消息中然后返回一个新主题并最终交由预测应用程序推送到客户配置文件上。02技术您会发现在数据生态系统中支持这种用例的典型的开源组合是Kafka和SPark流的组合但是云上可能有不同的设置。值得注意的是Google发布的pub-sub /数据流(BEAM)提供了一个很好的替代方案在Azure上Azure-Service总线或Eventub和Azure函数的组合可以作为一种很好的方式来利用消息生成这些预测。09网络服务Web Service我们还可以将模型作为互联网服务产品。将预测模型作为互联网服务产品对于工程团队尤为有用这些团队通常需要处理Web、桌面和移动等多个不同的接口。可以有多种方式设置Web服务的接口1. 提供标识符然后让web服务提取所需的信息计算预测值然后返回该值2. 或者通过接受有效载荷将其转换为数据帧进行预测并返回该值。当发生大量交互并且使用本地缓存与后端系统的同步或者当需要在不同的粒度上进行预测时比如在进行基于会话的预测时通常建议使用第二种方法。使用本地存储的系统往往具有还原功能其作用是计算客户配置文件的内容因此它提供了基于本地数据的客户配置文件的近似值。01流程使用移动应用程序处理预测的流程可分为4个阶段进行描述1. 应用程序初始化(1至3)阶段应用程序初始化向客户配置文件发出请求检索其初始值在本地存储中初始化配置文件。2. 应用程序(4)阶段应用程序将与该程序中出现的不同事件存储到本地存储区的数组中。3. 预测准备阶段(5-8)如果应用程序想要检索一个新的客户流失预测那么它需要将互联网服务所需的信息准备好。首先对本地存储进行初始请求并检索客户配置文件的值及其存储的事件数组检索完成后向还原器函数提出请求将这些值作为参数还原器函数输出一个更新后的客户配置文件并将本地事件合并到这个客户配置文件中。4. Web服务预测阶段(9至10)应用程序向客户流失预测的互联网服务产品发出请求将第8步骤中的有效载荷提供给更新后的客户配置文件。然后互联网服务产品可以使用载荷提供的信息生成预测并将其值输出给应用程序。02技术有很多技术可以用来支持互联网服务产品预测1. 函数AWS Lambda函数、GoogleCloud函数和MicrosoftAzure函数(尽管目前只支持Beta版Python)提供了一个易于设置的界面可以轻松地部署可伸缩的Web服务。例如在Azure上可以通过如下函数实现web-service预测 2. 容器除了函数之外的另一种选择是通过docker容器(AmazonECS、Azure容器实例或Google Kubernetes引擎)部署一个Flask或Django应用程序。例如Azure通过“AzureMachineLearning服务”提供了一种简单的方法来设置预测容器。3. 笔记簿不同的笔记薄提供商如Databricks和dataiku都致力于简化其环境中的模型部署。它们具有将webservice设置到本地环境或部署到外部系统(如Azure ML服务、Kubernetes引擎等)的功能。10应用程序内部在某些情况下因为法律和隐私的要求不允许数据被存储在应用程序外部时或者必须上传大量文件时往往会在应用程序内部调用模型。Android-MLKit 或 Caffe2类似的工具允许在本地应用程序中调用模型而Tensorflow.js和ONNXJS允许直接在浏览器中或在JavaScript的应用程序中运行模型。11需要综合考虑的几点除了模型的部署方法外部署模型到量产时需要考虑以下重要因素。01模型的复杂度模型本身的复杂程度是应首先要考虑的因素。像线性回归和Logistic回归这样的模型非常容易部署通常不会占用太多的存储空间。使用更为复杂的模型如神经网络或复杂集成决策树计算将占用更长时间冷启动时加载到内存中的时间也会更长而且运行成本会更高。02数据来源需要着重考虑的是实际应用中的数据源与用于训练的数据源之间可能存在的差异。虽然用于训练的数据必须与生产中实际使用数据内容同步但是重新计算每个值以使其完全同步是不切实际的。03实验框架建立一个实验框架用于客观度量不同模型性能的A/B测试并确保有足够的跟踪来准确地调试和评估模型的性能。11小结选择如何将预测模型部署到生产中是一件相当复杂的事情可以有多种不同的方法来处理预测模型的生命周期管理也可以用不同的格式来存储它们从多种方法中选取恰当的方法来部署模型包含非常宽泛的技术含量。深入理解特定的用例、团队的技术和分析成熟度、整体组织结构及其交互有助于找到将预测模型部署到生产中的正确方法。星标我每天多一点智慧