MLflow项目和模型

使用MLflow工作坊系列管理机器学习(ML)生命周期

朱尔斯Damji。Databricks的开发者倡导者
Jules S. Damji是Databricks的开发人员倡导者和MLflow贡献者。他是一名拥有超过15年经验的实践型开发人员,曾在Sun Microsystems、Netscape、@Home、Opsware/Loudcloud、VeriSign、ProQuest和Hortonworks等领先公司工作过,构建过大规模分布式系统。他拥有计算机科学学士学位和硕士学位(分别来自俄勒冈州立大学和加州州立大学奇科分校),以及政治宣传和传播硕士学位(来自约翰霍普金斯大学)。

系列的细节

本会话是Jules Damji的“使用MLflow管理机器学习(ML)生命周期”系列的一部分。

会议摘要

本研讨会将介绍如何使用MLflow项目打包格式来重现运行,以及如何使用MLflow模型通用格式将模型发送到不同的部署工具。

建议的准备工作:
为了从这个系列中获得最大的收获,请在这里回顾并完成准备工作:https://github.com/dmatrix/mlflow-workshop-part-1#prerequisites

视频记录

我今天要做的是给那些没有参加的人,我要快速回顾一下我们在第一部分讲过的内容,MLflow跟踪。

然后有一个YouTube视频,你可以在那里看到链接。我还在这一章上发布了链接,你们应该能看到这个。我要讲的是组成这个平台的另外两个组件,称之为MLflow项目和模型,并讨论背后的动机是什么,我们真正需要项目和模型的原因是什么,以及它们是bob体育客户端下载如何融入这个大计划的。然后我们将发现如何在Databricks Community Edition上实际执行模型,希望你们大多数人已经登录了。然后,我们将探索如何实际使用Community Edition中内置的MLflow UI。所以你实际上可以比较和对比模型执行和那些与你共享模型的人,你可以比较和运行不同的运行。你实际看到的两个url是你实际需要的GitHub。所以去到那个特定的URL,要么复制它,要么保持它打开,然后使用浏览器找到你真正需要的材料。下面还有一个目录叫做幻灯片,幻灯片里有你需要的所有PDF文件。如果你想在网上关注我,我相信QA部门有人发过帖子,我们有相关的幻灯片吗? The slides are in this particular GitHub URL. So the first one is the GitHub URL, the second one is at the project that we can execute. So keep those in mind, okay. Now, just just a quick review, last one, the last workshop that we did part one, we started with an assertion. I made a claim that Machine Learning is complex. And the complexity is not so much from the fact that the algorithms are difficult or the math of the theory behind is difficult, or the languages and the frameworks are difficult. The problems stem from two different sources. One is the methodology and the second is how the model evolves over time in different stages of the model development require and demand different requirements. And because of those two, the whole process actually becomes quite difficult. So let me just recap very quickly, what those are. The first one is the Methodology.

传统软件vs.机器学习

我所说的方法论是指,你如何着手?从机器学习的角度进行传统软件开发时,你们实际使用的操作方法是什么?我认为这些是非常不同的因为目标是非常不同的,对吧?在传统的机器开发中,你实际上有一个规范,你实际上要经过这个规范,你要写这个特定的规范,而在机器学习中,你必须优化指标。你所关心的是如何让这些指标起作用,你如何,你可以用什么来移动指针,所以你可以自信地部署这个模型你有一个合理的准确性。第二,传统软件开发的质量只取决于代码。这在很大程度上取决于代码,而机器学习的质量取决于输入数据和调优参数。这并不是说代码质量不依赖于你写的机器学习代码,但我认为这将由你的输入决定。你的投入有多大?哪些调优参数允许你进行正则化或者哪些调优参数实际上用于确保你的模型是广义的。 And as a result of that gives you a good metric. And the final thing is that in the software development cycle in the compile edit cycle, there is a limited stack in number of libraries and number of tools and utilities you’re gonna use, it’s pretty much limited what your company’s infrastructure supports. Whereas the machine learning, it’s slightly different because you wanna compare and combine many libraries to create a particular model that gives you the ultimate the best model. And those are the ones that you actually wanna use, which are most recent, which are has a large community around it. And they’re sort of, good parties open source. So I think that’s problem number one. The second one is that if you look at the quintessential cycle of how machine learning preparation or model evolves, you got all these different stages and each and every stage will have a myriad set of tools that you’re gonna use, right?

机器学习生命周期

