在赛默飞世尔科学公司启用Mlflow可伸缩数据科学管道

下载幻灯片

赛默飞世尔科技拥有业界最广泛的产品组合之一,从试剂到资本仪器,为生物技术、制药、学术等领域的客户提供服务。构建一个全面的客户需求视图所需的数据量是巨大的,为了构建一个能够处理这些数据量的数据科学生态系统,从数据工程、模型开发到生态系统中的交付的每一步都必须是可扩展的。

考虑到可扩展性,赛默飞世尔与Databricks合作,建立了具有CI/CD标准的端到端数据科学管道,并通过使用Mlflow、Spark ML和Delta Lake等最新技术进一步增强了我们的能力。这次演讲是对我们从过去到现在的历程的总结,以及对我们平台未来的展望。bob体育客户端下载

关键外卖:

  • 利用大数据进行机器学习不仅需要机器学习知识,还需要技术基础设施来支持机器学习模型的持续开发、部署和交付。
  • 如何使用最新的Databricks技术构建可扩展的数据科学管道。

点击这里观看更多Spark + AI课程

免费试用Databricks

视频记录

-感谢各位出席今天的讲座。我叫Allison Wu,是赛默飞世尔卓越数据科学中心的一名数据科学家。今天我将讨论如何在我们公司中使用MLflow和Model Registry启用可伸缩数据科学管道。

所以,在我们讨论任何细节之前,

主要总结

我想对我们取得这一进展的原因作一个高层次的总结。我们通过将MLflow跟踪集成到开发管道中来标准化机器学习模型的开发,我们还通过将GitHub和Delta Lake集成到开发和部署管道中来提高机器学习模型的可重复性。我们还通过MLflow和集中模型注册中心简化了机器学习模型在不同平台上的开发过程和部署过程。bob体育客户端下载什么时候对我们的团队来说如此重要,这也与我们数据科学家在数据科学卓越中心的工作高度相关。

那么,我们卓越数据科学中心的数据科学家们在做什么呢?我们生成了许多新的算法,可以应用于不同的部门,我们与跨部门的团队合作迁移模型,在这种情况下,模型标准化实际上对生产力和可重复性都非常重要。为了使新的数据科学进入新的部门,我经常需要进行大量的迁移和标准化工作。在做这些事情的同时,我们还负责在整个公司建立数据科学的最佳实践。因此,数据科学中有多个领域正在迅速发展,例如,运营、人力资源、研发和商业营销。我们正在积极参与所有这些领域,但今天我将重点关注商业营销。

好吧。

商业和营销数据科学生命周期

那么,商业营销数据科学生命周期是什么样子的呢?首先,我们有各种不同的数据管道来输送各种数据,包括交易,网络应用,网络活动或客户交互的安装基础数据。我们使用所有这些数据管道连接到数据科学家需要的相同数据,用于模型开发和部署。我们的机器学习模型和基于角色的遗留模型目前正在生产中运行。这将是我们今天要重点关注的阶段应该是开发和部署阶段。在这个过程中,我们在数据库中使用了很多新技术,比如Spark, MLflow, Delta Lake,我还使用了GitHub(声音微弱)在整个过程中帮助我们提高可重复性。

在我们开发了所有这些模型之后,这个模型会通过不同的渠道提供结果和建议,比如电子邮件活动或网站,或者我们也会通过Salesforce或Adobe Analytics为我们的销售代表提供非常规定性的建议。所有这些都是为了为我们的客户提供最相关的服务。模型的表现是通过产生的收入或对每个建议的参与度来衡量的。所有这些最终都将反馈到模型开发和部署阶段,或者潜在的反馈到数据处理管道,例如,带来新的数据来帮助我们了解我们的客户。

模型开发和部署周期

