MLOps虚拟事件
可按需
随着组织不断发展他们的机器学习(ML)实践,对能够处理整个机器学习生命周期的健壮可靠平台的需求越来越大。bob体育客户端下载mlop的出现是有希望的,但仍存在许多挑战。
现在注册,观看Databricks面向自动化mlop的最新发展——包括新的Git和CI/CD集成,实验的自动记录,模型可解释性和模型服务。
我们还将介绍:
- 从领域专家到大规模操作ML的最佳实践,从实验到生产
- 您将需要的功能、常见缺陷以及技术和组织挑战(以及如何克服它们)的清单
随着组织不断发展他们的机器学习(ML)实践,对能够处理整个机器学习生命周期的健壮可靠平台的需求越来越大。bob体育客户端下载mlop的出现是有希望的,但仍存在许多挑战。
现在注册,观看Databricks面向自动化mlop的最新发展——包括新的Git和CI/CD集成,实验的自动记录,模型可解释性和模型服务。
我们还将介绍:
演讲将通过演示、成功故事和专家的经验得到加强,这些专家已经为预测分析部署了此类管道的真实例子。现场问答和讨论将使本次活动吸引数据科学从业者和领导者。
议程
开幕式主题
产品演示
客户的故事
现场问答
活动信息:
可按需
演讲者:
演讲者1:
数据很大,但它的潜力更大。与人工智能数据相结合,有望治愈疾病、拯救生命、扭转气候变化,并改变我们的生活方式。我们相信,未来取决于数据,并释放其无限的潜力。我们就是来实现这一目标的。
演讲者1:
Databricks是一家数据和人工智能公司。我们帮助数据团队、工程师、分析师和科学家共同努力,发现数据中的价值,并解决世界上最棘手的问题。因为我们作为企业、作为人、作为一个星球所面临的挑战并不容易。它们不能孤立地解决。这不是一个人能解决的。我们需要所有的数据,所有的科学,所有的脑力。我们需要所有人齐心协力,在一个地方。在唯一一个用于数据管理、商业分析和机器学习的开放统bob体育客户端下载一平台上,这改变了一切。它扩展了我们对可能性的认识。这让事情变得简单。 It turns weeks into minutes. So data teams can innovate faster, because that’s how innovation should happen. Collaborative and fast.
演讲者1:
所以让我们抛开假设。打破常规。绘制每个基因组。治愈所有癌症。疯狂地观看宇宙。洞穴般的黑洞。让每一个声音都被听到。破解黑客。(听不清00:01:33)。进行更多的登月计划并让它们着陆。
发言人2:
天堂已经成为人类世界的一部分。
演讲者1:
从现在起,你和你的数据、你和答案之间没有任何障碍,因为数据的力量就是了解的力量。现在你知道了。
西尔维娅Simion:
欢迎每一个人。感谢您参加我们的MLOps虚拟活动。我叫西尔维亚·西蒙。我在Databricks做产品营销,我很高兴今天能作为你们的主持人来到这里,也很高兴能和我们的演讲者一起,因为我们有一个非常令人兴奋的阵容,他们为你们准备了一些很棒的演示和演示,讨论并向你们展示如何更好地大规模地运行和自动化机器学习的最佳实践和技术。所以我真的希望你能喜欢听他们的演讲,并更多地了解不同环境下的机器学习实践。BOB低频彩
西尔维娅Simion:
我们将以开幕主题演讲和演示拉开帷幕,随后将有来自H&M、JB Hunt和Artis Consulting的发言人发言。然后我们将在活动结束时进行现场问答,但首先是一些内务和后勤工作。
西尔维娅Simion:
在整个网络研讨会期间,您的音频连接将被静音,我们听不到您的声音。这一事件的记录将会提供。请务必访问Databricks博客了解详细信息。为了给观众最好的体验,所有的谈话都事先录好了。也就是说,我们把这设计成一个高度互动的活动。我们的发言人和一些来自Databricks的工程师在现场回答问题。如果您在此活动期间有任何问题,请使用聊天框,这是平台的一部分。bob体育客户端下载我们还将在活动结束时进行现场问答环节。如果您对某位主持人有疑问,请在提问中注明,我们将直接向相关人员提问。
西尔维娅Simion:
对于那些不熟悉Databricks的人来说,我们的公司是由Apache Spark的最初创造者在七年前创建的。我们的使命是帮助数据团队解决世界上最棘手的问题。我们的业务专注于通过将整个组织的数据工程师、数据科学家和分析师聚集在一起,帮助企业加速创新。很多人认为我们是一些最好的开源技术的创造者和创始人,从Spark开始,还有Delta Lake, MLflow,最近我们还收购了Redash。bob下载地址
西尔维娅Simion:
让我们开始吧。让我们开始吧。我们今天的日程排得满满的。我们关于MLOps和ML平台行业现状的开幕主题演讲将由Databrickbob体育客户端下载s的Matei Zaharia和Clemens Mewald发表。Matei和Clemens之后是Sean Owen,他将在Databricks上使用MLflow为Pytorch演示端到端MLOps。
马泰Zaharia:
大家好,欢迎来到MLOps虚拟活动,大规模自动化机器学习。因此,我认为正如本次网络研讨会上的每个人都意识到的那样,机器学习正在改变许多主要行业,从医疗保健到物流,再到工业物联网。旅游公司已经部署了数千个甚至数百万个模型来管理日常运营。但与此同时,机器学习与传统软件有很大不同,开发和操作机器学习应用程序是复杂的。让我们来看看它的不同之处。首先,就目标而言。传统软件的目标通常只是满足某种功能规格。例如,当你按下这个按钮时,你为某人创建了一个帐户。基本上这是一个布尔目标,你要么达到了目标,要么没有。一旦你做到了,你就有了可以工作的软件,就是这样。 It’s going to keep working.
马泰Zaharia:
另一方面,在机器学习中,目标通常是优化预测精度等指标。所以这是你永远不会完全完成的事情。总有办法让他们变得更好。它也可能随着世界的变化而改变。我们的第二个重要区别是影响质量的因素。在传统软件中,软件的质量只取决于你所编写的代码。你可以检查代码,你可以调试它,在某些时候你可以说,好了,它完成了,然后应用程序将继续正常工作。
马泰Zaharia:
相比之下,在机器学习中,根据定义,机器学习是从你可以给它们训练的数据集中泛化的程序。因此,质量很大程度上取决于训练数据,而这些数据必须随着时间的推移而变化,因为你周围的世界在变化,所以你的应用程序的质量也会发生变化。此外,当您更改数据时,现在您可能还需要更改算法的调优参数,这是额外的复杂性。所以很难说,一旦我写完代码,我就完成了应用程序,你必须不断地用新数据训练它,不断地调优它,以获得最好的性能。
马泰Zaharia:
最后,让我们看看您使用什么样的软件来构建应用程序以及如何管理它。在传统软件中,通常只选择一个软件栈。例如,你选择一个数据库,你选择一个web服务器框架,你选择一个UI框架等等,然后你只用这些来构建你的应用程序,就是这样。
马泰Zaharia:
相比之下,在机器学习中,因为你的目标是优化某种指标,你总是希望能够试验新的库,新的算法,做你管道的不同部分,也许以一种新的方式组合它们来做相同的测试,因为如果你能将预测精度提高0.5%,0.25个百分点,这对你的业务可能会产生非常大的影响。所以你需要机器学习的基础设施,让它很容易切换和试验不同的库和算法,不像传统的软件。因此,由于这些差异,操作机器学习应用程序非常复杂,这就是为什么它产生了整个mlop领域。
马泰Zaharia:
首先,涉及到许多团队和系统,因为应用程序不仅涉及由ML工程师编写的一些代码,还涉及提供事件的数据管道,以及将模型集成到应用程序中的一些工作,然后监视它的行为并提供反馈以改进它。所以它至少涉及到这三个不同的团队,有时可能需要更多的合作。
马泰Zaharia:
其次,应用程序需要不断地更新数据,你需要不断地计算和重新计算指标,以了解它的运行情况。所以你需要的不仅仅是一个由背后的一整套数据管道运行的应用程序,这些数据管道不断地为它提供信息,不断地对它进行再训练,并确保它以最高效率工作。
马泰Zaharia:
最后,对于机器学习,从开发环境转移到生产环境是相当困难的,因为在开发过程中,你要试验这么多不同的库和方法,你需要以某种方式以可复制的方式捕获它,并在生产环境中运行或在应用程序中运行,并确保它产生相同的结果。
马泰Zaharia:
由于这些复杂性之一,我们与业内许多机器学习团队交谈时发现,他们经常不得不花费一半的时间来维护他们已经投入生产的现有模型。而且他们没有太多的时间来开发新模型。因此,提出一个MLOps过程是非常重要的,它可以尽可能多地实现自动化,这样这些团队就可以真正地进行创新,而不仅仅是花时间照看这些模型,并确保它们今天至少和昨天一样好。
马泰Zaharia:
因此,他们对这些挑战的回应是一种全新的软件,称为机器学习平台,它有软件来管理机器学习的开发和操作过程,从实验数据到生产。bob体育客户端下载到目前为止,相当多的公司已经建立了内部ML平台。bob体育客户端下载一些例子包括谷歌、Facebook和Uber等最大的网络公司,但许多其他企业也在建设中。开源社区也做了很多工作来设计它们,特别是Databricks,我们启动了MLfbob下载地址low,这是这个领域中使用最广泛的开源项目之一。这些ML平台通常提供一系列bob体育客户端下载功能。它们可以包括数据管理、实验管理、减法度量、模型管理,以允许您共享模型,以及使部署模型以进行推断或重现模型或测试监控和应用变得非常容易的功能。它们通过一致的接口来完成所有这些工作,这样您的团队就可以采用它们,并以相同的方式使用不同的模型,并不断为特定的测试寻找并改进最佳模型。
马泰Zaharia:
在ML平台中有很多不同的组件,但我想谈谈的一件事是,哪些顶级功能可以决定ML平台的成功或失败bob体育客户端下载,并真正使它们更加成功。因此,根据我们与数千家使用ML的组织合作的经验,我们发现了三个您应该考虑的非常重要的特性。首先是数据科学家、工程师和模型用户易于采用ML平台。bob体育客户端下载基本上每个人都会参与到这个过程中。所以你需要询问他们需要做多少工作才能使用这个平台,特别是如果他们有现有的代码或现有的数据管道或现有的应用程序,你想采用这个平台。bob体育客户端下载你还需要问它支持什么机器学习库,什么部署环境等等。
马泰Zaharia:
这些事情中的大部分都会产生巨大的不同。如果平台易于采bob体育客户端下载用,那么数据科学家、数据工程师等将开始使用它,您将开始从管理和操作数据应用程序的主要方式中获得所有这些好处。如果很难接受,这将是一场艰苦的战斗,人们可能会认为开始使用它太麻烦了。这是我们尝试优化的主要内容之一,例如MLflow。
马泰Zaharia:
第二个重要因素是与数据基础设施的集成。正如我所说的,机器学习应用程序都以数据为基础,对于机器学习团队来说,想要返回并更改数据管道、收集新类型的数据等或自己管理数据集是非常常见的,例如,创建版本,以便他们可以进行可重复的模型训练和实验。
马泰Zaharia:
因此,对于MLOps基础设施来说,与数据基础设施、新功能(如数据移动、监控、治理和API集以及用户界面)集成是非常重要的,这些新功能可以使数据人员和机器学习工程师轻松协作。当然,这也是我们花费大量精力的地方。
马泰Zaharia:
我们发现的最后一件非常有用的事情是拥有协作功能,允许团队在公司内部的中心位置共享代码、数据、功能、实验和模型。当然,这样做是安全的,这样你就可以控制谁可以访问什么。这是因为许多机器学习项目可以从以前的项目中受益。也因为涉及到很多不同类型的密钥和用户,所以对于人们来说,能够找到一个模型的最新版本,或最新版本的数据集等等,并可靠地在其上进行构建,而不是仅仅通过电子邮件发送确切的文件等等,这是非常重要的。
马泰Zaharia:
这些教训激励了我们支持mlop和数据库的方式,然后也激励了我们团队开发的开源项目。bob下载地址所以基本上我们关于mlop的理念是双重的。首先,我们认为每个组织的需求都会略有不同,因为他们的业务内部,他们拥有的数据,或者他们拥有的专业知识等等,它会随着时间的推移而改变,因此,我们可能会提供一个非常通用的平台,很容易与你公司中可能有的各种工具集成。bob体育客户端下载这允许你随着时间的推移改变你如何进行机器学习的细节,并且仍然有一个主要的方法来管理它,以及一个主要的方法来让团队使用和操作你使用ML构建的应用程序。我们可以通过使用三个支柱来做到这一点。
马泰Zaharia:
第一个是Databricks的Workspace,它基本上是一个统一的开发环境,数据科学家、机器学习工程师、数据工程师和分析师都可以在这里合作处理相同的数据和相同的代码,这有助于我们保持一致。然后是两个开源项目,Delbob下载地址ta Lake是云存储的数据管理层文档,它是提供事务版本控制的Amazon S3,以及一大堆丰富的管理特性,可以让您轻松地在团队中使用这些大型数据集。MLflow是一个开源的机器学习平台,你可bob下载地址以与许多流行的编程语言、库、部署工具等集成,bob体育客户端下载来完成我所说的很多功能,比如实验管理、监控、集中共享模型等。
马泰Zaharia:
因此,在本次网络研讨会上,我们将更详细地讨论mlop的需求和其中一些技术。我们将讨论我们和其他组织是如何大规模执行mlop的。我们将有一些演示来展示这一点,以及我们的两个大型ML客户的经验,关于他们在这个过程中学到了什么。最后,我们将在节目最后与主持人进行现场问答。我希望你们喜欢这次网络研讨会。
克莱门斯Mewald:
好吧。马泰,谢谢你的概述。我将向您介绍Databricks如何解决其中一些问题。所以Databricks提供了很多不同的功能,但在这次演讲中,我想从ML平台的角度来看待Databricks。bob体育客户端下载所以在这次演讲中,我将逐一介绍这些盒子,并描述Databricks如何解决这些挑战。我们将从数据科学工作区开始。数据科学工作空间实际上是数据工程师、数据科学家、ML工程师和数据分析师可以聚集在一起,就世界上最棘手的问题进行合作的环境。使用笔记本的数据科学工作空间中的核心用户界面。而Databricks也有相当独特的笔记本产品。
克莱门斯Mewald:
首先,它实际上支持多语言。这意味着每个笔记本都有一种默认语言。你可以看到这是一个Python笔记本。这意味着笔记本中的每个季度,默认情况下都将被解释为Python,但每个单元格实际上都可以声明自己的语言。所以你可以在同一个笔记本上阅读Scala、SQL、Python或R语言。这不仅给了你很大的灵活性,而且还促进了合作。因此,数据工程师可以在同一个笔记本上使用Scala,而数据科学家可以使用Python。这些笔记本也有云原生协作功能,你可以从其他产品中使用这些功能,比如在笔记本中进行评论。当你共享一个笔记本电脑时,我们有一个功能叫做“共同存在”,你有一个“共同存在”指示器,它会告诉你其他人在同一个笔记本电脑上。如果这个人有编辑权限,你可以实时看到他们的光标和他们的编辑。 So you can really in real time collaborate on the same notebook and on the same code.
克莱门斯Mewald:
现在,笔记本电脑非常适合探索和实验,但我们也想确保我们能促进将其投入生产。因此,我们引入了一个名为基于Git的项目的新功能,它允许你将[听不清00:17:58]数据输入Databricks,然后将数据输入你的笔记本,输入你最喜欢的Git提供商,通过代码审查过程,运行一些测试,运行任何你能想到的CSV自动化,然后将它们带回Databricks运行生产作业。因此,这真的结合了笔记本电脑的灵活性与CSV和软件部署系统的严谨性。
克莱门斯Mewald:
现在,一旦你有了两个数据科学工作空间,你真正关心的下一件事是确保你可以访问所有的数据。因此,Databricks提供了一个非常独特的产品,叫做Delta Lake,这也是一个开源产品,但也集成到平台中。bob下载地址bob体育客户端下载Delta Lake在您的Delta Lake之上提供了一个事务层,因此您的数据保存在您选择的数据湖中,并且在此基础上为您提供额外的好处。
克莱门斯Mewald:
首先,您可以从任何来源摄取任何规模的任何格式的数据。所以不管它是CSV文件还是pre-K文件或CSV文件,你都可以摄取它们并使用Delta Lake格式。Delta Lake提供资产交易来实际保证数据的有效性。所以你对Delta表做的任何摄取和任何改变,实际上都会创建一个新的事务,这也促进了一个被称为时间旅行的特性。因此,每次事务发生时,我们将版本号加到写头日志中。然后你总是可以回到过去,因此得名,并查看特定版本的数据,因为我们忽略了在那个版本之后发生的交易,这是一个非常独特的功能,实际上有利于再现。为了与MLflow集成,我们实际上创建了一个自动日志记录您使用的数据和版本信息。我会在后面的幻灯片上更详细地展示给你们。
克莱门斯Mewald:
所以在Databricks,我们真的想专注于训练机器学习模型。因此,机器学习运行时提供了一个无需devops的环境,该环境是为机器运行预配置和优化的。我们在截图中提供了几种不同的口味。你看,我选择GPU运行时,它为你设置了所有的驱动程序和配置,所以你可以开始工作。当你选择它时,你只需要在你选择的云上选择一个[听不清00:20:24]类型。然后你可以继续训练你的GPU模型。
克莱门斯Mewald:
现在,我们在这些运行时中打包了什么?我们打包了最流行的ML库。包括TensorFlow、Keras、Pytorch、Scikit-learn,当然还有MLflow。它是在机器学习运行时预配置和预安装的。我们定期发布机器学习运行时,以确保所有这些都是最新的。我们进行了严格的测试,以确保所有这些都能很好地协同工作。您不必担心自己设置这些环境。我们还包括库,以更容易地分发您的机器学习,深度学习库。在这张幻灯片之后我还有一张幻灯片。当然,我们也为超参数调优和autoML构建了库,我会在一两张幻灯片中讲到。
克莱门斯Mewald:
因此,对于我们的分布式训练,我们实际上在运行时将支持内置到机器学习中,以分发Keras、TensorFlow和PyTorch模型。当然,你总是可以训练它们并评估在Spark上分发的模型,但是Horovod运行一个特定的用户库,帮助你分发Keras、TensorFlow和PyTorch模型。然后我们还引入了对TensorFlow原生分发策略的支持,这是在TensorFlow 2.0中引入的。
克莱门斯Mewald:
然后对于超参数调优,我们集成了一个叫做Hyperopt的库,它有一个非常简单的界面。我们只是配置了一个搜索空间,然后你把这个函数叫做admin,然后我们用这个叫做SparkTrials的API扩展了它。如果你只使用Hyperopt这个开源库,它会依次运行所有这些试验bob下载地址。但是在SparkTrials中,我们实际上使用了一个集群来并行试验,这里你可以看到大约六个试验并行,总共有96个试验。同样,这并不需要是一个Spark模型,所以你可以在通过它的指令中训练一个Scikit-learn模型。然后我们基本上只用Scikit-learn模型同时用不同的超参数训练六个不同版本的模型。你也会在后面的幻灯片中看到,但是它会自动与MLflow集成。所以你可以在MLflow中免费跟踪所有的超参数训练。
克莱门斯Mewald:
现在你的模型已经训练好了部署选项是什么?MLflow确实提供了一组非常灵活和丰富的开箱即用的部署选项。在这张幻灯片上,您可以看到的只是一些受支持的ML框架的示意图,如何将其作为MLflow模型记录在MLflow跟踪服务器中,然后由MLflow注册中心管理部署。然后你真的有很多不同的选择来部署这些模型,无论是docker容器,Spark UDF作为休息端点,还是使用一些开源库。bob下载地址让我双击其中一个选项,突出显示关于使用MLflow部署模型的重要部分。
克莱门斯Mewald:
因此,这是用于部署作为MLflow模型记录为spark UDF的ML模型的核心方法。正如你在这里看到的,你只是加载它,在这里你会引用模型注册表中的模型,通过名称和生产阶段,然后你把它应用到一个数据帧。这适用于Spark MLLib模型。现在让我们看看Scikit-learn是什么样子的。这是用于Scikit-learn模型的代码行,这是用于TensorFlow模型的代码行。为了戏剧效果,让我回到Spark MLLib, Scikit-learn, TensorFlow。我想你已经注意到了,是的,它们都是一样的。MLflow格式的好处之一是它有一个称为Pyfunc的抽象,它将任何ML模型公开为Pyfunc函数。
克莱门斯Mewald:
所以所有的部署选项看起来都是一样的。所以不管这个模型是用Spark MLLib、Scikit-learn、TensorFlow训练的,它的工作原理都是一样的。同样的语句也适用于所有的部署选项。因此,为MLflow模型构建Docker容器是一样的,不管我们使用的是什么MLflow框架。所以这真的很方便,特别是因为我还没有看到一个企业只使用一种类型的框架。
克莱门斯Mewald:
既然我们已经讨论了完整的整个流,那么让我们实际看看MLflow提供的所有这些的基础,并为您提供端到端mlop和治理功能。在MLflow中,我们引入了这个功能,我们称之为自动日志记录。因此,我们可以自动跟踪尽可能多的关于您的工作的信息,这与我前面提到的跟踪数据源和版本控制相结合。如果你使用数据表
克莱门斯Mewald:
数据源和版本控制的支持。因此,如果您使用数据表,我们将跟踪您所使用的表本身和前面描述的版本号。有了这个,你就可以回到事实之后,说,我想看看我在训练中使用的数据和我当时使用的版本是一样的。这些信息是自动登录的。顺便说一下,我们确实会挂钩到Spark数据源API。所以这适用于任何Spark数据源,如果你读取一个CSV文件,它也同样有效。然而,当然,如果你阅读一个CSV文件,我们不需要版本控制和它的时间旅行功能。现在我们也开始为这些模型捕获模式。
克莱门斯Mewald:
所以你可以看到一个我们必须输入模式的例子,然后是模型预测列的类型,这在很多方面都对我们有帮助。其中之一是模型部署。我们实际上可以检查模式是否与模型的部署时间兼容。这只是展示了所有Mlflow框架的基本功能,比如自动跟踪。因此,对于所有这些Mlflow框架,如果您训练了一个模型并在Mlflow中使用自动日志记录,那么您将获得所有参数、以百分比为基础的指标以及我们可以为您自动记录的所有工件。正如您所看到的,这适用于所有流行的Mlflow框架。
克莱门斯Mewald:
这就是我之前展示的,超参数调优搜索的自动记录,然后我们可以在平行坐标图中可视化它。理解这个的方法是每一行都监测试验。它们是用颜色编码的优化指标,也就是损失。所以你可以看到所有的蓝线都有一个损失,然后你可以直观地看到每个参数的哪个值实际上会导致一个高质量的模型。同样,如果你在Databricks上使用机器学习进行参数调优,这将被自动记录。
克莱门斯Mewald:
我们还开始实现模型可解释性的自动跟踪。所以使用一个非常流行的叫做SHAP的库,我们根据你训练模型的方式来计算特征的重要性。然后,如果你做一些事情,比如训练一个图像模型,我们实际上可以根据图像中哪些区域有助于预测,来可视化未来的重要性。这是非常强大的,它可以让你深入了解你的模型在训练时的表现。
克莱门斯Mewald:
当然,除了所有男性特有的特征,我们还跟踪代码本身。当你训练它的时候,在代码的简短版本中,你运行模型时使用的计算机的经典配置,以及你使用的库的环境配置术语。
克莱门斯Mewald:
一旦模型准备好部署,就可以在Databricks中使用模型注册表了。这是模型的截图,在Databricks中注册的托管模型,在那里你可以找到模型,它们的版本,以及这些版本在哪个部署阶段。我们实际上在每个阶段都有多余的控制来促进不同阶段之间的转换,我们将在下一张幻灯片中看到。
克莱门斯Mewald:
因此,您可以看到,我们在向模型的特定阶段请求条件方面进行了治理。如果有人没有访问控制来实际进行转换,他们只能看到请求的选项。当然,我们会保留一个审计日志记录所有发生在模型上的事情。我们最近也在这里实现了评论,在这里你可以评论并与你的同事合作管理这些模型的部署过程。
克莱门斯Mewald:
这张截图来自某产品和Databricks。这是将Mlflow模型部署为休息端点的最简单方法。您单击一个表示启用服务的按钮,然后我们打开一个集群,并将模型作为休息端点公开,它还自动知道它们的所有版本和部署阶段。所以如果你调用模型名斜杠生产端点你总是会得到你的请求总是会被路由到标记为生产的版本。这只是一个输出的屏幕截图,实际上是使用Spark流进行实时模型监控。这实际上是在计算一个流AMSE,当新的预测和标签进来时告诉你模型的质量。
克莱门斯Mewald:
所以你可能会猜到,当我们浏览所有这些信息时我们一直在跟踪,我们基本上是在检查他们在这个重复性检查表中的所有评论。我们有你用过的代码你用过的数据,集群配置,你用过的环境规范。所以如果你真的实现了一个可复制的特性,允许你在我们生成你使用的代码之后,如果你使用了数据表,我们知道你使用的数据版本,我们可以为你重新创建集群或使用精确的配置。我们还可以重新创建你在自己的一端拥有的确切的环境和库配置,这是非常独特的,这是因为他们实际上跟踪所有这些信息,从数据到模型部署。以上就是Databricks作为ML平台的简要概述。bob体育客户端下载接下来,我要把它交给肖恩我们会给你们一个实际产品的演示。
肖恩·欧文:
大家好。我是肖恩·欧文。我是Databricks的主要解决方案架构师,今天我在这里向您展示Databricks中MLflow的一些新特性。这些功能包括Webhooks和注册表服务,以及Pytorch和SHAP的新自动日志功能。但在此过程中,我还想向您展示如何使用我认为的一些有趣的方法,您可以应用这些工具,如Pytorch和SHAP,甚至Delta Lake来解决这个问题。这里具体的问题是分类图像,胸部x光片。这些是由国家健康研究所提供的这些数据实际上成为了Kaggle竞赛的一部分。所以随着图像,我们有标签,它们是14种不同诊断中的一种或多种,表明x光片可能显示什么,在这些情况下胸部可能有什么问题。这里的任务是学习,给这些图像贴上标签,也许还能解释为什么要这样标记。当然,在这个过程中,我们将使用MLflow来帮助我们。
肖恩·欧文:
提醒一下,我不是医生,你可能也不是我们要建立的模型很简单。这可能还不足以用于临床。这并不一定足够准确。所以请不要根据这个诊断。不要在家里尝试,但我希望它表明这种学习和解释是非常可能的。就像所有的事情一样,我们从数据开始,我不会在数据上花太多时间,但我想向你们展示像Delta Lake这样的技术如何帮助处理所谓的非结构化数据,比如这里的图像。你们可能知道,Delta是Lakehouse架构和Databricks的基础,这意味着你可以做一个大规模操作的数据仓库,但你也可以在同一个地方分析非tip表格数据,比如图像,Delta在这两方面都能提供帮助。
肖恩·欧文:
我们将从用Spark读取图像开始Spark可以很容易地读取一个满是图像的目录,当我们在Databricks中加载这些时,我们会得到漂亮的缩略图。然而,我们可能不希望只是用Spark读取图像,而是继续,然后ETL到Delta表中。所以为什么?Delta对一个人来说是交易性的。这意味着我们在读取图像时不需要担心是谁在向图像表写入数据。它还提供时间旅行。这让我们可以返回并查询这个图像数据集在前一个时间点的状态。也许当我们三周前建立这个模型时,我们可以查询那个时候的表。
肖恩·欧文:
但也许更重要的是,深度学习通常涉及某种程度的预处理。我们必须规格化图像,大小,深度和通道,也许我们希望只做一次,而不是一遍又一遍地通过数据来建立模型。而且在云中,一遍又一遍地读取一堆小文件会有点慢,一直列出这些存储桶。因此,如果我们必须一遍又一遍地读取这些blob,那么ETLing一旦进入一个表,就可以从一个漂亮的压缩有效的数据存储(如Delta)中读取这些blob,这可能具有速度优势。
肖恩·欧文:
因此,为了达到这个目的,我们将从这一点开始。我们会同意这些图像,但也会快速地ETL它们成blob我们还需要加载与这些图像相关的元数据,标签,并对它们进行一些解析以获得每个图像的不同标签,然后简单地将它们连接起来。连接图像数据和标签后,我们可以简单地将其写成Delta表并将其注册到Meta存储中。如果我们愿意,我们应该可以在这里看到这个例子。好了,我们没事了。我们有图像,专栏,以及大约14种不同的可能诊断。回到笔记本上。
肖恩·欧文:
现在我们来看一下建模的问题。在本例中,我们最终将使用MLflow,因为我想向您展示MLflow如何与Pytorch集成。实际上MLflow集成了一个叫做Pytorch Lightning的东西。因此,对于Pytorch用户来说,使用Pytorch通常意味着编写大量的样板代码来描述训练循环并手动运行。Pytorch Lightning将其中的一些内容抽象出来。所以你不需要写一些样板文件你可以把关键部分写在这里。我们马上就会讲到。
肖恩·欧文:
从这里开始,我们要读取这个图像表。由于它没有那么大,大约有2.2 gb。我们要把它拉到一只熊猫。在开始训练之前做一个简单的训练测试。现在,我要说的是,您可以将相同的方法应用于更大的数据集。你可以使用Pytorch和一个叫做Horovod的工具在Spark之上分发训练。但为了简单起见,这里我们不这么做。我们只是在一台机器上训练这个相对较小的数据集。
肖恩·欧文:
我们将在这里定义几个辅助函数。Torchvision是Pytorch的配套包,它允许您定义输入所需的一些附加转换。例如,在这里我们需要稍微转换一下图像的通道顺序,并以一种正确的方式将它们规范化,以便于我们将应用于模型的预训练层。这是一些细节,但火炬视觉帮助会帮助我们。Pytorch用户同样知道,要访问数据,通常需要定义一个数据集类,该类定义了数据集的大小以及如何获取单个元素。在这里,我们使用了这些转换器等等,我们定义了如何从Delta表中的相对原始数据到Pytorch中为这个特定模型准备好的东西。这实际上只是读取图像,转换它并返回转换后的版本。
肖恩·欧文:
现在,在进入Pytorch建模之前,我们将启用MLflow的这个新特性。MFflow已经支持Scikit-learn、Keras和TensorFlow等一些流行包的自动日志记录,现在它还支持Pytorch。因此,通过为Pytorch启用自动日志,我们甚至不需要编写MLflow代码来获得一些好处,以便在训练Pytorch模型时记录我们正在做的事情。
肖恩·欧文:
我们来建立这个模型。现在,我们将在这里使用Pytorch闪电,我希望这对没有见过它的Pytorch用户来说可能很有趣。与Pytorch一样,我们需要定义一个模块,该模块定义了我们要训练的网络以及我们如何训练它。但我们并没有直接写出训练循环,而是在这里填一些空白。例如,我们必须定义它是怎样的,网络是什么样子的这里实际上是密集的网络。所以我们加载这个预先训练好的模型。所以这就是迁移学习,我们不会尝试重新训练它,在上面添加一点dropout,在上面添加一个完全连接的密集层,以最终建立一个分类器,从这些图像中预测这14种可能的诊断中的一种或多种。
肖恩·欧文:
这对Pytorch用户来说非常简单。最好的事情是找到所有关键的部分。前置通道是如何查看数据的,优化器是什么,如何验证,如何训练。我们只要让皮托炬闪电在这里工作就行了。它可以做一些很好的事情比如,自动调优,我们的批大小自动调优,我们的学习率,处理早期停止等等。Pytorch lightning是一个很好的框架,因为它有很多钩子,MLflow可以钩进去自动记录日志。
肖恩·欧文:
所以我不会在这里实时运行这个,因为模型训练在GPU上需要大约17或18分钟。但是,如果您确实运行了这个程序,您会发现在没有MLflow代码的情况下,如果您将单元格运行到MLflow,并且在Databricks中,MLflow被集成到您在这里看到的这个实验侧栏中,您将得到模型记录。如果我们把它拿出来,你会看到这个模型是我们从Pytorch auto logging中得到的。它有相当丰富的信息谁运行了这个模型?我做到了。什么时候,花了多长时间,笔记本的确切修订版是什么,以及制作这个模型的代码是什么?当然,所有为Pytorch模型定义的关键参数关键指标,哪个史诗是最好的,最终的验证损失是什么?当然,我们得到了模型和最后一个检查点。我们得到了网络体系结构的总结、非常有用的信息,甚至还有一些关于以后如何从MLflow加载这个模型的有用提示。
肖恩·欧文:
现在我还想向你们展示,首先我要说的是这个模型,我不打算向你们展示太多关于它的准确性,但请放心,它实际上达到了相当的准确性,与你们可能在介绍这个数据集的论文中看到的结果相当。所以训练前层和现代工具我们可以做得很好。开箱即用。我相信你可以做得更好,尽管有更多的时间,GPU时间和创造力。
肖恩·欧文:
下一件事很有趣。我想向您展示MLflow的服务模型。MLflow所做的一件关键事情是将模型以一种可能更有用的形式交还给您。有时这可能是一个spark UTF,一个你可以用spark应用到一堆数据的函数,但它也可以创建一个模型,一个微服务,一个REST API。你总是能够将其部署到Azure ML或Amazon SageMaker等服务上。但是最近,MLflow的最新版本,您实际上可以在模型注册表之外的Databricks中为模型提供服务。这就是我要展示给你们的。这是我这个笔记本的注册型号。我现在正在做第三个版本如果我愿意,我可以为这个注册的模型提供服务,突然间我有了一个端点,甚至在Databricks中,我可以把图像发送给你,以获得它们的分类。
肖恩·欧文:
但我想再多说一点。因此,这些REST API所做的就是公开一个服务,该服务可以接受JSON格式的输入描述,并将分类作为输出返回。唯一的问题是这里的输入实际上是一张图像。它是一个张量,在JSON中没有一个很好的方法来描述它,至少没有一个可以被MLflow自动转换为JSON的形式。为了实现这个,我们需要进行一些定制。我认为这在某种程度上说明了MLflow的力量,如果你需要,你可以改变它的工作方式。因此,我们将定义一个自定义MLflow模型,它将包装我们的Pytorch模型,并使我们能够接受图像为base64编码的字节字符串,从中解析图像,应用转换,应用Pytorch模型,然后返回结果。
肖恩·欧文:
所以这并不难。如果你需要,你可以这样做。这让我们可以把它变成一个服务我们可以通过JSON接受图像并返回它们的分类。定义了这个类之后,我们所需要做的就是加载我们实际的Pytorch模型,将它包装在这个包装器中并记录它。这就是我们实际部署到MLflow的模型,现在在Databricks中为注册表服务。所以你可能看到我已经注册了它,但只是作为参考,你会发现你可以通过点击注册模型并选择你感兴趣的模型来注册模型。但我已经注册了我感兴趣的那个。
肖恩·欧文:
为了证明它是有效的,让我们尝试一段代码来加载一张图像并将其发送到其余端点。我将从存储中加载一张图像。再说一次,Delta Lake House架构的一个优点是你可以把数据当作表格来处理。您也可以将数据作为文件和图像处理。没问题。我从数据集中加载一张图像。这就是它的样子。也许放射科医生能理解。我没有看到任何有趣的东西,但让我们看看模型是怎么想的。因此,要使用该服务,我们只需要对其进行编码并编码一个适当的JSON请求,将其发送到API并呈现结果。 And we get that back here as a pandas.DataFrame.
肖恩·欧文:
我们在这里可能看到的是模型认为这可能是肺不张的一个例子,这是一种肺塌陷或浸润,但可能不是疝气。这些是概率。嘿,这很有用。我的意思是,如果这是一个更好的模型,并经过专业人士的审查,你可以想象这可能是一个有用的助手,对于放射科医生来说,他们想要一些人头下来,知道他们可能在寻找什么。也许一个模型可以帮助他们弄清楚什么是可能的。
肖恩·欧文:
在深入讨论这一点之前,我想介绍MLflow最新版本的一个新特性,即Webhooks。因此,模型注册表,正如您可能在那里看到的,它的部分角色是管理模型版本的状态。所以你可能有一个当前的生产版本,你创建一个模型的新版本,它是登台候选,你测试它。在某种程度上,如果你通过测试并获得许可,你就可以将其投入生产。
肖恩·欧文:
这些都是重要的事件,也许这些事件创建了一个新模型,创建了一个新的测试候选需要触发一些事情,比如测试作业,CICT作业。这就是为什么MFflow现在支持Webhooks触发器来响应这些事件。登记它们是相当容易的。您必须直接访问REST API,但是您可以这样做,并有效地侦听这些事件。现在,对于这个简单的例子,我将设置一个Webhook来触发一个消息到Slack通道,这只是一个简单的演示目的,但你可以想象做更多的事情,触发一个lambda,触发一个CICT作业。所以我已经注册了这个Webhook来触发一个ping我的Slack频道,每当这个注册模型发生什么事情,我们应该看看这是否有效。例如,如果我进入一个模型并对它进行评论。我应该会发现它在我们的Slack频道中注册了一条新消息。就在那儿。好的。 Pretty good.
肖恩·欧文:
好的。现在我想谈谈另一个新特性,那就是模型解释。有时我们想知道模型为什么要这样做。有一个流行的开源工具叫做SHAP,它可以帮你bob下载地址做到这一点。它实际上可以在个体预测层面上解释,是什么样的输入导致模型做出了这样的预测。使用SHAP并不难,但在MFflow one 12中,它实际上可以相当自动地完成。只需一两行代码,您就可以让MLflow为您创建模型解释,甚至像这里这样记录图形。这实际上是一个总结图,总体上说明了模型的重要特征。你可以在这里看到实际的SHAP值,模型解释,所以那是可用的。你可以对任何模型这么做。 For this particular model though, I want to take the opportunity to show you something else you can do with SHAP, not through auto logging, but through a little more manual usage of SHAP that may be more interesting for this dataset.
肖恩·欧文:
所以事实证明,SHAP可以用一种有趣的方式解释图像分类。通过一小段代码,您可以尝试将图像与热图叠加,以显示图像是如何导致模型以这种方式分类的?在这种情况下,我实际上为我的数据集加载了一张图像,它肯定被分类为渗透,我从SHAP创建了一个解释器,它可以解释这个模型,并要求它解释。实际上是什么解释了共振的中间层。其实对不起,是密网的。这就是你从中得到的。你可以在这些x光片上看到左肩有一个黑点右肺底部也有一个黑点。不管出于什么原因,该模型认为这些在它的分类中特别重要。它的分类在这里。好的,很好。 92% chance it’s infiltration, maybe edema, maybe atelectasis.
肖恩·欧文:
所以我认为这扩展了一个想法,即这些模型不仅可以预测黑盒预测器,还可以解释。也许如果我们真的建立了一个更好的模型,这类事情可以让它对专业人士更有用,他们正在寻找因此,也许你在寻找整体的地方。也许模型可以更容易地看到人眼不能立即看到的东西。这些预测,这些解释可以与Spark并行创建,写入Delta表,甚至可以记录日志。其中一些是在MLflow中,所以这一切都是一个循环。
肖恩·欧文:
最后我想向你们展示的是Databricks中的一个新功能,叫做Projects。知道Databricks的人都知道你在工作空间中工作,我们通常使用单个笔记本,但通常我们想要使用一组笔记本,因为我们需要把它们放在一起。虽然在项目出现之前,您总是能够获得单个笔记本的修订历史,但您确实不能同时对笔记本组进行版本和提交更改。这就是"计划"存在的原因。
肖恩·欧文:
所以它不会改变你处理事物的方式。我实际上是在一个项目中的一个笔记本上工作,而不仅仅是工作空间中的一个浮动笔记本。但这基本上意味着这里有更深层次的get整合。首先,我可以看一下get分支,抱歉,是这个笔记本和这几个笔记本所支持的get repo,我可以一次编辑并提交多个笔记本,如果我愿意,可以设置一个提交消息。因此,对于那些习惯于版本控制大型项目的人来说,这可能更自然,由多个笔记本电脑组成的项目由get repo支持,而不是简单地内置版本控制。我们希望随着时间的推移扩展这一功能,让你可以在笔记本电脑的同时版本,比如小的配置文件或小的数据文件,因为有时这是更自然的事情。
肖恩·欧文:
因此,我希望您已经听说并看到MLflow、Webhooks与Pytorch和SHAP集成用于自动日志记录的一些新特性。Delta在某些方面可以用于特定的机器学习问题,使用注册表为模型提供服务,以及如何与图像分类器一起工作。最后,简要介绍一下项目以及它们对您的工作流程可能意味着什么。
西尔维娅Simion:
谢谢你们,Matei, Clemens和Sean。一个简短的提醒,如果你想尝试一些你在之前的股票和演示中看到的东西,请访问www.neidfyre.com/trial,在那里可以使用这些工具。在我们继续进行演示时,您也可以通过问答面板提交您的问题。
西尔维娅Simion:
现在让我们直接听听我们的客户是如何处理机器学习在他们的产品和系统中日益重要的问题的。更重要的是,他们如何管理组织内与ML计划相关的资产和整个生命周期?
西尔维娅Simion:
下一位演讲者是来自H&M的kevin Wang。kevin将概述H&M的参考架构和杰出的堆栈,这些堆栈旨在解决人工智能和机器学习产品中的一些常见挑战,如开发效率、互操作性、生产速度等。凯文还会演示制作流程。有请凯文。
凯文王:
大家好。我叫凯文。我在公司工作
凯文王:
大家好。我叫凯文。我在中庭组担任能力主管。今天,我要讲的是mlop我们如何大规模地应用它。我在一个叫AI基金会的组织工作。在AI基金会,我们针对不同的业务问题,从设计采购到物流、销售管理,以及我们如何与客户互动,研究了许多不同的用例。几乎涵盖了整个中庭价值链。这些用例中的每一个都是由一个多学科敏捷产品团队驱动的。他们从头到尾地开发和部署产品。在开发这种不同的机器学习产品时,它们有许多共同的挑战,例如,如果我们只讨论一个单一的模型,如何在大规模的机器学习训练管道中实现自动化,但它是否可以在我们的数百个南方模型中解决,以及如何提供机器模型的可重复性?
凯文王:
假设半年前,你希望能够使用相同的代码和相同的数据,重新训练完全相同的模型,你的模型审批过程是怎样的,这样你就可以有足够的信心将新模型投入生产。我们试图通过利用我们的参考架构或绘图来整体地解决这些不同的挑战。即使他们正在解决不同的业务问题,他们也共享一个共同的过程。例如,对于模型训练,它是关于获取数据,应用一些转换,训练模型,最后将模型放入模型存储库。对于模型部署,还需要获取数据,应用完全相同的转换,做出预测,然后保存结果,交付给最终用户。在中间,你有一些共同的关键问题。例如,如何加速进入和反馈循环,如何监控你的模型性能,你的数据漂移,以及你的基础设施。
凯文王:
此外,如何不仅对模型进行版本控制,而且对数据进行版本控制,以便您可以像在软件工件中一样管理它们。在此基础上,我们提出了一些技术组件,例如模型训练、模型管理和模型部署。这里有一些障碍是很重要的,这样我们就可以为每个障碍选择不同的工具,并独立地发展它们,因为机器学习是一个新兴领域。它们是每天、每周、每月都会出现的新工具。我们希望利用最好的杠杆来简化我们的工作。
凯文王:
经过一年的探索和逃避,我们总结出了一些工具。例如,对于模型训练,对于新开始的用例,我们有三个堆栈。我们倾向于利用数据中断世纪架构。然后,对于更成熟的用例,我们正在扩展,自动化也是关键。我们倾向于使用气流或Kubeflow作为主要的机器学习编排器。对于模型管理,和许多其他公司一样,我们喜欢MLflow用于模型部署,特别是在线模型。对不起,我们也喜欢Kubernetes。而且,像rare这样的开源工具带来了许多机器的特定功能。
凯文王:
除此之外,系统可观测性也是非常重要的。我们喜欢Azure堆栈。所以我们倾向于在大多数情况下使用默认的工具,如Azure Monitor和Power BI,对于Kubernetes的空间应用程序,Grafana和Premises是一个很好的选择。机器学习产品是[听不清00:53:33]软件产品,所以我们可以利用持续集成和持续交付等最佳实践来自动化学习过程。此外,最后,看着这些复杂的堆栈,我们无法实现适当的基础设施自动化。
凯文王:
我们来谈谈模型训练。对于新开始的用例,我们喜欢交互式模型开发或笔记本。然而,当你的代码库增长,你的团队规模也在增长时,笔记本电脑并不是一种非常可扩展的产品开发方式。如果只在笔记本上进行开发,你可能会欠下很多技术债。我们现在都处理过了,基本上是把笔记本里复杂的逻辑提取出来,放到单独的独立模型中,我们可以在本地开发,然后使用持续集成把所有的任务放在一起,在数据库上训练。
凯文王:
让我们来看看它究竟是如何工作的。这是一个目前的项目,我将从网上下载一些数据,并修剪随机强迫模型,然后将模型保存到MLflow中。让我们来看看这个项目的结构。在这个SFC文件夹中,我有许多python模型,并使用不同的函数捕获所有不同的模型。例如,配置管理评估方法,其中可以说明一些绘图和评估方法。准备数据的方法,其中包括一个模型,其中包括一些[听不清00:55:11]巧妙的数据。
凯文王:
在test文件夹中,我有py测试用例来评估这些python模型。在笔记本文件夹中,我有我的笔记本,你可以得到一些顶部py文件。你可以看到,即使是笔记本,我也可以用ID来计算语法。
凯文王:
现在假设我们已经完成了所有的本地开发,比如编码和py测试,我们想把这个笔记本上传到Databricks并编写。
凯文王:
我把这个脚本叫做。这个脚本所做的只是打包所有我通过的模型作为备份文件,并上传到数据库,然后也上传我的笔记本电脑到数据库。现在完成了,让我们看一看。这是我的数据库工作区。在这里我的笔记本已经被放置到一个特定的文件夹结构。这是我的项目名和分支名,我的用户ID和我的笔记本。在这个笔记本的第一个语句中,它会尝试安装这个脚本上传的egg文件。egg文件也被放置在与我正在处理的分支和我的用户ID相关的特定结构中,因此我不会覆盖我同事的工作。
凯文王:
现在让我们看一下这个笔记本。这里初始化为随机种子。现在,准备训练数据集只是一个调用方法。然后让我们开始训练模型。在这个随机森林模型中,我想把100改成150。在业务培训模型中,它还将使用MLflow来跟踪重要参数和其他指标。这是正确的。
凯文王:
好的。我们已经看到了一些关键的误差指标,最后,它还将评估模型和图表,一些漂亮的图表。看起来是个不错的图表。假设我们对这个模型,对参数的改变很满意。现在我们要提交代码。回到ID。这里我将应用同样的变化,从100到150,然后我只需要推送我的代码。
凯文王:
现在我的代码按了。让我们来看看CI管道。这是我的CI管道,我的模型,新的管道行已经被触发。让我们仔细看看。该管道包括两个任务。在第一项工作中,它将做一项叫做质量检查的研究。基本上,它将运行所有的py链接测试和单元测试,发布测试结果,也发布测试覆盖率报告。同时,我们还把我的笔记本打包,连同egg文件一起上传到数据库里,在数据库里运行笔记本。它将监视笔记本运行,直到完成。
凯文王:
现在搞定了。让我们来看看。这就是笔记本运行的结果。让我们看看所有的印刷品。而且,它是MLflow模型注册表。我们应该看到一种新的模式。好的,版本12。这是我们刚刚训练的一个新模型,在这个阶段仍然是none。
凯文王:
好的。这是第一个演示,我们可以看到,作为一个本地动态可以很好地集成与笔记本电脑开发与Databricks。而且,通过利用持续集成,我们可以自动化该过程,因此提供了一种很好的方法来跟踪模型元数据,并以与LS软件工件相同的方式管理模型。除了新成立的产品团队。我们也有一些更成熟的产品团队,他们的主要关注点是自动化和可扩展性,因为你需要训练许多模型。这些产品团队倾向于为特定的地理区域(如国家)、特定类型的产品(如男士t恤)和特定的时间段培训特定的模型,而不是培训单一的模型。
凯文王:
每一个都是考虑我们规模的一个场景。我们可以很容易地在不同的场景中设置。这是他们每天需要训练的一些模特。对于这种类型的用例,我们倾向于在Kubernetes之上利用基于气流或Kubeflow的架构,我们可以上下扩展集群,也可以利用外部计算能力,如数据集群,也可以在同一集群的docker容器内运行本地计算。
凯文王:
让我们继续讨论模型管理,以及模型服务。在高层次上,您可以将整个生命周期分为五个阶段:模型开发、回测、模型批准、部署到登台,然后部署到生产事件。我们讨论了如何自动进行模型开发,以及在MLflow中生成新模型的结果。回溯测试是将模型部署到开发环境中,运行所有的回溯测试,然后在模型审批过程中,团队中的某个人可以批准他们的模型。它将把模型版本解压到开发阶段,并将这个新模型部署到登台环境中。之后你可以进行一些系统测试,然后再有人来改进你的模型。在MLflow中将版本从stage提升到prott,然后将模型部署到生产环境中。
凯文王:
让我们在第二个演示中看看它是如何工作的。但在我们开始演示之前,我还想说几句关于塞尔登或塞尔登核心的话。Seldon Core是建立在bob下载地址Kubernetes之上的开源库。它引入了机器学习特定任务的部分功能。例如,它可以让你轻松地将模型打包为微服务。您可以将其公开为gRPC或Rest API。此外,Seldon介绍了一些核心概念,称为[infrasca 01:02:25]。想想你的模型预测不仅仅是一个步骤,包括异常值检测,特征转换。同时,也许你想送你的一个模型到我们的祭坛,这是选择一个你的模型。与这个特定的要求最相关,然后做出预测。
凯文王:
这些步骤中的每一步都可以在单个豆荚或容器中运行,您可以独立地获取和使用它。现在回到MLflow,我们可以看到这个模型的版本11。我的型号,第11版,现在正在生产中。假设我们对版本12很满意,并希望将其部署到生产环境中。我们打开另一个工具箱库,我的模型服务,这里有一个元数据文件。我的模型信息Yami,这里我指定了我的databricks工作区的位置,这是我的MLflow实例的位置,还有我的数据模型的名称。现在我想把版本从11改为12。
凯文王:
所以要部署它,我只需要做一个简单的工具包推送。现在搞定了。它自动触发模型部署到管道。但是在我们讨论管道之前,让我们先来看看它是一个Rest API。
凯文王:
这是一个邮递员。我经常用它来运行一些休息调用。这是我的模型在开发环境中的端点,我可以进行调用。然后我可以从我的模型收到一些响应。看起来不错。同时,Seldon提出了这个模型元数据API,它可以查询您的模型的元数据信息。这里你可以看到模型的名字是我的模型,版本11是昨天创建的。还有,这里你可以看到一些输入模式,这里你也可以看到输出。
凯文王:
所以在模型部署之后,我们应该看到这个模型版本升级到试用版。让我们回到CI管道。因此,这是用于模型部署的另一个持续集成管道。在我被推之后,管道就被触发了,这个包括四个阶段。在第一阶段,它将从模型中,从MLflow模型注册表中根据我们给出的版本获取模型,同时它将是文档图像,然后将其推入容器注册表。
凯文王:
之后,它将把模型部署到开发环境中,然后就可以进行测试了。所以在这里我使用像Helm这样的开源工具来术语利用我的部署。因此,为了在开发阶段和生产线上部署它,我可以使用相同的设置脚本。现在它被部署到开发环境中。之后,如果我批准它,它也会被部署到阶段,然后最终进入生产,也需要人工批准。现在让我们回到邮差进行另一个休息调用,看看它是否准备好了。我应该把植入物升级,但现在还没有。这就是为什么会有一些停机时间。好了,现在你得到答案了,让我们检查元数据。现在是版本12。 Looks good. And let’s say we have done some tests in dev environment and decide to approve it to the production environment.
凯文王:
审查。批准。现在它正在部署到一个登台环境。假设在舞台环境中。我们想要运行一些系统测试,来推动负载,看看系统是否表现得尽可能好。我将使用一个叫做Jmeter的工具。在Jmeter中,我可以模拟多达100个客户端,发送请求并返回一条滑条。还有这个客户,我两分钟内就能搞定。这些客户机中的每一个都将通过我的模型预测服务发送相同的rest来调用。是一样的,然后它会计算这里的结果。 I also deploy some cool feature like auto-scaling in this model. This is my set under current file. Here I specify my [infants scrub 01:08:40] in this caseI only have a single container with a single microservice. And also I specify as a horizontal Potter scaling policy, basically it will monitor my CPU usage. If it’s about 40% is just start to create more replica of my model prediction service up to 500 instances. Let’s watch how many instances there are today.
凯文王:
现在我们有了两个副本。让我们开始性能测试。现在我们开始,我们可以看到开始的延迟很好,50 60 70毫秒,但随着客户端数量的增加,延迟开始增加。我还添加了一些很酷的功能,比如超时。基本上,我们不希望客户和……我们不希望我们的最终用户永远等待。因此,如果模型不能在一秒内做出预测,它就会返回HB 500。然后我们可以在客户端输入一些默认的逻辑来显示一些默认的结果。此外,在这里,我们可以看到一个新的副本已经添加,因为有很多开始增加。实例已经添加了。此外,我们可以看到在超过运行几毫秒后,我们开始看到一些红色标志和一些箭头从模型返回。 Also, now we can see there are more replica has been added. I will not wait until it finish. Let’s assume we are happy with this result.
凯文王:
现在是最后一步。我要回到我们的DevOps部门,批准这个模型并将其部署到生产环境中。在第二个演示中,我们已经看到,通过利用Azure DevOps等工具,我们可以轻松地自动化模型部署过程。而涉及到人是一个循环,就像Seldon做的那样,将模型暴露给预测服务非常容易。
凯文王:
最终外卖和mlop非常复杂。在开始寻找技术堆栈之前,后退一步是很重要的,考虑一下您要解决的是什么类型的问题。你的设计过程是什么样的,然后定义你的架构,最终取决于你的工具。其次,如果你有许多产品团队都在生产机器学习产品,也许是时候考虑平台方法了。bob体育客户端下载让一个中心团队开发一些关键组件,并将其作为服务提供给你的专业团队。最后但并非最不重要的是,通过利用云服务,您可以使用它。你真的可以进化得非常快。非常感谢。非常感谢。
发言人3:
谢谢你,凯文。下一位演讲者是J.B. Hunt公司的韦斯利·克拉克和Artis咨询公司的卡拉·菲利普斯。他们将介绍J.B. Hunt如何在其他价格范围内实施自助服务实验和部署框架。本文档将涵盖框架的核心价值、概念和约定,然后是如何实现数据资源、代码和作业的自助自动化部署到Azure DevOps、CI/CD管道的技术演示。欢迎卫斯理和卡拉。
韦斯·克拉克:
谢谢你的加入。我们感谢您的时间,我希望您会发现我们的工作有趣,信息丰富,这将帮助您建立自己的自动化CI/CD管道。我叫韦斯利·克拉克(Wesly Clark),是J.B. Hunt的企业分析和人工智能首席架构师。我的同事,来自Artis咨询公司的Cara Phillips,和我一起来做一个技术演示。J.B. Hunt成立于1961年,现已发展成为北美最大的运输和物流公司之一。我们目前在财富500强中排名第346位,我们的数字经纪市场J.B. Hunt 360在创新和技术方面获得了广泛的认可。我们认为高级分析中的机器学习是我们未来成功的关键,我很荣幸能够参与在J.B. Hunt建立这些学科。Artis Consulting成立于2002年,专注于四大支柱:数据和分析、人工智能和机器学习、物联网和智能应用。他们一直是我们的关键合作伙伴,帮助我们将愿景转化为我们的嗡嗡声生产过程。
韦斯·克拉克:
首先,我想让您了解分析在创造业务价值中所扮演的角色,强调这个框架关注MLOps生命周期的哪些部分,并讨论我们在实现解决方案时所遵循的指导原则。然后,我们将进入您真正想要的技术演示部分,以及您可以采取的实际步骤来创建自己的解决方案。
韦斯·克拉克:
我们想强调的是,我们在分析、数据科学和机器学习方面所做的一切都应该专注于创造业务价值和实现我们组织的目标。作为科学家,我们很容易在数字中迷失自我。因此,我们有意地将注意力重新集中在我们试图赋予的人身上,以及我们的解决方案将嵌入的流程上。
韦斯·克拉克:
我看过很多关于数据工程的精彩演讲,比如在创建功能存储时如何使数据水化。
韦斯·克拉克:
它是关于数据工程,为三角洲湖补水和创建特征存储。同样,也有大量的演讲集中在集装箱化、服务和生产性能监控上。今天,我想重点介绍一种安全的自助服务框架,用于自动化创建和部署与产品代码存储库的特定项目分支链接的计算环境。在向您展示框架体系结构和实现之前,我想简要介绍一下我们的解决方案所依据的指导原则。
韦斯·克拉克:
我们的目标是可预测性。我们选择了约定而不是构型。我们希望它是自动化的,因为当用户不需要记住规则就可以看到它的作用或实现它时,这些约定的真正力量就实现了。我们想在安全和自助服务之间取得平衡。我们试图赋予用户权力,同时提供边界以保证他们的安全。我们希望这个框架通过创建在整个ML生命周期中跟随代码的配置构件来强调可重复性,从而确保在环境创建中可重复部署。
韦斯·克拉克:
我们希望引入明确定义的环境。我们不只是寻求自动化我们已经拥有的工作流程,而是通过我们提供给团队的工具创造新的可能性。我们介绍了我们的分析师、工程师和科学家。来自企业级软件工程开发生命周期的一些最健壮的概念。我们希望不受平台和云的影响。bob体育客户端下载我们刚开始做这个的时候还不是多云,但Databricks是。对我们来说,重要的是选择可以在任何地方运行的解决方案。我没有时间详细介绍我们所做的所有决定,但是我想让您对框架有一个高层次的理解。
韦斯·克拉克:
我想让您注意的第一件事是存储在用户代码桥中的一组配置文件。环境配置文件是存储值的地方,这些值会根据代码在哪个环境中运行而变化。接下来,库配置中的集群允许您定义代码运行所需的依赖项和计算资源。它还允许您指定谁应该访问您的项目。最后,在作业配置中可以存储指令,指示代码在进入生产环境时应该如何部署。接下来,我想显式地定义将代码部署到特定环境意味着什么。
韦斯·克拉克:
这意味着我们的代码的新副本已被拉入Databricks项目文件夹,并且已与存储库桥同步。这也意味着您的代码运行在一个专用的集群上,以满足分支配置文件中定义的特定需求。最后,它意味着集群在服务主体的授权下运行,该服务主体只能访问相应基础设施环境(local、dev、test和prod)中的适当资源。这意味着您使用不同的秘密,将数据存储在不同容器中的文件中,并根据您所运行的环境访问不同版本的web服务。
韦斯·克拉克:
现在,让我们稍微讨论一下CI/CD管道如何与您的产品代码一起工作。我们将介绍一个自助服务集群管理场景。让我们想象一下,一个拥有现有产品代码存储库的用户将首次开始使用CI/CD框架。值得庆幸的是,CI/CD存储库有一个设置管道来帮助它们启动。第一步说明了设置管道的第一阶段,该阶段将把我们在前面的图中讨论的配置文件传输到用户的产品repo中。
韦斯·克拉克:
步骤2显示,设置管道的第二阶段将传输一些YAML文件,并在产品中创建子管道以进行repo。其中一个子管道用于将作业部署到新环境,另一个子管道(与此场景相关)侦听对配置文件所做的已提交更改。一旦初始设置管道完成了在产品存储库中传输文件和创建子管道,让我们想象一下,在图的第三步中,用户修改集群和库配置以更改集群的最大节点数量,将第三方库添加到其依赖项列表中,并修改访问控制列表以向其项目中添加一个队友。
韦斯·克拉克:
在第4步中,在用户向集群和库配置文件提交更改之后,侦听器管道将触发并启动对CI/CD存储库的回调。第5步强调了大部分功能存在于CI/CD存储库中,其中YAML管道将执行一系列PowerShell脚本,这些脚本将验证配置文件的更改,并将其转换为三个单独的JSON文件,然后分别发送到Databricks集群、库和权限api。
韦斯·克拉克:
最后,在第6步中,您将看到,过了一会儿,这些更改将由Databricks api完成,用户将在Databricks UI中看到更新后的集群,其中加载了新的库,只有在访问控制列表中指定的团队成员才能访问。好的,在我们进行技术演示之前,最后一个图表。我想再次强调这所启用的工作流。在不与环境发生冲突的情况下持续地对产品进行增强。在这个图中,您可以看到同一产品的两个独立分支正在本地环境中由两个不同的用户处理。
韦斯·克拉克:
每个用户都有一个单独的产品笔记本和配置文件副本,存储在其用户名下的本地项目文件夹中。每个库都运行在根据用户配置设置的专用集群上,每个集群可以拥有完全不同的属性,运行不同版本的库而不会发生冲突。一旦您完成了本地开发,在任何给定的时间都只能部署产品的一个分支。在开发环境中,产品的旧版本已经交付了master,正在走向产品化。
韦斯·克拉克:
它已经通过了我们的CI/CD作业部署管道实施的第一个质量门槛,它也有一个单独的笔记本副本,可以访问存储在开发项目文件夹中的fig文件。它使用库的较旧副本,并运行在满足较旧版本配置文件规范的专用作业集群上。不幸的是,该代码未能通过更严格的质量门槛,进入更严密的测试环境。test和prod仍然在使用以前的主版本标签中的代码进行再培训。这两个环境都有一个单独的笔记本和配置文件副本,存储在test和prod项目文件夹中,并且运行在专用的作业集群上,仍然使用更老版本的库。
韦斯·克拉克:
在所有环境中,本地、开发、测试和刺激每个集群都在适当的环境服务主体的授权下工作。与表、文件存储、外部web钩子和表面集成的特定环境实例交互,并发布作业事件。这些特定于环境的服务原则还被授予了调用那些已部署作业的权限,以便可以使用服务原则凭据从Databricks外部初始化它们。我知道这涉及到很多概念性的内容。感谢您对框架背后的所有抽象和理论的理解。现在我要把它交给我的朋友卡拉,向你们展示如何一步一步地实现这样的东西。
西尔维娅Simion:
谢谢韦斯利。大家好!我是Cara Phillips,是Artis Consulting的数据科学和MLOps顾问。正如韦斯利刚才提到的,我将向你们展示这些管道的实际操作。让我们首先看一下CI/CD回购中的文件结构。首先要注意的是这些YAML文件,它们是包含管道将执行的步骤的模板。在这些文件的上方,我们有一个脚本文件夹。这些都是将在管道的每个步骤中运行的所有脚本。我们决定使用PowerShell脚本,但您可以使用任何可以解析JSON文件并将数据发送到Databricks API的语言。
西尔维娅Simion:
在顶部有两个文件夹,一个用于数据科学,另一个用于数据工程。数据科学和数据工程团队都在使用这些管道,这些文件夹包含可以在团队级别设置的配置默认值。例如,数据科学团队可以使用这些文件为他们的集群或作业配置设置默认值,设置默认权限或设置始终安装在他们的集群上的库。这里要查看的最后一个文件夹是远程存储库文件夹的文件。
西尔维娅Simion:
这个文件夹包含我们需要复制到产品回购的所有文件。一旦这些文件在管道上复制,就可以在产品回购中构建。复制这些文件和创建管道的过程可以手动完成,也可以像Wesley前面提到的那样通过另一个管道完成,我们称之为setup管道。让我们转到产品回购,并仔细查看该文件结构。第一个文件夹是笔记本文件夹。此文件夹包含链接到Databricks工作区的所有笔记本。其余的文件是从CI/CD回收中复制的文件。
西尔维娅Simion:
首先,我们有管道定义文件夹,该文件夹包含将触发执行存储在CI/CD repo中的管道步骤的YAML文件。我们要看的最后一个文件是库中的集群,配置JSON文件,以及作业配置JSON文件。用户将使用这两个文件为他们的集群和作业创建和管理配置。一旦建立了回购,用户需要做的第一步是从master创建一个新的用户分支。让我们仔细看看集群和库配置JSON文件,这是用户将配置的第一个文件。
西尔维娅Simion:
一旦他们创建了他们的用户分支,他们就可以开始编辑配置文件。让我们仔细看看库中的集群配置文件。他们要配置的第一个参数是工作区名称。这个值将决定我们的默认配置值将来自CI/CD repo中的哪个文件夹,以及管道将验证到哪个Databricks工作区。这里的集群参数包含用户可以为其集群配置设置的参数子集。大多数这些值的结构直接等价于API所需的JSON结构,除了spark版本。
西尔维娅Simion:
在这里,我们创建了一个结构,用户只需要指定版本号,无论他们是否想要一个默认包含许多机器学习包的ML运行时,以及他们是否需要在他们的集群上使用GPU计算。管道将这些值映射到API所需的正确键。在本节中,我想提请注意的最后一组参数是自定义标记。这些标签对于跟踪和管理你的Databricks花费是非常重要的。除了您在这里看到的J.B Hunt特定的标记之外,管道还自动为环境(开发测试或产品)以及触发集群创建的repo In分支设置标记。
西尔维娅Simion:
下一部分是访问控制列表。在这里,用户列出了在分支中处理他们代码的每个人的电子邮件。管道我们将使用这个电子邮件列表来设置集群上的权限。这确保了创建的集群专门为在该分支上工作的团队成员保留。该配置文件的最后一部分用于库。对于每种库类型,用户指定了他们想要安装在集群上的库列表,或者Python和CRAN包,如果所需的包repo与默认的repo不同,他们可以使用这里的包和repo结构指定。
西尔维娅Simion:
现在让我们在这里做一些更改,保存文件并观察集群的创建。我们将把最大工人数更改为7,并保存文件。现在让我们去看看管道运行。您可以在这里看到,当我保存文件时,管道被触发,并且它正在自动运行。在我们等待它完成的同时,让我们来谈谈幕后发生了什么。回到产品回购中,有一个名为pipeline cluster的文件。该文件监听对集群和库配置JSON的更改,并回调CI/CD repo以执行存储在那里的管道步骤。
西尔维娅Simion:
现在让我们转到CI/CD回购,看看这些步骤。在repo的底部,我们有一个名为管道集群配置的YAML文件。这个文件包含创建和管理Databricks集群的所有步骤。这里的前两个步骤执行一些管理工作来设置管道环境。然后我们进入生成集群配置步骤。该步骤解析用户在配置文件中提供的值,将其与集群配置默认模板结合,并创建JSON,以便在下一步中发送到集群API。
西尔维娅Simion:
创建器编辑集群步骤使用解析后的JSON文件创建一个新的集群(如果不存在),或者编辑一个已经存在的集群。一旦创建了集群,我们所要做的就是添加或更新权限。set cluster permission步骤从配置文件中获取用户列表,将它们解析为适当的JSON结构,并使用权限API设置集群上的权限。一旦设置了权限,我们现在必须安装库。解析所请求的库步骤取配置文件中的库并解析它们,下一步取已解析的JSON并安装任何新的库并卸载从配置文件中删除的库。
西尔维娅Simion:
现在让我们来看看我们完成的管道。一旦我们开始运行,您可以看到所有步骤都成功完成。这意味着我们应该看到Databricks中运行了一个新的集群,配置文件中指定了配置。让我们转到Databricks,看看这个集群。正如您在这里看到的,我们现在在Databricks中运行了一个集群。该集群的名称是根据组织命名约定在管道中定义的。正如您所看到的,这里的配置正是我们在配置文件中指定的。
西尔维娅Simion:
同样地,在我们的访问控制列表中指定的用户也列在这里的权限下。最后,当我们进入我们的库时,我们看到除了默认库文件中指定的两个库之外,还安装了我们请求的库。最后,第一步是将配置文件中的管道复制到产品回购中,并创建这些管道。完成之后,用户填写他们的集群和库配置文件并保存它。然后管道将自动运行,用户可以在几分钟内使用自己的集群。
西尔维娅Simion:
我们要研究的下一个管道是工作部署管道。该管道提供自动化和安全的作业部署和编辑。让我们从用户的工作流程开始产品回收。当用户准备好将他们的代码和作业部署到开发环境中时,他们将看到作业配置JSON文件。在这里,它们将指定将创建多少个作业以及每个作业的配置。他们必须填写的第一个参数是笔记本的名称。接下来,它们将指定是使用高并发集群还是作业集群来执行作业。
西尔维娅Simion:
使用高并发性集群而不是作业集群,我们可以在部署作业时减少集群启动延迟,并允许并行运行作业。接下来,它们将指定集群配置和一组库。如果他们使用的是高并发集群,如第一个例子所示,那么集群配置和库将基于集群和库配置JSON中的配置进行设置。作业配置中这些参数的值将为空。如果作业将在第二个和第三个示例中的作业集群上运行,那么这两个参数有几个选项。
西尔维娅Simion:
如果用户为新的集群或库参数指定了default,相应参数的配置将从集群和库配置JSON中获取。此外,如果不需要库,用户可以为libraries参数指定none。在第二个作业中,您可以看到为集群配置指定了默认抱怨,并且库周长设置为none,这表明该作业集群不需要库。这两个参数的最后一个选项是指定一个新的集群配置或库集,如第三个作业中所示。这些配置使用与在集群和库配置中使用的相同结构指定。
西尔维娅Simion:
我们在这里和库配置下面有集群配置。一旦我们将更改保存回分支并提交所有的coach和master,我们就可以运行作业部署管道。我现在要做的就是运行开发阶段。当它运行时,让我们仔细看看管道在做什么。回到产品回购,管道作业YAML文件调用存储在CI/CD回购中的管道作业配置YAML文件中的管道步骤。我们有三个不同的环境,工作将被部署到开发、测试和生产。
西尔维娅Simion:
相同的一般步骤将在每个环境中重复,因此我们将使用一个build steps参数,它允许我们只需要为这些步骤编写一次代码,然后这些步骤将在每个环境中重复。您将注意到这些步骤中的许多步骤与在集群管道中看到的步骤相同,因为这两个管道之间共享了许多代码。让我们仔细看看这些步骤。与集群管道一样,前两个步骤只是做一些管理工作来设置管道环境。然后我们进入生成集群配置步骤。
西尔维娅Simion:
这个脚本将做两件事。首先,它生成默认集群配置,当用户选择使用高并发性集群或当他们为作业集群定义指定default时,将使用该配置。它做的第二件事是解析用户提供的新作业集群配置。解析完这些图后,创建或编辑高并发集群步骤将检查正在部署的作业集是否需要高并发集群,并在需要时创建或更新集群。如果需要高并发集群,下一步是为该集群设置适当的权限。
西尔维娅Simion:
这包括添加开发、测试或刺激服务原则的权限,这将允许集群由其他应用程序(如Azure数据工厂或风流)管理。下一步是解析将要安装在集群上的库。与集群配置解析步骤一样,此步骤将解析默认库集和用户指定的任何自定义集。在所有这些配置就绪之后,我们可以在下一步中部署新作业或编辑现有作业。
西尔维娅Simion:
最后,部署作业之后,我们需要设置或更新权限。您可以为CI/CD repo中的teams文件夹中存储的任务定义一组自定义用户或组的默认值。除了这些权限之外,开发人员、测试人员或产品服务负责人还将获得访问权限,以便他们能够从外部应用程序编排这些作业。一旦我们找到了所有的步骤,我们就可以在下面的每个阶段执行它们,其中包括在每个环境部署之间的安全和质量检查。让我们来看看就业渠道。
西尔维娅Simion:
我们开始运行,我们看到开发阶段的所有步骤都成功完成了,这意味着我们在Databricks工作区中创建了三个新作业。让我们来看看这些。您将看到我们为开发环境创建了三个作业,因为我们在作业配置文件中配置了三个作业。注意这里每个作业的集群定义。第一项作业使用高并发集群,第二项作业使用默认的集群配置,有1到8个worker,第三项作业使用自定义集群配置,有1到4个worker。
西尔维娅Simion:
让我们进入第二项工作,看一看配置。在配置选项卡中,您将看到为这次运行创建的作业集群的规格。然后在下面的高级部分中,我们可以看到管道为两个服务原则(admin和dev)以及我们在teams文件夹的默认访问控制模板中指定的三个ACL组提供了正确的权限。要总结作业管道,第一步是用户在其用户分支中填写作业配置JSON。
西尔维娅Simion:
接下来,他们将所有代码合并并掌握,然后一旦代码准备就绪,就可以运行作业管道,作业将被创建并运行。今天,我们创建了两个管道来自动创建和管理作业中的数据库集群,为用户提供了一个简单的自助服务工作流。谢谢大家听我的技术演示。我希望你学到了一些有趣有用的东西,我把它传给韦斯利,让他来总结一下。
韦斯·克拉克:
感谢Cara提供了如此周到的技术演示,并感谢您为实现这个框架的愿景所做的所有努力。现在我想简要回顾一下我们今天讨论的内容。我们告诉过你,J.B. Hunt作为一个组织是如何努力实现目标的,我们的团队是如何集中精力确保我们为实现这一使命做出贡献的。我们将您的注意力吸引到MLOps生命周期的部分,我们的框架在这里运行,在这里我们感觉迭代改进的进展最大。
韦斯·克拉克:
我们描述了在实现解决方案时指导我们的激励原则。我们用一系列架构图直观地表示了框架,以帮助您了解大局。然后Cara为您详细介绍了一步一步的技术演示。最后,我想说的是,谢谢你花时间和我们在一起。我希望这对你有所帮助,在演示结束后,你可以下载更多的资源和细节,帮助你入门。谢谢你!
发言人3:
谢谢Cara和Wesley,也谢谢之前所有的演讲者。现在我们有几分钟时间和我们的演讲者进行问答,我们马上回来。