使用 Docker 在云端部署机器学习管道
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
为了在 Microsoft Azure 上部署机器学习管道,我们需要将管道容器化到一个名为 “Docker” 的软件中。如果您不知道容器化是什么意思,没问题 — 本教程就是关于这个的。
什么是容器?什么是 Docker?为什么我们需要它?
使用我们上传到 ACR 的容器在 Azure 上部署 Web 服务。
查看正在运行的 Web 应用,它使用训练好的机器学习管道对新数据点进行实时预测。
本教程将涵盖整个工作流程:从本地构建容器到将其推送到 Azure Container Registry,然后将我们预训练的机器学习管道和 Flask 应用部署到 Azure Web Services。
你是否遇到过这样的问题:你的 Python 代码(或任何其他代码)在你的电脑上运行正常,但当你的朋友尝试运行完全相同的代码时,却无法运行?如果你的朋友遵循完全相同的步骤,他们应该得到相同的结果,对吗?对此的简短回答是:**环境。**你朋友的 Python 环境与你的不同。
环境包括什么?→ Python(或你使用的任何其他语言)以及构建和测试应用程序时使用的所有库和依赖项及其精确版本。
如果我们能以某种方式创建一个可以转移到其他机器(例如:你朋友的电脑或 Microsoft Azure 等云服务提供商)上的环境,我们就可以在任何地方重现结果。因此,容器是一种软件,它将应用程序及其所有依赖项打包在一起,以便应用程序可以在不同的计算环境中可靠地运行。
“当你想到容器时,就去思考集装箱。”
这是理解数据科学中容器最直观的方式。它们**就像船上的集装箱**一样,目标是将一个集装箱的内容与其他的隔离开来,以免混淆。这正是容器在数据科学中的用途。
既然我们理解了容器背后的比喻,接下来看看为我们的应用程序创建独立环境的其他选项。一个简单的替代方案是为你的每个应用程序配备一台独立的机器。
(1 台机器 = 1 个应用程序 = 无冲突 = 一切顺利)
使用独立的机器很直接,但它并不能超过使用容器的好处,因为为每个应用程序维护多台机器既昂贵,又维护起来困难重重,而且难以扩展。简而言之,在许多现实场景中,它并不实用。
创建独立环境的另一个替代方案是**虚拟机**。容器在这里再次成为首选,因为它们需要的资源更少,非常便携,并且启动速度更快。
你能找出虚拟机和容器之间的区别吗?当你使用容器时,不需要访客操作系统。想象一下 10 个应用程序运行在一台虚拟机上。这将需要 10 个访客操作系统,而使用容器时则不需要。
在本教程中,我们将使用 **Windows 版 Docker Desktop** 来创建一个容器,然后将其发布到 Azure Container Registry。之后,我们将使用该容器部署一个 Web 应用。
Docker 镜像和 Docker 容器有什么区别?这是迄今为止最常见的问题,所以让我们立即澄清。有很多技术定义,但直观地可以将 Docker 镜像想象成一个模具,容器是根据它创建出来的。镜像本质上是容器的一个快照。
如果您喜欢更具技术性的定义,可以这样理解:Docker 镜像在 Docker Engine 上运行时会变成容器。
归根结底,Docker 只是一个包含几行指令的文件,保存到你的项目文件夹中,文件名为“Dockerfile”。
另一种理解 Dockerfile 的方式是,它们就像你在自家厨房里发明的食谱。当你把这些食谱分享给其他人,他们遵循完全相同的步骤,就能做出同样的菜肴。类似地,你可以与其他人分享你的 Dockerfile,他们就可以根据这个 Dockerfile 创建镜像并运行容器。
现在您已经理解了容器、Docker 以及为什么应该使用它们,让我们快速设定一下业务背景。
一家保险公司希望通过在住院时使用人口统计信息和基本病人健康风险指标更准确地预测病人费用,从而改善其现金流预测。
构建并部署一个 Web 应用程序,在该应用中,将病人的人口统计信息和健康信息输入到基于 Web 的表单中,然后输出预测的费用金额。
训练并开发一个用于部署的机器学习管道。
使用 Flask 框架构建一个 Web 应用。它将使用训练好的 ML 管道对新数据点进行实时预测。
创建一个 docker 镜像和容器。
将容器发布到 Azure Container Registry (ACR)。
通过发布到 ACR,将 Web 应用部署到容器中。部署后,它将公开可用,并可通过 Web URL 访问。
我们在 Python 中使用 PyCaret 来训练和开发机器学习管道,该管道将作为我们 Web 应用的一部分使用。机器学习管道可以在集成开发环境 (IDE) 或 Notebook 中开发。我们使用了 Notebook 来运行以下代码
在 PyCaret 中保存模型时,会根据 setup() 函数中定义的配置创建整个转换管道。所有相互依赖关系都会自动协调。查看存储在“deployment_28042020”变量中的管道和模型
本教程的重点不是构建 Flask 应用。在此讨论只是为了完整性。现在我们的机器学习管道已经准备好了,我们需要一个 Web 应用来连接到我们训练好的管道,以便对新数据点进行实时预测。我们使用 Python 中的 Flask 框架创建了 Web 应用。该应用由两部分组成:
前端(使用 HTML 设计)
后端(使用 Flask 开发)
这是我们的 Web 应用的界面:
现在我们已经有一个功能齐全的 Web 应用,可以开始使用 Docker 对其进行容器化。
检查安装是否成功最简单的方法是打开命令提示符并输入“docker”。它应该会打印出帮助菜单。
下载完成后,只需将文件解压到指定位置即可。
创建 Docker 镜像的第一步是创建一个 Dockerfile。Dockerfile 只是一个包含一组指令的文件。本项目使用的 Dockerfile 如下所示:
点击创建资源。
搜索 Container Registry 并点击创建。
选择订阅、资源组和注册表名称(在我们的例子中:pycaret.azurecr.io 是我们的注册表名称)
在 Azure 门户中创建注册表后,第一步是使用命令行构建 Docker 镜像。导航到项目文件夹并执行以下代码。
pycaret.azurecr.io 是你在 Azure 门户上创建资源时获得的注册表名称。
pycaret-insurance 是镜像名称,latest 是标签。这可以是任何你想要的名字。
现在镜像已创建,我们将在将其推送到 Azure Container Registry 之前先在本地运行一个容器并测试应用程序。要在本地运行容器,请执行以下代码:
此命令成功执行后,将返回所创建容器的 ID。
打开 Kitematic,您应该能看到一个正在运行的应用程序。
通过在您的网络浏览器中访问 localhost:5000,您可以看到应用程序正在运行。它应该会打开一个 Web 应用。
完成后,请务必使用 Kitematic 停止该应用程序,否则它将继续占用您计算机上的资源。
在将容器上传到 ACR 之前,最后一个步骤是在本地机器上验证 Azure 凭据。在命令行中执行以下代码来完成:
系统将提示您输入用户名和密码。用户名是您的注册表名称(在本例中,用户名为“pycaret”)。您可以在创建的 Azure Container Registry 资源的访问密钥下找到密码。
既然您已通过 ACR 认证,就可以通过执行以下代码将您创建的容器推送到 ACR:
根据容器的大小,推送命令可能需要一些时间才能将容器传输到云端。
要在 Azure 上创建 Web 应用,请按照以下步骤操作:
点击创建资源。
搜索 Web App 并点击创建。
将您在(上述步骤 9 中)推送的 ACR 镜像链接到您的应用。
成功!!您的应用现在已在 Azure Web Services 上启动并运行。
在下一篇关于部署机器学习管道的教程中,我们将深入探讨如何使用 Google Cloud 和 Microsoft Azure 上的 Kubernetes 服务部署机器学习管道。
截至第一个版本 1.0.0,PyCaret 提供了以下可用的模块。点击下方链接查看文档和 Python 工作示例。
PyCaret Notebook 入门教程
在我们的中,我们演示了如何使用 PyCaret 和 Python 中的 Flask 框架开发机器学习管道并将其部署为 Web 应用。如果您之前没有听说过 PyCaret,请阅读此文以了解更多信息。
在本教程中,我们将使用之前构建和部署的相同机器学习管道和 Flask 应用。这次,我们将演示如何使用以下方式将机器学习管道部署为 Web 应用:.
在本地计算机上构建 Docker 文件并发布到.
在上一篇文章中,我们介绍了模型部署的基础知识以及为什么需要它。如果您想了解更多关于模型部署的信息,阅读我们的上一篇文章。
是一个开源、低代码的 Python 机器学习库,用于训练和部署机器学习管道和模型到生产环境。PyCaret 可以使用 pip 轻松安装。
是一个允许您构建 Web 应用程序的框架。Web 应用程序可以是商业网站、博客、电子商务系统,或一个使用训练好的模型从实时提供的数据生成预测的应用程序。如果您没有安装 Flask,可以使用 pip 来安装。
Docker 是一个旨在通过使用容器来简化应用程序创建、部署和运行的工具。容器用于将应用程序及其所有必要的组件(例如库和其他依赖项)打包在一起,并作为一个整体发布。如果您之前没有使用过 Docker,本教程也涵盖了在 Windows 10 上安装 Docker 的内容。
是一套云服务,用于在全球范围的大型网络上构建、管理和部署应用程序。其他常用于部署 ML 管道的云服务包括, , 和。我们将在未来的教程中介绍其中大部分服务。
如果您之前没有使用过 Microsoft Azure,您可以在此处注册免费帐户。首次注册时,您将在前 30 天获得免费额度。您可以利用该额度按照本教程构建您自己的 Web 应用。
Docker 是一家提供软件(也称为 Docker)的公司,该软件允许用户构建、运行和管理容器。虽然 Docker 的容器是最常见的,但也存在一些不太知名的替代方案,例如和提供容器解决方案。
()
由于我们在上一篇教程中已经涵盖了前两个任务,我们将快速回顾一下,然后重点介绍上面列表中的剩余任务。如果您有兴趣学习更多关于使用 PyCaret 在 Python 中开发机器学习管道以及使用 Flask 框架构建 Web 应用程序的知识,可以阅读我们的.
如果您想查看此 Web 应用的实际运行情况,打开部署在 Heroku 上的 Web 应用(可能需要几分钟才能打开)。
如果您没有跟着操作,没问题。您可以直接 fork 此从 GitHub。如果您不知道如何 fork 仓库,请查看官方 GitHub 教程。此时,您的项目文件夹应该看起来像这样:
您可以在 Mac 和 Windows 上使用 Docker Desktop。根据您的操作系统,您可以从以下链接下载 Docker Desktop:。在本教程中,我们将使用适用于 Windows 的 Docker Desktop。
Kitematic 是一个直观的图形用户界面 (GUI),用于在 Windows 或 Mac 上运行 Docker 容器。您可以从以下链接下载 Kitematic:.
Dockerfile 区分大小写,并且必须与项目文件一起放在项目文件夹中。Dockerfile 没有文件扩展名,可以使用任何编辑器创建。我们使用了来创建它。
如果您没有 Microsoft Azure 帐户或之前没有使用过,您可以免费。首次注册时,您将在前 30 天获得免费额度。您可以利用该额度在 Azure 上构建和部署 Web 应用。注册后,请按照以下步骤操作:
登录.
登录.
注意:本文发布时,来自以下链接的应用将会被移除以限制资源消耗。
**
(不使用 docker)**
关注我们的并订阅我们的频道,了解更多关于 PyCaret 的信息。
我们收到了社区压倒性的支持和反馈。我们正在积极改进 PyCaret,并准备发布下一个版本。PyCaret 1.0.1 将更加强大、更加优秀。如果您想分享您的反馈意见并帮助我们进一步改进,您可以在网站上或在我们的或页面上留言。
PyCaret 是一个开源项目。欢迎大家贡献代码。如果您想贡献,请随时参与。dev-1.0.1 分支接受包含单元测试的拉取请求。
如果您喜欢 PyCaret,请在我们的给我们一个 ⭐️。
Medium