因此,对于数据准备,您可能会使用工具组合来进行ETL或进行特征工程。你可能会使用scikit-learn,你可能会使用pandas,或者你可能会使用Spark和SQL,或者你可能只使用pandas作为编程语言或Scala,等等。然后,如果你在训练,就像我说的,机器学习周期要求你不仅仅使用一个库,但你有选择。您还可以使用其他框架,因此您可以获得世界上最好的东西。第三个是你可能会部署不同的形式因素。你不仅局限于一个,你会有,几个你真正想做的部署目标。最后,数据注入也很复杂。这是一方面,你有不同的工具,它们有不同的要求。第二部分是调音。每个工具都有特定的工具和你想要维护的配置。 And more importantly, is the tuning part in the training model. You actually wanna make sure that you probably use the best hyperparameter tuning that you have scoped over the entire space. And so that really affect the needle because that’s what you wanna do you wanna optimize the metric, and one of the things you do that is by constantly experimenting with new parameters, new tuning, so that you get the best model. The third thing you have to do is you have to do it at scale. Each of these stages require that you actually do it at scale. And the scale comes into prominence because of the fact that we are dealing with the large magnitudes of data in today’s era of big data in ML, so the scale is important. And then third and final is Model Exchange. How do you ensure that the model that you tune, the model that you that you train, the model that you were satisfied with that has an accuracy is easily transferable in the same way that you actually trained, so model exchange is important. And then last but not least, we are living in the world of data privacy, and we had to worry about governance, we have to worry about provenance. So how do you actually control these, and as a result of these two distinct sources, machine learning in general actually becomes a bit difficult. And what I propose, what we propose is that, can we actually do this in a very open manner, so you’re not restricted to only using proprietary software, or you’re not restricted to use only a limited set of things.

MLflow组件

有些公司在标准化方面非常成功。但我们想要做的是创建一个开源平台,这样我们就可以以开放的方式来做这件事。bob下载地址bob体育客户端下载所以可以使用其他工具,其他库,我们可以在不同的环境中部署东西。结果就是有了两个截然不同的组成部分,分别是MLflow跟踪,MLflow项目,MLflow模型。最后一个,最近发布的是MLflow Registry。我们上次讲过跟踪。今天我们要讲的是项目和模型。回顾一下跟踪背后的整个思想,我们提供了一个非常简单的python流畅API,你只需要在机器学习代码中注入这种非常简单的方法来跟踪参数。

使用MLflow进行模型开发非常简单

在机器学习的说法中,你可以跟踪你实际创建的指标,这取决于它们实际使用的机器语言或框架。然后你可以保存一个特定的模型,我们称之为对数模型。因此,当你做了所有这些之后,你会发现你可以使用MLflow UI来细读、调查和比较你创建的所有不同的指标,或者你实际创建的模型,你可以查看你保存的工件,比如图。这对你来说很容易,不仅是跟踪那些非常简单和有系统的方法来比较和对比针是如何从一个参数移动到另一个参数的,或者不同的模型是如何相互比较的。这就是跟踪的全部思想。跟踪是,把它想象成一个中央服务器,左边的人,东西是所有数据或元数据的生产者,或实验的运行,它们使用我们提供的API,作为跟踪的一部分,把所有东西记录在跟踪服务器上。

MLflow跟踪

右边的东西,把它们想象成消费者实际上使用相同的API来消费元数据,实验,参数和度量,你实际使用的,并以一种可消化的方式呈现它们,在一种探索性的方式中,你实际上可以消费并从中获得意义,你可以把它联系起来,或者把它作为模型如何发展和发生了什么的故事来传达。你不仅可以将这些指标保存为数据源,还可以在控制台的API中显示它们。这就是跟踪的本质。跟踪的一个好处是你可以在本地使用它,或者你可以通过设置每个变量的思维来编程地使用它。简单地说,这就是我们在第一部分讲过的内容。然后我们做了一个逻辑教程和数据组合,来展示你如何实际使用它们。今天,我要讲的是MLflow项目和MLflow模型以及它们与跟踪的关系。

MLflow组件

在这三个系列的最后,你会对它们是如何一起工作的有一个概念。你不需要使用所有你可以使用的东西,只要跟踪所有东西,然后你不需要担心使用模型和项目。但是这些附加的好处可以让你有一种独特的、有选择性的方式来使用这些组件。MLflow项目,什么是MLflow项目?这是我们介绍的一种常规方法,希望通过它成为一种标准,将机器学习代码打包成一种格式,使您能够在任何地方运行特定的代码。现在,我之前说过的一件事,我在第一部分中提到过,我说MLflow是建立在开放的命题和原则之上的。

MLflow项目动机