当我们专注于模型开发和部署周期时,让我们仔细看看每个阶段都涉及到什么。在开发阶段,这意味着探索性分析或模型开发,比如特征工程,特征选择,模型优化,所有这些不同的好东西。然后,当数据科学家将他们的模型下放到我们认为可以部署的某个点时,我们将模型从开发环境转移到生产环境中。这个过程我们称之为部署。在部署阶段,当我们在生产中运行模型时,对于一个生活在生产中的模型,它可以经历几个不同的过程,例如,它可以每天都在周围,评分,它也可以需要重新训练或每一段特定的时间重新调整。这些都可以在我们的生产中实现。为了监控所有这些过程,我们有另一种经典管理,它监控所有这些生产运行,以确保我们的模型产生准确的结果,或者它也可以在任何情况下运行,我们对运行在生产中的模型的事件进行监控。很多时候,我们还通过这个过程跟踪反馈,这些反馈要么是在生产中部署模型的反馈,要么我们也可以一直反馈到开发阶段,以便进行新模型开发等工作。

还有一件事我今天不打算讲,但它也是一个非常重要的阶段,那就是交付,我们可以交付所有的模型,很多交付是通过使用在生产环境中产生的建议来完成的。所以生产环境的结果适合不同的传递渠道,如网络推荐或电子邮件活动。

开发/部署Cyc一种基于客户行为(如web)进行产品推荐的模型

因此,让我们仔细看看管道中的一个示例模型。因此,这是一个基于不同的客户行为(如网络活动或销售交易)生成产品推荐的模型。

这个模型需要六到八周的探索,探索分析,模型开发和原型制作。在开发之后,它被转移到生产中,在生产中主要以两种方式运行。其一是每日评分,这意味着它会根据新数据生成新的输入指标,然后每天运行相同的模型,以确保我们根据新数据得到最准确的预测。该模型还每两周对最新数据进行再训练。

然后这个模型通过电子邮件活动和我们的销售代表的仪表盘向他们推荐谁是这个特定产品的最佳客户。

然后,最后一部分是管理部分,这个生产过程也通过MLflow在我们的生产环境中监控。

所以我们在开发过程中经常做的是,我们有一堆Databricks笔记本,没有任何版本控制,也没有单元测试,我们未来的功能或任何东西。而且回归测试很难做,特别是如果你从以前的同事那里继承了一个笔记本的话。这种情况我们可能都很熟悉。我们有很多版本的最终文件,最终笔记本,(声音微弱)我们自己计算这些字段,为什么我们应该使用。所以我们现在所做的是,我们仍然在开发环境中,我们仍然使用Databricks笔记本进行功能工程的探索性分析,但一旦我们变得更舒服,觉得未来已经变得成熟,然后我们实际上把它写进python模块和python函数,这些都是版本控制到GitHub中。每个机器学习特性实际上都是独立的可测试和可共享的。所以,除了集成GitHub,我们还集成(听不清)到版本控制中,所有用于训练模型的数据。这种方法结合了MLflow,我们也能够跟踪机器和ML的发展,所以我们可以跟踪所有的超参数调优,以及在不同的实验中特征选择是如何进行的。

我们现在做的…

当我们对开发阶段的模型更加熟悉时,我们就可以把它注册到开发阶段的模型注册表中了。这实际上使回归测试与以前版本的模型,更容易从更容易,因为它提供了一个更清晰的界面,让我们拿出以前的版本,看看这两个模型的比较。我也会做一些演示。

这里有一些场景,我们可以看看这些过程是如何改善我们的开发的。

跟踪功能的改进变得容易

因此,第一个跟踪功能的改进变得容易得多。这是怎么回事?我们都遇到过这种情况,我们的老板过来问,这个版本和之前的版本相比有什么重要的功能?我们过去常做的是,哦,让我看看我的....呃....的功能如何Model_version number 10笔记本。我(喃喃自语)有时我希望我有一个功能重要性数据的屏保截图,但我没有。太糟糕了。抱歉,我相信这是我们都熟悉的,我们有很多不同的最终版本,我们甚至不知道我们应该取出哪一个来得到前一个版本的数据。我们如何改进它们?现在我们能做的是,当然,我们会从MLFlow中取出它。 And this is how it would look like. So this is the video.

