Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为什么机器学习部署起来这么难?

为什么机器学习部署起来这么难?

作者头像
石晓文
发布于 2019-11-12 13:01:49
发布于 2019-11-12 13:01:49
6220
举报
文章被收录于专栏:小小挖掘机小小挖掘机

作者:Alexandre Gonfalonieri 编译:ronghuaiyang

导读

根据我作为顾问的经验,只有非常少的机器学习项目能够投入生产。一个人工智能项目可能会因为多种原因而失败,其中之一就是部署。

在做了几个人工智能项目之后,我意识到,对于那些愿意通过人工智能创造价值的公司来说,大规模部署机器学习(ML)模型是最重要的挑战之一。

根据我作为顾问的经验,只有非常少的机器学习项目能够投入生产。一个人工智能项目可能会因为多种原因而失败,其中之一就是部署。对于每个决策者来说,完全理解部署是如何工作的,以及在达到这一关键步骤时如何降低失败的风险是非常关键的。

部署的模型可以定义为无缝集成到生产环境中的任何代码单元,并且可以接收输入并返回输出。

我曾经看到,为了将他们的工作投入生产,数据科学家通常必须将他或她的数据模型进行工程实现。在这一步中,出现了一些最常见的数据科学问题。

挑战

机器学习有一些独特的特性,使得大规模部署变得更加困难。这是我们正在处理的一些问题:

管理数据科学语言

你可能知道,机器学习应用程序通常由使用不同的编程语言编写组成。它们之间的相互作用并不是很好。我曾多次看到,机器学习pipeline从R开始,在Python中继续,并以另一种语言结束。

一般来说,Python和R是机器学习应用程序中最流行的语言,但我注意到,由于各种原因(包括速度),很少使用这些语言部署生产模型。将Python或R模型移植到像c++或Java这样的生产语言中是很复杂的,并且通常会降低原始模型的性能(速度、准确性等)。

当软件的新版本发布时,R包可能会崩溃。此外,R速度慢,无法高效地处理大数据

对于原型设计来说,它是一种很棒的语言,因为它允许简单的交互和解决问题,但是需要将它翻译成Python或c++或Java来进行生产。

诸如Docker之类的容器化技术可以解决由大量工具引入的不兼容性和可移植性挑战。然而,自动依赖项检查、错误检查、测试和构建工具将不能解决跨越语言障碍的问题。

可复现性也是一个挑战。实际上,数据科学家可以使用不同的编程语言、库或同一库的不同版本来构建模型的多个版本。手动跟踪这些依赖关系很困难。为了解决这些挑战,需要一个机器学习生命周期工具,它可以在训练阶段自动跟踪并记录这些依赖项,并将它们作为代码的配置,然后将它们与训练的模型一起打包到一个随时可以部署的工件中。

我建议你使用一种工具或平台,它可以立即将代码从一种语言转换为另一种语言,或者允许你的数据科学团队在API背后部署模型,以便在任何地方集成它们。

计算能力和GPU

神经网络通常会非常深,这意味着训练和使用它们进行推理需要大量的计算能力。通常,我们希望我们的算法运行得更快,对于很多用户来说,这可能是一个障碍。

此外,现在许多生产上的机器学习都依赖于GPU。然而,它们既稀缺又昂贵,这很容易给机器学习的扩展任务增加另一层复杂性。

可移植性

模型部署的另一个有趣的挑战是缺乏可移植性。我注意到这通常是遗留分析系统的问题。由于缺乏将软件组件轻松迁移到另一个主机环境并在那里运行的能力,组件可能会被锁定在特定的平台上。这可能为数据科学家在创建和部署模型时制造障碍。

可扩展性

对于许多AI项目来说,可扩展性是一个真正的问题。实际上,你需要确保你的模型能够扩展并满足生产中性能和应用程序需求的增长。在项目开始时,我们通常依赖于可管理范围内的相对静态数据。随着模型进入生产环境,它通常会接触到大量的数据和数据传输模式。你的团队将需要一些工具来监视和解决性能和可扩展性方面的问题,这些问题将随着时间的推移而出现。

我认为,可扩展性问题可以通过采用一致的、基于微服务的方法来进行生产分析来解决。团队应该能够通过简单的配置更改快速地将模型从批处理迁移到随需应变的流处理。类似地,团队应该有扩展计算和内存占用的选项,以支持更复杂的工作负载。

机器学习峰值计算

一旦你的算法被训练好了,它们并不是时时刻刻被使用——你的用户只会在需要的时候调用它们。

这可能意味着你只需要支持上午8:00时的100个API调用,而在8:30时需要支持10,000个API调用。