换句话说,我们实际上想要支持所有的公共库,你不局限于一两个,而是一组公共库,大多数数据科学家和机器学习开发人员实际上都在使用。我们也希望他们能够实际使用不同的环境,在这些环境中他们可以实际使用这个并部署这个特定的项目。这个要求,这个意义本身就带来了三个问题,对吧?首先,每个特定的工具都有其非常通用的方式来封装数据,以及非常通用的方式来部署这些东西。第二,人们在不同的环境中进行实验。有些在本地运行,有些在本地机器上运行,有些在云端运行,还有一些在笔记本电脑上运行。第三个问题是,即使你得到了准确的数据,即使你得到了准确的数据,和你真正需要的参数,你可能无法做出和你在开发你的机器时所做的相同的实验。换句话说,目标环境可能有一组不同的库,目标环境可能有您实际使用的Python或您使用的语言的不同版本。因此,这就构成了一个有趣的挑战。你是如何使用机器学习来生产的呢? How do you reproduce a particular set of experiments, did you actually did it on your local machine? Or you did it on your dev environment. And then you wanna make sure that the same environment exists in your production environment, or the same environment exists when you wanna share your particular project with someone. So if I create a particular project, and I say, “Hey, Chris and Mary, “here are the two projects that I created. “Can you guys actually run it “and see what you think about it?” And so one way to do that would be able to use this particular project as a way to share with my colleagues so they can actually run the experiments in the same environment. In other words, recreate the same environment, reincarnate the same project in the same environment so that they actually get the results. Well, so how do we do that?

MLflow项目

解决方案是,如果你想到MLflow项目

作为一个独立的执行单元,它捆绑了所有你需要的机器代码,以便你训练它。运行特定模型实际需要的所有依赖项库、语言、不同的配置、实际需要的所有数据以及配置规范。这样,您现在可以在本地运行它,也可以远程运行它。因此,由于MLflow实际上可以在目标环境中安装和执行所有这些(具体取决于目标环境),因此您实际上是在目标环境中重新创建特定的项目。所以如果我把我的项目交给Mary,她去执行这个特定的项目,她实际上会得到和我在本地机器上得到的相同的结果。那么这背后的秘密是什么呢?它是如何表现自己的?MLflow项目是如何指定的,以便我们可以进行这种再现?有两组东西,对吧?如你所见,如果你来自Unix环境,你们大多数人可能都是这样。

1.使用实例MLflow项目文件

这只是我们在GitHub上提供的一个简单的目录结构,在我的MLflow Project目录下,你会有两个文件,一个叫MLflow Project。另一个叫Conda。MLflow项目只不过是指示MLflow的规范和配置,好吧,这就是如何在目标环境或本地环境中实际重新创建特定项目。我有一个Conda文件,它告诉我我的依赖项是什么。这些是我实际要用到的入口点,为了让我重新创建和运行这个实验。入口点会有一个命令,会有一些叫做训练数据的变量,它会告诉你数据的路径或位置。是我所有的参数。我可以有几个参数,但这些是我默认的参数类型。然后这个命令会用来训练这个特定的模型所以当我把这个交给克里斯或玛丽时,他们可以运行这个特定的东西它会它会重新创建那个。它们实际运行的方式非常简单,我们提供MLflow UI或MLflow CLI,让你可以运行我在这个特定项目中给你的这个特定的Git存储库,并以MLflow Git运行的方式运行,然后提供我需要的参数。 Now if I don’t provide the arguments, and it’s gonna use the default. But suppose Mary wanted to use her own set of lambda arguments, her own set of learning codes to actually recreate this particular model to see how it actually does, because I’m gonna experiment that. So she could provide these particular arguments as well. Or you can actually use that programmatically, there’s an API that says MLflow run GitHub repository, and the parameter is nothing but the dictionary, with set of default arguments are the ones that you actually want. Or alternatively, when you do a Git clone of that particular project, you can seed into that particular directory and then just run in place whereby you say MLflow run E, which is the current directory, and my entry point is main and here are my arguments. So that’s one MLflow Project is a way to express my project configuration and instructing MLflow to create this, re-incarnate this particular project in my target environment.

2.例子Conda.yaml

但更重要的是,它是第二个文件,即conda.yaml。顺便说一下,conda文件也可以是docker文件。所以conda文件告诉MLflow继续创建一个conda环境。然后在conda环境中,在我使用的通道中,默认是conda的一种方式,这是我获取所需所有库和包的默认方式。这是我的依赖项。我的依赖是,我依赖于Python 3.7.3。即使我的本地机器有2.3,但我不想碰到。3因为我用3.7.3创建了这个项目,所以当Mary运行它时,它会用Python安装3.3运行。至少我可以知道我是如何建立模型的。我要用pip来安装MLflow然后我需要pickle因为我用scikit-learn pickle来序列化代码我要把我的环境命名为MLflow -env。

这就是MLflow封装或格式化特定项目的本质。总之,什么是项目?

MLflow项目

