毫升发展带来许多新的复杂性超出了传统的软件开发生命周期。毫升项目,与软件项目不同的是,他们成功地交付和部署后,不能放弃,但必须不断监控如果模型性能仍然满足所有的需求。在大多数毫升用例,我们需要处理更新训练集,从而影响模型性能。此外,大多数模型需要在运行时某些数据预处理和后期处理,使部署过程更具挑战性。在这次演讲中,我们将展示如何使用MLflow建立一个自动化CI / CD管道可以部署一个新版本的模型和代码在生产。此外,我们将展示如何可以使用相同的方法在数据训练管道将在新数据到来重新训练模型和部署模型的新版本是否满足所有的需求。
——大家好。今天迈克尔和我将与你讨论运行持续集成和交付毫升管道上使用一个新的开源工具,蔡先生模板从砖实验室。bob下载地址
所以迈克尔和我都工作在一个内部分析团队砖。
今天我们要讲三件事。首先,给一点背景到毫升团队面临什么样的挑战当试图建立健壮的管道。接下来,我将介绍蔡先生模板,新砖实验室的开放源码项目。bob下载地址最后,我将把它交给迈克尔分享演示这实际上是如何运作的。他会走你通过与蔡先生模板如何开始,然后向您展示结束状态的样子在一个端到端毫升管道。
所以我想从这句话开始从佐藤广泛和Windheuser从去年。他们有这个伟大的文章谈论他们所称的CD毫升或持续交付机器学习。我认为这真的封装的很多问题和目标,团队遇到当试图构建大规模机器学习管道。所以团队遇到的一大挑战是,与传统的软件工程,你要分开代码数据和模型,与机器管道、机器学习管道,这是你所有这三件事的总和。和分离出来是导致实际问题。很大原因是因为与机器学习、与传统软件工程、代码、数据和模型都是耦合的,基本特性,而不是bug。通过改变一个你改变所有的其他组件。所以确保你有一个系统,耦合显式地址是机器学习的一个关键区别持续交付管道与传统蔡先生。所以最终,这里的目标是如何让机器学习生活上运行客户数据的方式我们可以测试,以确保机器学习代码工作究竟是我们的思维方式。如果有任何问题,我们可以恢复建设工作,以及添加小安全增加新代码或新模型,可以进行测试,然后复制。
那么实际上毫升团队遇到的挑战,当试图实施一个健壮的管道?
第一个是,如果毫升团队习惯于使用传统工具,那么传统的工具通常依赖于执行测试。包括单元测试和集成测试在一个虚拟机。但在处理模型,使用gpu或使用大型分布式数据集时,通常一个VM并不能说明问题。团队将砖等项目,给出分布式计算和可伸缩计算为了处理这些庞大的数据集,这些更复杂的模型。这适用于基本的原型和数据工程管道。但随着系统越来越复杂,需要带回很多传统CI工具以及结合当地id高于笔记本。从本质上讲,团队有这样的问题,他们觉得他们必须选择传统的蔡先生工具,但他们不未能有效处理规模。或者他们选择砖,笔记本,这是有用的,但不要给他们很多传统蔡先生工具的好处。我们遇到这个问题在内部,构建毫升管道。导致我们想出的想法关于蔡先生模板。
所以这实际上是如何工作的呢?
蔡先生模板背后的想法是帮助人们合并传统CI工作流,同时仍然能够使用砖作为一个抽象的计算资源。所以我的意思是,蔡先生模板允许您使用现有的工具,然后所有的测试和部署砖上直接运行。一般来说,当人们试图解决这个问题,他们遇到了三个问题。第一个是如何实际规模和复制他们的代码。第二个是如何适应诸如砖与现有的工作流。第三是他们如何把所有这一切放在一起,而无需使大量的胶水代码和代码难以维护结构所以蔡先生模板真的旨在解决这三个问题给你一个最佳实践模板已经集成所有设置GitHub的行为和数据之间休息,以及一个简单的方法来个性化你的项目。然后一大堆毫升流之类的东西,所以你可以在GitHub或砖跟踪进度。
这是如何工作的实践中,一个用户会通过运行命令饼干切割器,其次是蔡先生模板GitHub回购。这将下载它从GitHub,然后问你的一系列问题如项目名称,作者,你想毫升实验生活,例如。第二步是,人们会把砖主机和令牌到GitHub的秘密。第三,你最近创建的本地项目,然后初始化,git,添加代码,然后提交,推动新的回购。就是这样。之后,你就会发现你的代码触动你GitHub回购,GitHub将自动启动一些测试显示黄灯在你最近的提交。这些测试将在GitHub VM在本地运行单元测试,然后将集成测试和运行数据砖。然后在成功,它将返回一个绿色的复选标记或者如果有一个测试失败,它将返回一个红十字会。
砖,
我们将会看到以下的事情发生。首先在ML流实验中你之前指定的位置,或者如果你选择默认值,您将看到,它把所有的代码从你的回购和打包起来作为一个轮子,然后保存它作为毫升流构件砖文件系统上。这使得砖工作现在访问自定义代码库。接下来你会看到,显示在底部的照片是一个短暂的工作开始在砖,因此回购的轮包含所有代码和管道被安装在那份工作。然后蔡先生模板内的管道跑,执行你的代码,包括所有的测试。如果这些测试通过,那么工作运行成功,数据传递回GitHub,以便它可以显示绿色的对号。
基本上,因为我们这里使用GitHub动作,
任何形式的触发,你想自定义是完全有效的。但首先,我们定义了两个。一是推动,所以当有人推动回购承诺,和第二个是当有人想打包发布的回购,在GitHub上推动代码数据库项目时,首先会发生什么,所有的单元测试都拿起来在GitHub VM中运行。如果测试不成功,那么它将会停止,只是告诉你出了问题,需要修理。但是如果他们成功了,下一步就是砖蔡先生的模板将打包代码作为一个轮子,它会把它发给你的砖工作区和日志轮子作为工件的工件毫升流。接下来,它将启动一些测试,通过各种开发测试和集成测试。把轮子和安装它在集群。如果这些都是成功的,那么它将这一信息传递回GitHub,你让你的绿色的选中标记。
类似的过程当你做一个版本。所以第一步是创建一个在GitHub上释放,它将运行本地测试。包车轮,如果这些都是好的,把砖,砖上运行集成测试,如果这都是成功的,那么它将打包你的工作配置,然后推动工作砖。现在工作配置,您可以指定诸如重复每日或每周运行。一旦你这样做,这就意味着你的工作目前运行在生产。
所以接下来,我想把它交给迈克尔谁将带你通过演示这实际上是如何运作的。然后他会下降到一个实际的工作端到端毫升流管道实际展示如何实现毫升行动。包括模型服务然后模型监控大规模使用这些管道。——(Michael),现在我想给你们一个简短的演示,我将向您展示如何引导你的数据项目使用蔡先生模板和如何实现蔡先生管道,使用GitHub行动和蔡先生模板或和运行集成测试数据库。所以让我们开始吧。我将使用饼切我,单独使用饼切蔡先生引导项目使用的模板。
所以我们可以类型饼切到命令行,然后我们可以添加一个GitHub的URL蔡先生模板库。现在我们必须回答几个小问题。所以我将有项目的名称
然后我必须回答一些其它的问题。所以我将选择亚马逊云因为我想测试在亚马逊的一切。我们安排。我们已经创建了模板。
正如你所看到的,我们现在有一个新文件夹叫蔡先生测试项目框架所摆放的位置。让我们进去,
看看里面有什么。这里你可以看到我们有安全测试文件夹,该文件夹为拜登创建包。这是去的地方您可以开发你所有的逻辑。这里您可以创建很多子包,你可以把模型训练代码将数据生成管道未来的工程,和所有其他的事情。一个有一个管道文件夹有两个哑管道。所以两个骨架为我们的管道。和管道的意思是,这样一份工作,你可以独立调度和运行。这里是入口点脚本跑管道。
和脚本可以使用我们开发的代码包,它可以引用这段代码并运行它。然后我们这里的JSON文件。例如,对于AWS,您可以使用此文件指定的节点数量,指定不同的集群设置。
是的。对于测试,我们这里有两个目录,所以开发测试和集成测试。在开发测试中,我们已经集成开发测试管道,可以运行在砖上,然后可以测试我们已经开发出包的代码。在集成测试中,我们还测试管道,可以集成测试的一部分。它们之间的区别在于深度测试在每个摆布和集成测试
在我们创建发布。但是现在,让我们把一切GitHub看看它是如何工作的。所以我将我的GitHub库进行初始化
我将所有的文件。
现在我将提交所有的文件,
在本地,所以git提交。
现在我们可以去GitHub。
假设我有创建存储库之前,现在我们可以把所有的,所以我们可以把我们的承诺GitHub。
好吧,看起来我们做到这一点。我们可以在这里看一看,我们看到我们的代码。现在我们还需要一个配置,配置以使事情准备好。所以,我这样做过,但在你的情况下,你可以在你已经创建了你的回购。所以问题是,我们必须添加两个秘密,将允许我们的代码与砖工作空间的交互。这里我们有砖主机和砖的令牌。主机是一个工作区URL和令牌将允许砖将允许我们的蔡先生模板的代码在这个工作区启动工作。让我们回到我们的主要查找屏幕上,我们可以看到,蔡先生管道已经开始。让我们进去看看这里发生了什么。我们可以看到管道非常简单,它的检查我们的代码,它安装Python,后安装的依赖关系。 So those are going to be the dependencies we have mentioned in the requirements.exg. And after that, it will run the local unit tests with the pipe test and it will build an artifact. And it will then deploy this artifact on Databricks and run the pipelines that we have in the DEV tests. And it looks like this has already been done. So the pipelines are started. And like now we have to wait maybe couple of minutes for the result. So in meantime, let me summarize everything we have seen. So we have created the skeleton of the project. And then we were able just with a couple of clicks to set up the CICD pipelines on GitHub and GitHub actions that like can run on Databricks.
所以我想我们可以回到这个屏幕后一段时间,看看我们的管道和默认的测试是成功的。现在,我认为我们可以移动到下一个点,我想给你的项目是使用这种方法开发的。所以,我开发了这个项目在Python中砖的ID。
我可能切换到ID来展示它的样子。
所以这个项目的目标是开发一个模型,该模型可以预测
如果可以偿还贷款。所以我在这里工作与贷款俱乐部数据集和数据集,我们像一群贷款。是的,我想建立一个模型,将预测如果我们的贷款要偿还。让我们运行这个管道。
这是一个消费管道和管道将只使用这个模型,我已经发达。现在,我们将看到它是如何工作的。所以我认为我也想给你的另一件事是多么容易风格从命令行管道,如您所见,我在这里就像选择,运行时配置,运行它。在这里你可以看到配置自我可以参考我们未知的脚本。和
然后你必须指定文件夹的名称管道和集群,对你想运行这个。
然后脚本将构建视图。所以构建包,砖和管道上部署它。
我们必须等待几秒钟的管道完成。
所以你可以看到开始砖的脚本。与此同时,我们可以看看代码。这个管道,所以基本上与火花只是读取数据。然后抓住最新的模型从模型毫升流模型注册表,和寄存器作为PDF的一部分,然后这一切身上也是适用的。
然后应用这些,所以该模型适用于SQL,然后就写在某个位置的数据
这是实际运行我添加的代码输出,因此,
我想告诉你结果。
好了,现在我们可以看到结果。它只是一个表。
我们可以看到,这里有一个预测列,我们有我们的模型的结果给了我们。现在,让我们讨论一下如何,我们可以训练模型和如何部署模型。所以消费者管道模型可以使用。现在让我们去培训管道。我还将运行它,这就像训练管道,并运行它。,正如你所看到的,在这里,它显示了这个管道是类显示了这里,为我提供了数据的另一个类。所以我在这里做一些工程特性。所以我阅读我的火花,然后运用数据过滤掉错误数据和创建一个列一些其它的功能。这里没有什么特别的。在那之后,我有数据之后,我可以运行列车的训练方法逻辑回归模型。 And after that, of course, I am
记录我所有的指标到毫升流。我可以,我也将我的模型标记为一个候选人然后我日志模型本身。
所以我们的想法是,你可以运行这个管道,也许每周。所以你可以每周运行它。并将培训模型使用墙数据。所以你在本周收到的数据。也许你可以有几个这样的管道,可以训练不同的模型使用不同的数据架构。然后这个想法是如何比较这些模型。
你做决定,促进生产这些候选模型之一。同时,你可以看到,我们的模型
是我们的管道已经准备好了,来约束模型。所以让我们去毫升流,看看发生了什么。
这里,你可以看到实验管道使用。你可以看到这里有一个新工具。你可以看到这是一个候选人是真的,这是一个候选模型和我们这里有一些指标。
如果我们进去,我们会看到,这里有一个序列化的模型。现在让我们尝试使用这个模型在评估。
所以,我认为我们现在可以开始评估管道和讨论是什么做在中间。
所以,我已经开始。这个管道是做什么,它会抓住所有的候选人从毫升流模型进行比较。通过比较,我的意思是,它将在每个模型上运行推理对最新的数据集。
在那之后,我们还将评估我们的模型,目前部署在生产。所以,它将迫使我们从毫升流将获取最新的版本注册表。在那之后,我们就会比较的结果,如果我们认为,我们的候选人模型是更好的,然后我们将部署它。首先我们将注册它作为我们的模型模型,然后过渡到生产阶段。
是的,顺便说一下,我们的管道是准备好了。看看我们已经部署一个新版本的模型。所以让我们去模型注册表和设备。
我们有,我们可以找到我们的贷款俱乐部评分模型。你可以看到,我们现在的版本部署三个。
这是我们的版本。
我显示你之前,您可以运行消费者管道和消费者管道将使用最新的版本的模型注册表
为了评估,为了运行推理。
现在,让我们回到GitHub,让我们检查我们的管道是在这里做什么。正如你所看到的,它是绿色的。管道是准备好了。
最后我想告诉你的是实际的部署。如何将所有这些管道实际生产,不仅从IGE运行它,你怎么能在工作场所对我们说,每天。为了做到这一点,你可以去释放和GitHub上你可以起草一个新版本。所以让我们一起这样做。我认为我们将没有时间来等待管道来完成,但我至少可以告诉你,它将开始。现在你可以看到,我们已经创造了一个新版本。如果我们回去,回去,我们会看到部署管道,顺便说一下,即使两个管道开始。所以只是一个简单的承诺,另一个是真正的释放。现在我们去数据库空间,我想告诉你什么是例子。所以它是怎么样子。 So if our integration test will succeed, then each pipeline will be deployed as a job and you can see, you will be able to see them in the job screen on database workspace in this way. So like we have our Training pipeline, Model evaluation pipeline and we have a Consumer pipeline. And the settings you have specified in the JSON file will be reflected here as (indistinct) So let me summarize What you have seen, I have shown you how you can bootstrap your project and how you can set up CICD easily like basically without changing any lines on GitHub actions and Databricks. And after that I have shown you how you can develop, let’s say, the whole machine learning project with different models and was whole model deployment features
在砖搞笑。
然后我还向您展示了如何部署各种管道砖你发展你的项目。——好吧,谢谢你,迈克尔。所以我们今天看到了什么?我们开始谈一点关于CD毫升和维持一个稳定的目标机器学习管道的管道。特别是,我们讨论了独特的挑战与机器学习管道相比,传统的管道。在机器学习管道数据之间的紧密耦合的代码和模型,与传统的管道。接下来,我们谈论的一些挑战团队发现当他们试图用传统方法在分布式集群像砖,或者他们试图使用砖与传统软件和砖实验室蔡先生的模板如何解决这些挑战。因此,对于下一个步骤,你可以去砖实验室,蔡先生模板开始回购,或者我们很快就要发布一篇博文。希望这将是这次演讲的时候是播出我们的博客。所以下一步是请试试。 There’s a tutorial and we’re also looking for poll requests. So feel free to drop us a line or just submit a poll request directly to the repo. Thank you everybody.