根据我的经验,我可以告诉你,使用动态扩大或缩小你的服务来确保不为你不需要的服务器付费是一个挑战

由于所有这些原因,只有少数数据科学项目最终真正进入生产系统。

模型的稳定和鲁棒

我们总是花很多时间准备模型。我们需要把原型变得稳定和鲁棒,这样它就可以实际服务于大量的用户,这通常需要大量的工作。

在许多情况下,整个模型需要用一种适合体系结构的语言重新编码。仅这一点往往就会导致大量痛苦的工作,从而导致几个月的部署延迟。完成之后,必须将其集成到公司的IT体系结构中,包括前面讨论的所有库问题。此外,在生产环境中访问数据也常常是一项困难的任务。

更多的挑战

在做项目的过程中,我也注意到了以下问题:

  • 如果我们改变了一个输入特征,那么其余特征的重要性、权重或使用可能也会改变。机器系统必须设计得易于跟踪特征工程和选择更改。
  • 当模型被不断迭代和微妙地改变时,跟踪配置更新同时保持配置的清晰性和灵活性将成为额外的负担。
  • 有些数据输入可能随时间而改变。我们需要一种方法来理解和跟踪这些变化,以便能够完全理解我们的系统。
  • 在机器学习应用程序中会出现一些传统的单元/集成测试无法识别的错误。部署错误的模型版本、忘记某个特征以及在过时的数据集上进行训练只是其中的几个例子。

测试和验证的问题

正如你可能已经知道的,模型由于数据更改、新方法等而不断发展。因此,每次发生这样的变化时,我们都必须重新验证模型的性能。这些验证步骤引入了几个挑战:

除了在离线测试中验证模型外,评估生产模型的性能也非常重要。通常,我们在部署策略和监视部分对此进行规划。

与常规软件应用程序相比,机器学习模型需要更频繁地更新。

自动化机器学习平台

有些人可能听说过自动化机器学习平台。这可能是一个快速生成模型的好方法。此外,该平台可以支持多个模型的开发和比较,因此企业可以选择最适合其预测准确性、延迟和计算资源需求的模型。

多达90%的企业机器学习模型可以自动开发。数据科学家可以与业务人员合作,开发目前自动化无法实现的一小部分模型

许多模型经历了漂移(性能随时间降低)。因此,需要监视已部署的模型。每个部署的模型都应该记录所有的输入、输出和异常。模型部署平台需要提供日志存储和模型性能可视化。密切关注模型性能是有效管理机器学习模型生命周期的关键。

必须通过部署平台监视的关键元素

发布策略

探索许多不同的方式来部署你的软件,“shadow mode”和“Canary”部署对机器学习应用程序特别有用。在“shadow mode”中,你捕获生产中新模型的输入和预测,而实际上并不服务于这些预测。相反,你可以自由地分析结果,如果检测到错误,则不会产生重大后果。

当你的体系结构成熟时,请考虑启用渐进的或“Canary”版本。这种做法是指你可以向一小部分客户发布产品,而不是“要么全部发布,要么什么都不发布”。这需要更成熟的工具,但它可以最小化错误。

总结

机器学习仍处于初级阶段。实际上,软件和硬件组件都在不断发展,以满足机器学习的当前需求。

Docker/Kubernetes和微服务体系结构可以用来解决异构性和基础设施方面的挑战。现有的工具可以单独地极大地解决一些问题。我认为,将所有这些工具结合起来以使ML运作化是当今最大的挑战。