正如我所说,这个项目只是我重现ML运行的一种常规方式。我们的方法是提供一个GitHub存储库,在那里你可以放入一个MLflow项目文件来表达你的项目配置。它还定义了一组依赖关系,允许人们重现他们最初训练的环境。最后,我们在API参数中提供了一组执行来运行特定的项目。这可以是一个CLI,它们在Python, R和Java中都可用。然后你可以通过本地运行来支持它们或者你可以通过指定后端在databricks服务器上远程执行或者你可以在Kubernetes上运行它现在还处于实验阶段。这就是这个项目的本质。只是一种传统的表达和传递到Mlflow的方式,比如这是我的项目,继续执行并通过安装实际需要的所有依赖项来重新创建这个环境。那么MLflow项目的结构是什么呢?当我用这个特定的URL作为我的GitHub运行MLflow时会发生什么?

MLflow项目执行剖析

很多事情都发生了。第一件事,它在GitHub上把特定项目签出到你的机器或目标机器上的临时位置。它创建了一个conda环境,它激活了它,conda环境的名字通常是MLflow-runid,就是这样。一旦它真正被激活yaml,它将开始安装您实际需要的所有包,以创建它最初运行、试验和密封的环境。最后,它会用你实际提供的入口点执行你的特定程序,在这个例子中,Python训练了UI参数,它会训练它们所有的,就在这里。所以本质上是用相同的配置重新创建模型,当克里斯创建并与我分享那个模型时。

你可能会问,这很好很有趣。如何实际构建一个特定的项目?这真的很简单。如果你想一下,这几个步骤,就像我们如何执行它一样,你要做的第一件事是为项目文件创建一个ML,对吧?

如何构建MLflow项目

然后用你的入口点填充它。到现在为止,你可能知道这些入口是什么。你提供默认参数,等等。你要做的第二件事是创建一个conda文件。那么,你到底是如何创建一个conda yaml的呢?你用依赖项填充它但你怎么知道你的依赖项是什么呢?现在,如果您已经使用MLflow跟踪API创建了这个特定的模型,那么当您查看特定的模型时,我们在第一部分中介绍过的一件事是如果您查看UI中的工件,将会有一个工件称为model Directory在模型目录中,您将有一个名为Conda的文件。和conda。Yaml才是你真正想要的,除非你记得所有的。但这是实际捕获的那是你真正想做的你只是复制粘贴并把它放在你的GitHub中作为第二种文件。

你要做的第三件事,显然是创建一个GitHub存储库,并上传那些特定的文件,在任何其他你想要的代码,数据和资源中,这些可以吸引人,捕捉项目是什么。最后,通过在本地运行它们来测试。或者你可以通过编程方式使用它或者你可以使用命令行,然后在GitHub上共享它,任何人都可以这样做,这是一种公开分享你的项目的好方法,你实际上已经创建了一段时间,其他人可以做一个GitHub,这是一种展示资源的好方法。的好东西的项目,因为这样你可以指定应该如何执行这个项目,您可以创建我们所说的一个非常复杂的多步骤在您的项目中工作流程规范说这些都是我想创建一个多的工作方式,但我可以做我想做的三组的事情之前我火车Keras模型,所以我可以加载一个特定的文件,假设一个CSV文件的位置,我可以使用ETL的火花的原因。

MLflow项目:创建多步骤工作流

一旦我完成了ETL,一旦我完成了功能工程,我将把所有干净的数据保存为一个parquet文件,然后我将使用Spark MLlib加载该文件,然后创建一个特定的模型,这样做。一旦我这样做了,我的MLlib的输出可以是我的现代训练参数的输入。那么下一步就是,开始训练Keras模型。然后,这给了你一种精心设计的方式,将你真正想要的几个工作流步骤串在一起。然后干工作就可以看看每一步,然后说它真的完成了吗?如果它完成了,就转到下一个,以此类推。所以你可以在一个相当简单的多步骤工作流中创建它们。MLflow项目文件看起来像什么?其实很简单。嗯,这有点复杂,但你能看到所有不同的入口。 And the entry points are, this is my conda environment, these are my different entry points. I’m gonna go ahead and do the ETL after I’ve done ETL, I’d created my ALS model then I’ll do the train Keras. And then my final thing that I’m gonna run is called actually Main. And the main is the one that actually sort of invokes all these different arguments. All this different entry points and you can re-take the results of those and feed them to the next. You can actually create a fairly good workflow.

这就是MLflow项目的本质。

MLflow组件

你们在质量保证方面有什么问题想让我回答或者你们正在处理吗?

- [Chris]我认为到目前为止我们的状态还不错。谢谢你!-非常感谢,克里斯,我很感激。好了,我们继续。接下来我要讲的是模型,对吧?模型就像项目一样非常相似,动机实际上来自于同样的事情,那就是我们无法将这些机器学习模型部署到不同的环境中。记住,我谈到了模型在不同环境中实际执行的能力。这就是我们想要它的原因之一。因此,模型背后的动机与项目背后的动机没有什么不同。

MLflow模型动机