因此,在这里我们可以看到有多个MLflow运行到我们的日志到另一个流实验。现在,如果我想与以前的版本进行比较,我可以点击并选择几个不同的模型来进行比较。然后我们可以进入每一个,看到特征重要性图实际上是和一个模型锁在一起的。这样我们就会知道,也不再需要担心,哦,我不知道锁特性的重要性,因为我们都可以通过MLflow登录。你们(喃喃)总是被跟踪。所以现在共享机器学习功能也变得容易多了。

共享ML特性变得容易

在你的评论中,你的同事会过来问我,哦,我真的很喜欢你在上一个模型中使用的功能。我也可以用这个吗?我们所做的就是,复制粘贴笔记本的这一部分。但是,在另一个问题中,我有一个稍微不同的版本,我想我可能用过这个。

这通常不是一个好主意,因为我们经常把自己弄糊涂。也不知道该分享哪一个。而且追踪这些函数随时间的变化也非常困难。现在将GitHub集成到我们的开发工作流中,我们现在可以做的是,当然,我将该功能添加到共享机器学习回购中。你可以自由地添加它,使用它,并通过导入模块,(轻松的吉他音乐)对不起,我们可以,对不起。

我们现在可以做的是,当然,我确实将该特性添加到共享ML repo中。您可以通过导入模块随意使用它。更酷的是。你可以在这边看到,磁铁是我们的内部共享机器学习回购所有这些特征函数都是可测试的,我们可以写很多单元的特征函数来确保它适合所有不同的情况,也确保将来如果有人修改了一个函数它不会破坏所有其他人的代码。更酷的是,您还可以将所使用的回购的确切版本锁定到Mlflow中。我在这里,你可以看到我们不仅锁定了环境设置,conda yami,还有源包。这就是我们如何确保我们总是锁定准确的版本。这样我们就可以确保即使回购继续发展,在模型2爆炸之后,你仍然可以追溯,以确保你知道你自己的模型使用的是哪个版本。通过这种方式,您可以始终使用精确的依赖项和环境设置进行复制。

所以我们在改进开发过程中学到了什么。模型结果的再现不仅依赖于代码或笔记本的版本控制,还依赖于训练数据、环境和依赖关系的版本控制。MLflow和Delta Lake允许跟踪所有这些必要的东西,以重现模型结果。集成GitHub还允许我们建立批量访问数据仓库的实践,并标准化我们的机器学习模型。它确实鼓励了不同数据科学家之间的合作和审查。就我个人而言,我认为最后一个是一个很大的解析,因为数据科学家很多时候都是在孤岛中工作,而拥有一个协作平台对数据科学家的成长非常重要。bob体育客户端下载

让我们讨论一下部署....

好的,让我们谈谈部署。所以一直发生的事情就是开发过程中一切正常,生产过程中一切都坏了。我们如何简化这个过程?我们过去做的是,手动导入导出部署所需的所有Databricks笔记本。我们也会手动设置基于开发中的集群在生产中设置所有不同的集群。这使得故障排除超级困难。现在的情况是,很多时候(声音微弱)会在周六与数据工程师一起确保他们的模型可以正确无误地部署。这不是我们想要的。

所以我们非常努力地简化了这个过程。我们现在可以做的是,我们将我们的模型注册到开发模型注册中心,然后我们可以通过注册模型将部署模型所需的所有工件从开发环境移动到生产环境,并将所有工件复制到我们生产环境的集中式模型注册中心。这也使得在生产环境中的回归测试非常容易,因为您实际上可以首先将模型移动到生产环境中的分段,然后现在分段和生产模型处于相同的环境中,您可以很容易地在相同的环境中进行比较和测试。这也让我们有更容易的方法来跟踪和监控所有的模型。所以你可以在集中模型注册表中看到,现在我们有不同版本的模型,我们可以很容易地在不同的版本之间进行匹配,以确保我们可以清楚地知道哪个在生产中,哪个在登台,我们可以使用笔记本电脑询问所有这些模型管道,并使用MLflow跟踪模型在生产环境中的实际表现。它可以跟踪特定的(听不清)模型的输出,因此无论何时有一些奇怪的事件发生,我们都可以第一时间得到警报。