部署机器学习是并且将继续是困难的,这只是组织将需要处理的一个现实。值得庆幸的是,一些新的架构和产品正在帮助数据科学家。此外,随着越来越多的公司扩展数据科学操作,他们也在实现使模型部署更容易的工具。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
部署机器学习非常困难,并将一直如此...
来源:https://pixabay.com/images/id-3859549/
AI研习社
2019/11/20
3220
部署机器学习非常困难,并将一直如此...
【平台】Seldon.io发布新开源平台,用于Kubernetes上的机器学习
机器学习部署有很多挑战,但是新的Seldon Core打算帮助它的新的开源平台,用于在Kubernetes上部署机器学习模型。 Kubernetes(通常称为K8s) 是用于自动部署、扩展和管理容器化
AiTechYun
2018/03/02
1.9K0
【平台】Seldon.io发布新开源平台,用于Kubernetes上的机器学习
什么是MLOps——机器学习运维,为什么要用MLOps
👆点击“博文视点Broadview”,获取更多书讯 在过去的几年里,机器学习(ML)正在逐渐发展成为当今商业和软件工程领域的热门名词,由ML驱动的应用呈爆发式增长,如推荐系统、精准营销、广告系统等。 市面上ML方面的图书和文章也越来越多,细心的读者会发现ML相关图书多集中在不同机器学习算法的原理、算法是如何工作的及如何通过数据进行模型训练等方面的理论和实践上,而对于如何构建由ML驱动实际应用的项目工程方面,如数据收集、存储,模型部署、管理及监控运维等方面的书却很少见,这些方面没有得到足够的重视。 在企业应
博文视点Broadview
2022/05/07
5570
什么是MLOps——机器学习运维,为什么要用MLOps
使用Kafka在生产环境中构建和部署可扩展的机器学习
生产环境中使用Apache Kafka的可扩展的机器学习 智能实时应用程序是任何行业的游戏规则改变者。机器学习及其子课题深度学习正在获得动力,因为机器学习使计算机能够在没有明确程序设计的情况下找到隐藏的见解。分析非结构化数据,图像识别,语音识别和智能决策需要此功能。这与使用Java,.NET或Python的传统编程有很大的不同。 虽然机器学习背后的概念并不新鲜,但大数据集和处理能力的可用性使得每个企业都可以构建强大的分析模型。任何行业都有大量的使用案例,通过在企业应用程序和微服务中应用分析模型来增加收入,
用户1263954
2018/05/30
1.4K0
使用托管MLflow解决常见的机器学习挑战
在 Amazon SageMaker 上使用开源 MLflow 简化了生成式 AI 和 ML 实验以及生命周期自动化,从而实现可扩展、高效的工作流程。
云云众生s
2024/12/18
1610
使用托管MLflow解决常见的机器学习挑战
机器学习下的持续交付
机器学习在行业中的应用变得越来越流行,然而相对于传统软件开发,例如Web服务或者Mobile应用来说,这类程序的开发、部署和持续改进也变得更加的复杂。它们的功能改变通常由以下三个维度驱动:
ThoughtWorks
2020/03/13
5620
Databricks推出机器学习的开源多云框架,简化分布式深度学习和数据工程
Databricks研究调查的初步结果显示,96%的组织认为数据相关的挑战是将AI项目移至生产时最常见的障碍。数据是人工智能的关键,但数据和人工智能则处在孤岛中。Databricks是统一分析领域的领导者,由Apache Spark的原创者创建,利用统一分析平台解决了这一AI难题。今天在旧金山召开的Spark + AI峰会上,由4,000位数据科学家,工程师和分析领导者组成的年度盛会,为企业降低AI创新障碍创造了新的能力。这些新功能统一了数据和AI团队和技术:用于开发端到端机器学习工作流的MLflow,用于ML的Databricks Runtime以简化分布式机器学习,用Databricks Delta以提高数据的可靠性和性能。
AiTechYun
2018/07/27
1.2K0
Databricks推出机器学习的开源多云框架,简化分布式深度学习和数据工程
什么是MLOps?为什么要使用MLOps进行机器学习实践
随着数字化和计算能力的发展,机器学习(Machine Learning)技术在提高企业生产力方面所涌现的潜力越来越被大家所重视,然而很多机器学习的模型及应用在实际的生产环境并未达到预期,大量的ML项目被证明是失败的。从机器学习的发展历程来看,早期ML社区广泛关注的是ML模型的构建,确保模型能在预定义的测试数据集上取得较好的表现,但对于如何让模型从实验室走向用户的桌面,并未大家所关注。
人工智能日报
2023/06/22
1.5K0
MLOps:构建生产机器学习系统的最佳实践
你可能已经听过很多次了,但只有一小部分机器学习模型投入生产。部署和运行机器学习模型对于大多数已经开始将ML应用于用例的行业来说都是一个挑战。在这篇文章中,我将分享一些MLOps的最佳实践和技巧,它们将允许您在生产环境中使用您的ML模型并正确地操作它。在我们开始之前,让我们讨论一下我们可能都知道的典型的ML项目生命周期。
deephub
2021/04/16
1.3K0
为什么90%的机器学习模型从未应用于生产?
时代变幻莫测,仅仅增加客户体验流畅度和沉浸感并不能减轻企业的压力。在这种情况下,投入数十亿美元开发可以改进产品的机器学习模型就可以理解了。但有一个问题。公司不能只是把钱砸在数据科学家和机器学习工程师身上,就希望可以有奇迹发生。据 VentureBeat 报道,大约 90% 的机器学习模型从未投入生产。换句话说,数据科学家的工作只有十分之一能够真正产出对公司有用的东西。
深度学习与Python
2020/12/07
5650
Azure - 机器学习企业级服务概述与介绍
Azure 机器学习是一种用于加速和管理机器学习项目生命周期的云服务。机器学习专业人员、数据科学家和工程师可以在日常工作流中使用它:训练和部署模型,以及管理 MLOps。可以在 Azure 机器学习中创建模型,也可以使用从开源平台构建的模型,例如 Pytorch、TensorFlow 或 scikit-learn。MLOps 工具有助于监视、重新训练和重新部署模型。
TechLead
2023/10/25
2820
Azure - 机器学习企业级服务概述与介绍
《C++与机器学习:职场新机遇的璀璨火花》
在当今科技飞速发展的时代,机器学习已经成为了引领创新的重要力量。而 C++作为一种高效、强大的编程语言,与机器学习的结合正展现出巨大的职场潜力。
程序员阿伟
2024/12/09
1080
为什么机器学习模型在生产中会退化?
由于意外的机器学习模型退化导致了几个机器学习项目的失败,我想分享一下我在机器学习模型退化方面的经验。实际上,有很多关于模型创建和开发阶段的宣传,而不是模型维护。
石晓文
2019/11/12
2.1K0
机器学习算法和架构在MLOps框架下的工程实践
👆点击“博文视点Broadview”,获取更多书讯 本文主要介绍机器学习(以下简写为ML)算法和架构在MLOps框架下的工程实践。 当从业者具备了足够丰富的知识储备时,就可以开始尝试ML了。 通常情况下,ML实践会涉及研究和生产两个主要环境。 研究环境可以在本地计算机或工作站上,这通常是为了进行小规模的模型分析和探索。 生产环境是模型投产的环境,ML在生产环境中通常需要相对长期的持续运行,生产环境中的任务一般需要自动化和持续迭代。 下面举个仅需要在研究环境中进行数据分析或建模即可满足需求的例子,即在文章
博文视点Broadview
2022/04/21
4020
机器学习算法和架构在MLOps框架下的工程实践
构建实战机器学习系统的10点经验(二)
原文:10 More lessons learned from building real-life Machine Learning systems — Part II 译者:刘翔宇 审校:赵屹华 责编:周建丁 在我上一篇博客中,我介绍了10点新的经验,并且讲述了其中5个。那么现在来讲讲剩下的5个吧。 6.特征工程的烦恼与收获 一个性能良好的机器学习特征的主要特性有: 可复用性 可转换性 可解释性 可靠性 这些特性究竟意味着什么? 可复用性:你应该可以在不同的模型,应用和团队中重复使用特征。 可转换
用户1737318
2018/06/06
5350
机器学习—— 机器学习运维(MLOps)
随着机器学习技术的日益成熟,如何高效地将模型部署到生产环境并持续维护,成为许多企业关注的核心问题。MLOps(机器学习运维) 应运而生,它结合了传统的DevOps理念和机器学习的独特需求,旨在通过自动化和协作提高模型的开发、部署和监控效率。
六点半就起.
2024/10/18
3550
机器学习—— 机器学习运维(MLOps)
机器学习与软件开发生命周期
新的软件开发生命周期(SDLC)意味着要找到适应您的机器学习工作流程的方法。由于数据科学家目前将大量时间都花在基础设施和流程上,而不是在构建模型上,因此寻找软件生命周期与机器学习有效配合的方法对数据科学家的生产率和工作满意度至关重要。
AiTechYun
2019/12/31
6540
机器学习与软件开发生命周期
实战 | 如何上线一个机器学习项目?
Canvas是用于设计和记录机器学习系统的模板。它比简单的文本文档具有优势,因为Canvas用简单的部件通过部件之间的相关性来寻找机器学习系统的关键组件。这个工具已经很流行,因为它对复杂项目进行了可视
朱晓霞
2018/07/20
4970
资源 | 企业应该怎样选择数据科学机器学习平台?
选自kdnuggets 机器之心编译 参与:吴攀、黄小天、Nurhachu Null 一个弹性的数据科学平台(Data Science Platform)对于大型企业内的每个集中化数据科学团队都是不可或缺的。它能帮助团队在 PB 级尺度上对模型进行集中化、再利用和产品化。本文作者为 Algorithmia 的 Ahmad AlNaimi。 你开发了一个 R/Python/Java 模型。它运行得很好。然后呢? 首先你的 CEO 要听闻机器学习,并且知道数据是新的石油。数据仓库团队中有个人刚提交了他 1P
机器之心
2018/05/08
1K0
资源 | 企业应该怎样选择数据科学机器学习平台?
大模型应用系列:从MLOps到LLMOps
【引子】在IT领域中,DevOps 是软件工程效能的重要方法论以及工具集, 在人工智能领域同样如此。
半吊子全栈工匠
2024/12/23
1780
大模型应用系列:从MLOps到LLMOps
推荐阅读
相关推荐
部署机器学习非常困难,并将一直如此...
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档