我们想要有所有MLflow框架,它实际上想要支持,因为我们的整个主张是,我们不能让人们使用和结合最好的可用工具来做到这一点。我们无法在不同的环境中为他们服务。而这本身就带来了一系列问题。首先,模型可以使用广泛的工具来编写,因此,你必须担心它们将如何被使用,以及它们将如何在不同的环境中执行。第二个问题是,这些模型可能被写成,例如,一个不同的框架。我可能会建立一个TensorFlow模型,我不会只在Kubernetes上运行。或者我可能会运行一个scikit-learn模型,我想在Spark上进行评分,或者我可能会编写一个想要创建的Spark模型,它们不仅能够在Spark基础设施或Spark集群上运行,而且还能够在SageMaker上作为MLlib运行。我该怎么做呢?好吧,如果我想支持所有这些,会发生的是,我最终会有所有这些不同的端到端的组合来支持我在不同份量上的模型。这和你在项目中遇到的问题是一样的。 So the motivation is very similar. I don’t wanna have to support end-by-end different ways to say for TensorFlow use this kind of model to deploy it on Kubernetes. Or for spark use three different ways to do it on SageMaker to do it on Spark and to do it on the Docker environment. So what was the solution? The solution, I think was a way to say, can we actually have a convention unified model abstraction, right?

MLflow模型

把它看作是一种中间格式,它捕捉了您想要在各种环境中部署的模型的特点,对吗?可以将模型视为常规的打包格式,这样机器学习模型就可以在各种不同的环境中使用。更重要的是,把模型看作是模型的Docker文件,因为如果你有一个Docker文件,它实际上可以在应用程序中执行新的文件。但更重要的是,抽象是把模型看作一个lambda函数。如果你来自Python环境,如果你来自函数式编程环境,把它想象成一个特定风格或特定模型的lambda函数,我们可以把它部署在一个理想的Python环境中,只调用它的评分函数Predict。这就是我可以使用spark pi函数的地方我可以将它部署到Python中支持它的任何地方。

所以这些中间层让我们实际上有了一层一种格式,所有其他不同的格式都可以使用。然后我们就有了一个目标环境在那里我们可以进行存储。我想我可以用一个很好的类比来说明这一点你们都熟悉Apache Arrow,这是一种内部捕获数据是如何被所有这些不同的工具格式化或安排在内存中的方法。在Apache Arrow出现之前,我们只有这种不同的格式化工具,这样它们就可以共享数据。但Apache Arrow给出了一种标准方式,这是你在内部表示数据的方式。这些工具都可以共享。他们知道这是Apache Arrow格式,我将以一种特定方式序列化和反序列化。所以他们的知识非常相似,因为你实际上有一个中间层,实际上有所有这些多种工具,实际上可以写入特定的格式,然后我可以想到消费者或生产者,消费者实际上可以知道它是什么口味,我可以使用这种特定的口味。所以知识是非常相似的。

你是怎么做到的?(清了清嗓子)所以当你使用MLflow跟踪API,当你使用说MLflow。tensorFlow log特定模型,这里我们为你创建了这个目录。

MLflow模型

就像我们创建了一个目录,就像你需要创建一个项目,我们创建了这个目录调用,然后建模这个模型的名字。在下面,你会有你真正需要的一切来捕捉它。有了模型文件,模型文件有两种风格。风味通常是您实际用于记录模型的风味。在这个例子中,它会是TensorFlow模型在下面,你会有一个目录里面有TFF图的估计值,或者变量或者权重它们实际上是用来创建这个特定模型的。你有一个重要的函数用来记录TensorFlow模型。这对于理解TensorFlow模型格式的工具是有用的。如果你把它部署在SageMaker或Kubernetes上,它会理解如何加载TensorFlow模型,然后在上面使用预测函数。

另一个,实际上是非常强大的,我想过,我之前说过,我说过把它想象成一个函数,是实际使用pip的能力或者我们称之为Python函数或函数模型。它们实际上可以在Python环境中的任何地方加载模型。通过提供熊猫的框架,你可以在这里做预测函数。那么结果是什么呢?

Keras口味的例子

可以这样想,如果我实际上在使用Keras模型,并使用跟踪API记录特定的模型。进入MLflow,记录这个特定的模型。实际情况是,我创建了这种特殊的模型格式,并且有两种风格。一个是Python func。另一种是Keras口味。当我有了这两种特殊的风格,我可以把它们部署到多个环境中。因此,在一个能够理解Python的环境中,我可以将特定的Keras模型作为Python函数加载,然后只使用panda在帧中的输入来对特定的模型进行评分。或者,如果我只是想在Keras环境中本地部署它,那么我只需使用Keras加载模型API,它会在实际存储图像文件时加载图像文件模型,然后提供Keras输入帧或任何reptor或张量,作为预测函数的一部分,它会进行评分。这个重要的表达不同风格的方法给了你所有你实际创建的不同模型的能力,API torch, scikit-learn, Spark, TensorFlow或Keras。通过Python函数,可以将它们部署到不同的环境中,在那里Python可以被理解。 This is actually quite powerful. And we’ll look at some of that in the lab, hopefully, we’ll get time through that because we got about another 20 minutes or so. So to summarize what are MLflow models?