另一件非常重要的事情是,集中式模型注册允许我们跨不同的环境和平台管理模型。bob体育客户端下载我们不同团队的一些数据科学家喜欢使用Databricks,我们中的一些人喜欢使用SageMaker。SageMaker,它们是平均的,它们都可以通过相同的集中模型注册。它们还可以根据原始输入部署到不同的环境中。这里我将有一个简短的演示如何注册它们,将模型从开发环境注册到生产环境。

通过集中的模型注册中心跨不同平台部署和管理模型bob体育客户端下载

这是我们如何从开发碎片注册模型到生产碎片的集中模型注册表的演示。我部署到我们的测试显示的另一个演示,而不是我们实际的生产碎片。实际上,这是一种使用Model Registry作为中心来管理在不同平台上开发的模型的方法。bob体育客户端下载这是MLflow的新特性,仅适用于MLflow 1.8及以上版本。因此,在我们开始任何事情之前,我们需要设置凭据,以便当您连接到生产碎片时,它可以验证它是您。我们需要在你的目标上创建一个令牌(含糊不清),并使用这个令牌作为你的源分片上的握手。您可以将这些凭据存储在数据库机密中,并在本地分片上创建数据库配置文件。现在,您已经为源和源和目标碎片的开发之间的连接设置好了。在这里看到的。现在我们可以开始寻找你想要从源碎片读取寄存器到目标碎片的模型。 So you can see here, in order to find the run ID, you can either pull it from a Model Registry or from an MLflow experiment.

然而,使用已经在Model Registry中注册和批准的模型部署到生产环境通常是一个更好的实践。这就是我今天要演示的。这是如何在Mlflow上创建客户端,跟踪服务器,然后这是如何指定你想要投票的模型。因此,这个目录在这个model Registry中提取了生产模型的最新版本。这段代码将为您为模型注册的所有工件提供实际的绝对路径。因此,通过解析这个工件路径,您可以获得实验ID和运行ID。实验ID通常是这个,运行ID是这个。

所以当我们得到实验ID和运行ID后,我就知道模型的确切位置了,我们可以将模型从Local Workspace转移到Destination Workspace。我们可以这样做。你可以看到这里,我们只需要在uri后面给它一个runidartifact path然后它就可以开始复制了。这里你可以看到它复制了我们在这里指定的模型,在这种情况下,它将在目标和源碎片之间保持完全相同的工件解析。在这种情况下,它也保留了实验ID和运行ID。

因此,在source选项卡上,您可以在Central Model registry上实际创建注册表,并通过将模型与您刚刚传递给它的源ID注册,将该模型或注册表指向实际的模型。这里只需要指定从Local Model Registry中导出的运行ID。

正如我所说,我们在源碎片和目标碎片上保留相同的运行ID。所以在目标分片上,运行ID是完全相同的。为了在远程服务器上创建Model Register,您必须在这里创建一个远程客户端,使用您刚刚设置的跟踪。这就是如何使用从源碎片传输到目标碎片的模型创建模型版本。然后你还可以在远程中心注册表上更新元数据,我通常会保存源工作区信息和运行ID,如果有安全分析,你还可以在运行URL中关闭,这就是它在目标碎片中的样子。你可以看到它有DEV Source Workspace和运行ID,你也可以看到运行URL。它会指向最原始的实验。我可以点击它来看看那里有什么。(隐晦地说)局部,现在我可以重现这个模型,我还包括一个特征重要性(隐晦地说)模型。然后你也可以把模型版本更新到生产版本,所有这些都是通过你在本地分片上设置的远程客户端完成的。 So this is how you can register a model to Central Model Registry, and what I’m gonna demo the next is actually how we can use a model. So remember what I mentioned, for our model that’s in production a lot of times we use a model for daily scoring, and sometimes we need to retrain or retool maybe every two weeks or every month. So this is a demo of how I can use the model in the Production Model Registry to do daily scoring and use MLflow to monitor the output. So, here is how, first how we can take it. So it’s similar to what we just demo in the other notebook, how we can get the artifact path for the for the model. And then one thing that’s very important and what we mentioned before is, we want to make sure we install all the right dependencies in order to run a model. So here is actually how I can unpack, all the source packages possible that are locked together with a model. So this is how I pulled it from the artifact pack, and then pip install all the packages in that folder.