MLflow模型

它们只不过是MLflow模型的包装格式。就像项目一样,它们只是您实际拥有ML模型文件的任何目录。它们允许你定义可重复性的依赖关系。如果我在Docker环境中运行这个,我有一个Docker环境,它会捕获依赖项。这里的依赖项是我运行这个特定模型所需要的。

我们提供了模型创建实用程序,因此我实际上可以使用MLflow模型来保存特定的模型。我可以使用MLflow加载模型或者我可以使用MLflow加载Python模型在目标环境中加载这些实用程序。我们提供了所有这些不同的部署API来实现这个。所以在本质上,这就是整个项目和MLflow模型的概括。MLflow模型和跟踪是非常非常相关的,因为跟踪API允许你提供实用工具来创建和保存这个特定的模型。我想我们的讨论差不多到此结束了现在我们要做的是直接进入教程。

MLflow项目和模型教程

(清嗓子)这些是我们要做的项目,希望是我们要做的教程。现在,如果Git复制了你实际拥有的URL。如果你已经安装了或者至少注册了社区版,我们会直接进入,看看效果如何。

你们能看到我的屏幕吗?

-好的,先生-好的-好吧。手机够好吗,你能看到吗?实际上,我想我们现在只能看到你的桌面,朱尔斯。——好的。

我再分享一下。我想我遇到了……

我看看能不能用new share,我们试试这个。

现在怎么样?-[玛丽]我想是的。我们可以看到几个窗口,运行项目示例的那个。-好了,你能看到下面的笔记本了吗?-[玛丽]是的,是的。

-好吧,让我在这里写。

手机够好吗?-好的,让我知道…现在怎么样?

-[玛丽]是的,我觉得看起来很棒。-好,太棒了。所以我只想…

你们中有多少人已经注册了社区版?有机会登录并进入社区版。

能快速数一下吗?如果没有,我就直接去做。我假设人们已经创建了一个社区版。已登录。我将非常简短地,快速地给你们总结什么是Community Edition以及如何使用它。-[玛丽]是的,我想有些人回应了,是的,他们。-好吧,好吧。我就直接开始吧。是的,假设您实际上已经加载了DBC文件。

MLflow项目实例

如果你不知道如何加载这个文件,你可以到你的工作空间进行导入。在这个URL中,你可以输入GitHub中所有的DBC URL,或者你可以直接浏览。然后进入你的GitHub目录。

点击这个,完成。

然后导入。如果你不导入,它会继续导入那些特定的文件。有几种方法。我假设你们已经做过了并且你们有一个快速的方法来导航。接下来我们要做的是,我们要创建一个特定的集群,我已经为集群创建了这个但是创建集群的方法,是去左边的这些标签或者左边的图标。单击此按钮创建集群。输入集群名称,然后选择6.5机器学习运行时。

这就安装了MLflow TensorFlow Keras和所有你需要的库。所以你不需要担心创建这些。现在我的按钮是灰色的原因是因为我已经创建了那个集群。所以当你创建集群时,你会开始旋转东西。当它准备好了,你会得到一个纯黄色,一个纯绿色的点,你可以把它附着在上面。所以我的集群有这个特殊的配置。现在我们来做一下。

你浏览销售的方式是你点击这个特定的销售你可以点击Control Return,它会执行这个特定的shell并保持在相同的shell上。或者你可以按Shift - Return,它会让你放松到这个单元格,然后到下一个单元格。另一种方法是使用这个下拉箭头来运行销售或者运行它上面的所有东西?我们来运行这个。我们要做的第一件事就是给你们看这个特定的MLflow是什么样子的我想在这个特定的笔记本上执行它。我可以点击这个,打开一个新标签。

如果我看这个特殊的例子。这是很久以前Matei创建的一个例子。这就是说明的地方。如果您看一下我再次谈到的MLflow项目,它是一个项目规范,告诉我这是我的入口点。这是我的conda环境,执行这个特定的命令。我现在可以看conda文件了。这些是创建这个的依赖关系。我可以看一下train。py这是我的Python程序它实际上训练了一个线性模型来预测特定葡萄酒的酸度。这很简单,但我想说明的是如何做到这一点。回到这里,执行这个。

我用的是1.7,我要运行这个因为在数据库中,我要创建这个特殊的配置文件它允许我在远程机器上创建一个令牌,这样我才能实际执行它。它是你在Databricks社区版上实际需要的东西。在本地机器上确实不需要它。

我听说这个参数是指定的。对于这个特殊的东西,我想要的是,这是学习曲线的一部分。这是我要用到的四个参数。这是我要用的Git URL。

然后我要用MLflow run提交我的run。这是我实际执行这个特定运行的方式。时间过得怎么样?我有15分钟。好的,这里,这是一个非常简单的循环。我要运行它。在这一点上,这个要做的是,它会去到GitHub,它会下载这个特定的目录。它将开始在特定的临时位置上执行和安装实际需要的包。它将激活一个conda环境。它会进入并执行这个特定的运行然后给我结果,对吧? Now this might take a few minutes for some of you guys.

这样做的好处是,如果我不指定这些,我就会使用默认参数。如果你想对这个特定的项目做更多的实验有人在GitHub上和你分享你下载了它,你可以指定你真正需要的参数。它会开始运行这个东西,对吧?原因是这是第一次。它会下载所有东西,安装所有需要的包,所有依赖。在本地操作系统上,它要快得多,但就是这样。

关于聊天有什么问题吗?

- [Chris]不,我觉得我们看起来很不错。我们继续检查。——可爱。

一旦它运行了,你会看到它会创建所有不同的运行和实验,然后我们可以看看UI,看看指标是什么。由于参数的变化而产生的反应是什么,看看实际产生的硬影响是什么。这是一个简单的例子,但它看起来只是当你创建这个特定的模型时,当你创建这个特定的项目时,你可以与其他人分享。你可以公开与他人分享。

有趣的问题是,您真的需要使用ML模型注册表进行项目吗?答案是(清了清嗓子)我的意思是,是也不是。我认为边界注册是一个地方,你实际上创建了不同的阶段,一个特定的模型,以跟踪中心位置,你实际上击中了这个特定的模型。其思想与您实际上可以共享模型和发现模型是一样的。但是模型寄存器是更高级的功能。项目是一种很好的复制方式项目背后的理念是你可以复制和重建那些环境。这样你就可以使用最好的公共资源GitHub来分享它。

这是我所有的跑步参数,我有我的跑步ID。现在我要点击这个UI它会给出我的运行情况。所以当我点击这个,这实际上是所有实验的结果实际上是在这个特定参数下运行的。我可以看到,在高水平上,我的肘部和比率,我用的是alpha,因为我用的是naso,这是我为所有三次运行创建的矩阵。我可以通过点击向上箭头来查看每一次运行。现在我在MLflow UI中。(清嗓子)-打扰一下。如您所见,我实际上有三次运行,其中包含实际登录的所有参数。我的指标是……

实际上,这是一种很好的表格方式。

在我们的时期,我使用非常常见的回归指标,然后我可以比较和对比这些东西,我实际上可以做一个比较,看看我的模型是什么样的。这给了你一个很好的表格方式。这些是我的运行id,这些是我得到的所有指标。这是一个很好的散点图。我可以用我们的rsme来看看这两者之间是否有关联。我可以改变这个参数,看看在一个比率下散点图是什么样子。应该是差不多的因为我用的都是一样的比率。但是你可以看到我可以用各种不同的方法来把它形象化。我可以看我的等高线地图。我可以看看平行坐标,看看每一个的实际情况。 So it’s a good visual representation for UI to actually give that. So that sort of gives you the ability to actually do that. So let’s go back to my run experiment, we actually run that. Another way to run that would be very similar to run this using projects.run. And projects.run is just another way to actually execute the same thing, they actually execute the same thing. So I’m not gonna do that. But here, we actually looked at some of the matrix. And as a result, you can actually create a fairly complex multi-step flow we actually looked at. Now let’s look at the second one. The second one I’m gonna do is a keras example.

在这里,我将演示如何使用这个有效载荷函数。这里,我要导入所有我需要的东西。在第二个笔记本上,我要创建这个叫做import a warning的东西。我运行的是TensorFlow 1.1,你将在我的第三个例子中看到,我是如何忽略TensorFlow 1.1的,但我使用了TensorFlow 2.0,因为这是我创建的模型,这是证明你实际上可以使用MLflow项目重现和重建环境的全部方法,对吧?这是我的TensorFlow运行因为这是原生运行。我要在这里创建一个非常简单的模型。它所做的就是将华氏温度作为温度,然后预测摄氏温度。