这里是我如何放置所有的包,安装所有的包,现在我的环境都设置好了,我可以运行每日评分,在这里我实际上开始了实验,这样我就可以记录我想要监视这个模型的所有指标。在这种情况下,我只会做评分,我要做的就是评分,然后我引入这些其他的模型,这些模型实际上是和源码包一起安装的,这意味着我使用完全相同的函数来产生输入指标,在我产生输入指标之后,我可以用Delta Lake来控制输入矩阵。这里我重写,然后把输入矩阵保存到Delta Lake文件中。

然后,在我将它生成为度量之后,我可以直接从模型注册表中处理许多模型,并且还可以通过指定我想要运行的产品,(隐晦地说)需要指定我想要运行的版本和我想要上去获取模型的另一个注册表。因此,通过这种方式,我得到了模型,然后我可以使用当天生成的新输入指标运行它。然后我可以得到所有的预测。

最后,我将记录我这次运行时使用的所有这些参数,例如,工件路径,以及我从模型的哪个阶段提取的,(听不清)模型注册的名称是什么?我用来生成输入指标的预测日期是什么。有时我也会锁定指标评分。举个例子,比如总行数或者如果是一个二元分类模型,不是很多,我得到了多少次解析,我得到了多少个负号。有时我可以看到一个巨大的解析峰值,我知道它们有问题。-所以这整个过程也使得回归测试变得容易得多。

回归测试变得简单

所以很多时候我们想比较两个不同的模型。然后我们经常做的是我们不得不去翻翻之前所有同事的笔记本,发现绩效指标甚至都没有记录下来。我们现在能做的就是直接从MLflow中取出这个,然后比较它们。所以,这里有两个版本,我们可以选择比较,选择它们,比较模型注册表,然后我们可以看到所有这些不同的指标,我将从这两个模型中并排记录下来,例如,在精确召回下的验证集区域。然后我们也可以这样比较,通过看这个,看看不同的特征如何影响这些不同的模型,以及它们在不同设置下的性能,现在,故障排除瞬态数据差异也变得(听不清)。很多时候,数据工程师经常访问为什么错误的昨天产生了奇怪的数量的预测,这是不寻常的。我们过去所做的是,很难排除这类问题因为今天的运行可能已经覆盖了Input表。因此,我们现在可以做的是,因为我们通过Delta Lake控制所有源数据的版本,我们可以降低用于昨天的模型的特定版本来解决这类问题。这样就简单多了,你可以看到,在这一边,在右边,我们可以尽管它是同一个Delta Lake文件,我们可以加载这个特定版本。因此,我们从中学到的是,改进部署过程,是的,作为科学家,确实喜欢尝试新平台和新工具的自由,并允许平台和工具的自由,这可能是在生产环境中部署的噩梦。bob体育客户端下载 However, MLflow tracking server and Model Registry really allows logging a wide range of flavors on Machine Learning models, from Spark ML to Sci-kit Learn to SageMaker, and this really make management across different platforms, in the same centralized workspace possible and easy.

感谢大家参加我们今天的会议,我非常感谢你们能给我任何反馈。

点击这里观看更多Spark + AI课程

免费试用Databricks
«回来
关于Allison Wu

热费舍尔

Allison是赛默飞世尔数据科学卓越中心智能生成团队的数据科学家。赛默飞世尔数据科学卓越中心建立数据科学最佳实践,推动端到端数据科学模型开发。她于2016年毕业于加州大学圣地亚哥分校,获得生物信息学和系统生物学博士学位,并于2018年在赛默飞世尔开始了她的全球战略定价数据科学之旅。她专门研究机器学习,开发了图像分析、定价优化和客户行为预测等多个领域的模型。除了开发机器学习模型,她目前的重点是在生产环境中使用Mlflow、PySpark、Delta Lake和Git等技术实现从开发和部署到交付和管理的端到端数据科学管道。