我要创建一个非常密集的两层模型,这是线性回归吗。MLflow跟踪和一个伟大的事情,如果你有成百上千的参数和如果你有六个指标,就有点麻烦当你真正使用MLflow API和日志,日志参数,测井参数B,日志参数C,或日志度量,B和C,我们所做的是使开发人员能够更加容易的事情是,在每一个框架,我们的支持下,我们有这个autologging的概念。你只需要创建一个MLflow自动日志或Spark自动日志或Keras自动日志,它就会为你处理所有日志。这样你的代码就变得非常简单。您可能会使用与随处使用的相同的机器学习代码,实际上惟一需要做的就是开始运行MLflow来实例化跟踪服务器的会话。然后在那里使用MLflow自录。这些是PI的一些请求我们应该会在接下来的几个版本中看到。这是我所有的代码。我在做MLflow。Start_run创建跟踪服务器的会话。 I get my experiment ID. I create my baseline model. I’m gonna use this MLflow.keras.autolog. Remember, I’m not logging any of the parameters, everything will be logged for me. I’ll do the fit of the model and then I’ll do the prediction after I get the model. So let’s run this. So this is gonna train. And this is my driver, I’m gonna create a batch of 10 epochs thousand and then run the MLflow. So let’s look at what this looks like.

为了节省时间,我要做的是,我要进入预运行因为运行它需要一点时间。为了向你们演示,当我运行它的时候,这是这是在训练(清嗓子)然后我可以运行这个来训练这个特定的模型。这贯穿了所有的时代,最后我们会给出度量标准。然后我就可以去跑步了我应该看到所有的东西,对吧?

所有这些,我都不需要单独记录。Keras autolog负责这一切。如果我要做所有这些,我就必须记录每一个,我就必须有几个代码,你记录这个,记录那个,等等。这就有点麻烦了。这允许你说,继续做一个自动日志,然后我就不用担心了,它会跟踪所有的东西。它的好处是,它还打印出总结并给你一个特定的标签如果你到这个特定的模型总结,它会给你整个总结,你的层是什么样子的有多少个有可训练的参数,等等。你可以看看这个特定的模型这实际上是一个运行了1.1.5版本的conda文件?然后再看均方误差,看看是什么样子。我可以通过这个步骤,得到平滑的曲线。我可以比较一下,再加一个,假设是损失。 And it gives me the ability to see how my mean square actually progress of each and every epoch is actually approaching zero. So that essentially sort of gives you the ability to run this keras model running in natively.

现在,我要在这里做点别的,只是向你们展示这是我对温度的预测。你可以看到这个模型不是很好,对吧?它应该接近于0,这个应该接近于100。那么我们实际做的是什么呢?是因为1.5吗?是因为我没有足够的数据吗?让我们来看看第三个例子,在这个例子中,我运行了一个我创建并与他人分享的特定项目。我要下载它。我在这里所做的改变只是其中一件事,我运行的是TensorFlow 2.0,而不是TensorFlow 1.1。当我运行这个模型时,项目是什么样子的? Let’s open a new tab.

非常简单的文件,我是一个conda环境。这些是我训练的参数默认情况下,我使用10和100的epoch。我可以看看我的conda文件。如果你看一下conda文件,我有所有这些依赖项。现在我用的是TensorFlow 2.0,对吧?所以这里会发生的是,当我实际运行这个特定的项目时,它不会使用TensorFlow 1.1,它是在心里运行的,但是你会用TensorFlow 2.0重新创建我的环境,以及所有这些新的依赖关系,它实际上会在这个特定的项目环境中训练这个特定的模型来预测。回到这里,然后运行这个,对吧?在这之前,我运行这个特定的GitHub,和之前一样,我运行这个特定的参数。当我运行这个时,我得到这个特定的UI,我得到这个运行ID和参数。接下来我要做的是证明它实际运行了1.7。

这是我的2。x的味道,我要加载这个特定的模型。记得吗,我们讲过我把这个Keras加载为一个加载模型我要把它作为Python函数模型加载回来。这就是我们加载模型的方式你提供URI,你加载特定的函数你加载这个特定的后端函数然后我做预测。当我用这个运行2.0的新模型进行预测时,我得到了一个相当好的预测,对吧?好多了。我唯一改变的是最近的那个。我可以通过增加更多的层数,增加数据,设置其他参数,反复进行这个实验,来让这个模型更加精确,以得到更好的度量。这证明了ML项目的可重复性即使我在我的第二个例子中运行TensorFlow Keras,实际上是第三个例子,TensorFlow 2.0。它下载了TensorFlow 2.0它重新创建了这个特殊的环境来做这个。 And if I went back to the runs, and I went to this particular directory for my run, and I looked at the particular run.

我看着我的模特conda yaml。它是TensorFlow 2.0。所以它实际上下载了张量流来重建这个特定的模型。我想我们已经快到时间了我几乎把所有的内容都讲完了。就像我说的,把所有这些例子都讲一遍总是很困难的,但这些例子都是为你们准备的。你可以在今晚或明天做一些例子。如果你有任何问题,你可以随时给我发邮件或短信

高级:潜入三角洲湖

深入了解Delta Lake的内部结构,这是一种流行的开源技术,在您的数据湖之上支持ACID事务、时间旅bob下载地址行、模式强制等。

看现在