手把手教你用FlaskDocker和Kubernetes部署Python机器学习模型(附代码)

2019年12月25日 Off By fukachin.com

将机器学习(ML)模型部署到生产环境中的一个常见模式是将这些模型作为 RESTful API 微服务公开,这些微服务从 Docker 容器中托管,例如使用 SciKit Learn 或 Keras 包训练的 ML 模型,这些模型可以提供对新数据的预测。然后,可以将它们部署到云环境中,以处理维护连续可用性所需的所有事情,例如容错、自动缩放、负载平衡和滚动服务更新。

Kubernetes 是一个容器编排平台,旨在解决这些问题。简而言之,它提供了一种机制,用于定义整个基于微服务的应用程序部署拓扑及其维护连续可用性的服务级别要求。对于目标云提供商来说,它可以在本地运行,甚至可以在你的笔记本电脑上运行,而这一切所需的只是运行 Kubernetes 的虚拟机集群,即 Kubernetes 集群。

可以使用端口转发来测试单个容器,而无需将其公开到公共网络。要使用此功能,请打开一个单独的终端并运行。例如,

然后检查容器是否正在使用:

同时,快手全新升级的“磁力引擎”可以帮助本地商家更加流畅地完成社交资产沉淀。臧小洁强调,“磁力引擎以人、内容、流量、创意为四大驱动,能够在平台实现从找到、触达、激发、沉淀的完整营销链路,帮助商家提升流量销量和沉淀留量。简而言之,就是快手能够满足商家长效营销的需求。”

要测试印象是否可以用于创建一个 Docker 容器,该容器的功能与我们预期的一样,

快手广告赋能商家进行变现

Dockerfile 本质上是 Docker 使用的配置文件,它允许你在操作时定义 Docker 容器的内容并配置其操作。此静态数据在未作为容器执行时称为「image」。作为参考,Dockerfile 复制如下:

江西省风调雨顺网络科技有限公司总经理姚建平

在广西期间,访问团将赴南宁李宁体育园,桂林阳朔攀岩基地、阳朔燕莎飞行航空营地、市内体育场馆等地参观交流。(完)

注意,Docker Desktop 和 Minikube 都没有设置一个真实的负载平衡器(如果我们在云平台上提出这个请求,就会发生这种情况)。要拆下负载平衡器,请依次运行以下命令:

要在 Kubernetes 上启动我们的测试模型评分服务,我们将首先在 Kubernetes Pod 中部署容器化服务,它的推出由部署管理,而部署又会创建一个 ReplicaSet,这是通过下面的代码实现的:

我们假设 Docker 在本地运行,客户端登录到 DockerHub 上的一个帐户,并且在这个项目的根目录中有一个打开的终端。要构建 Dockerfile 运行中描述的映像:

你应该得到的输出是:

安装单节点 Kubernetes 集群有两个适合本机开发和测试的选项:通过 Docker 桌面客户端,或者通过 Minikube。

我们将使用两种不同的方法演示 ML 模型部署:使用 Docker 和 Kubernetes 的第一原则方法;然后使用 Seldon Core Kubernetes 本机框架来简化 ML 服务的部署。前者将有助于理解后者,后者构成一个强大的框架,用于部署和监视许多复杂的 ML 模型管道的性能。

谢强表示,体育交流是两岸交流的重要内容,广西拥有丰富的体育旅游资源,台湾是广西重要的旅游客源地,桂台两地体育文化交流密切。2019年,台湾有8个访问团545人次到访广西,进行各类体育文化交流。希望以此访为契机,搭建更多平台,不断深化两地体育交流合作。

我们现在可以看到,我们为印象选择的命名约定与我们的目标图像注册表有内在的联系(需要时,你需要插入自己的帐户 ID)。上传完成后,登录 DockerHub,通过 DockerHub 用户界面确认上传成功。

其中,我们指定了部署单个 Seldon ML 组件所需的最小内存量。耐心点,Minikube 可能需要一段时间才能开始,要先测试该群集是否运行正常。

快手商业华南大区渠道运营负责人张银

12月5日,主题为“快之有效,智在必得”的“2019快手营销中国行”活动在南昌成功举办。现场,快手商业全国渠道总监臧小洁、快手商业华南大区渠道运营负责人张银、江西省风调雨顺网络科技有限公司总经理姚建平等嘉宾围绕本地商家营销痛点展开谈论,分享全新短视频营销玩法与理念,全面助力商家把握趋势、洞察商机,让本地化营销更加精准高效。

目前,具有独特社交属性的快手平台,当之无愧为社交营销的最佳选择。快手平台不仅拥有与生活息息相关且十分多元的内容,平台用户的号召力和分享意愿也十分强烈。因此,对于商家来说,社交氛围浓厚的快手是满足商家营销推广需求,帮助商家实现广告收益最大化的不二之选。

为了看到运行的 pod,

访问团团长,中国台北奥委会顾问、台湾体育大学副校长陈国仪回忆,28年前曾随团到访广西,时至今日,广西的城市建设、经济发展可谓高歌猛进,日新月异,令人叹服,希望通过此次参访,在体育文化建设方面获得有益借鉴。

如果在本地运行(例如,使用 python run api.py 启动 web 服务),我们就可以在 http://localhost:5000/score  访问我们的函数。此函数接受以 JSON 形式发送给它的数据(该数据已自动反序列化为 Python dict,在函数定义中用作请求变量),并返回响应(自动序列化为 JSON)。

现在我们测试我们的新服务器,例如,使用 Docker 桌面:

要与 Kubernetes 集群交互,你需要 kubectl 命令行界面(CLI)工具,该工具需要单独下载。在 Mac 上执行此操作的最简单方法是使用 brew install kubernetes-cli。一旦安装了 kubectl 并启动并运行了 Kubernetes 集群,就可以通过运行它来测试是否能按预期工作。

要检查部署运行的状态,

启动并运行 Google 云平台

持续可用的云部署的配置详细信息对于不同的目标云提供商来说是不一样的——例如,Amazon Web 服务的部署过程和拓扑结构与微软 Azure 不同,后者又与谷歌云平台不同。这构成了每个云提供商需要获取的知识。此外,在本地测试整个部署策略是困难的(有些人会说几乎不可能),它使得网络等问题难以调试。

快手是商家变现的机会之地

座谈交流现场。蒋雪林 摄

构建此自定义映像并要求 Docker 进程运行它(请记住,正在运行的映像是一个「容器」),将在端口 5000 上公开我们的 RESTful ML 模型评分服务,就像它在专用虚拟机上运行一样。有关这些核心概念的更全面的讨论,请参阅 Docker 官方文档。

而如何让每个商家都能更快、更直接、更高效的受益,快手商业华南大区渠道运营负责人张银在专题分享中提到,“快手信息流广告适用于各类品牌、效果广告主,支持多种应用场景和推广需求。作为本地化产品的专属功能,账户主页的位置标签可以支持商家地址导航和一键拨打联系电话。目前,该功能还支持精细化地域定向,未来,该功能将赋予更加强大的营销价值。”此外,快手广告的oCPC智能投放能力还能帮助商家自动优化投放目标,稳定投放效果。

现场,快手商业全国渠道总监臧小洁分享了“短视频社交下的商业机遇”主题演讲,他表示,“在快手,每天有各式各样的消费需求被满足。无论是一单14.8万的二手车,还是一顿45元的美食,用户消费潜力的挖掘和释放,都能促使商家在快手获得直接的收益转化。并且,快手希望解决每一个人在互联网上的孤独感,在平台上可以找到志同道合的人。对于企业来说,快手更是一个机会之地,相比传统的广告形式,短视频营销仍是一个蓝海市场。基于丰富的商业产品和庞大的流量,快手为企业、商家提供了全新的营销玩法。”

该集群的资源远远大于笔记本电脑上 Kubernetes 管理器平台。我们将在 Google 云平台(GCP)上使用 Kubernetes 引擎。

为了让远程 Docker 主机或 Kubernetes 群集能够访问我们创建的映像,我们需要将其发布到映像注册表。所有能提供基于托管 Docker 服务的云计算提供商都将提供私有印象注册,但为了方便起见,我们将使用 DockerHub 的公共印象注册。将我们的新印象推到 DockerHub(我的帐户 ID 是「AlxiiNANIDs」)。

但是,要找到我们需要使用的 GCP 集群的外部 IP 地址:

要将容器作为(负载平衡)服务公开,我们必须创建引用它的 Kubernetes 服务。这是通过以下命令实现的:

在 GCP 上启动容器化 ML 模型评分服务器

然后我们需要初始化 SDK

我们已经从 Docker 容器(即我们的 ML 模型评分服务器正在监听的端口)映射到主机(localhost)上的端口 5000:

我们的测试模型所做的只是返回输入数据,即它是 identity 函数。修改此服务以从磁盘加载 SciKit Learn 模型并将新数据传递给生成预测的「predict」方法只需要几行额外的代码。现在容器已经确认可以使用了,我们可以停止它:

媒体平台的变迁伴随着技术的迭代革新,广告主对内容分发的形式和需求也发生着巨大的改变,信息获取开始迈向个性化和效率化的全新阶段。作为本地商家社交营销的必投媒体,快手短视频拥有更优的营销链路、强大的社交基因、独特的老铁经济和前沿的创新玩法,是当下广大商家的“机会之地”。

在 Google 云平台上配置多节点集群

在我们的示例函数中,我们期望传递给 ML 模型一组特性 X,在我们的示例中,ML 模型将这些相同的特性返回给调用者,即我们选择的 ML 模型是 identity 函数,我们选择它纯粹是为了演示。我们可以很容易地加载一个 pickled SciKit Learn 或 Keras 模型,并将数据传递给 approproate predict 方法,以 JSON 的形式返回特性数据的分数。

其中「AlxiiNANIDs」指的是 DockerHub 帐户的名称,我们将在对图像进行测试之后上传它。

在使用 Google 云平台之前,请注册一个帐户并创建一个专门用于此工作的项目。接下来,确保 GCP SDK 安装在本地计算机上,例如:

这篇博客适合与 GitHub 存储库中的代码一起阅读,其中包含 Python 模块、Docker 配置文件和 Kubernetes 指令,用于演示如何使用 Docker 和 Kubernetes 将简单的 Python ML 模型转换为生产级 RESTful 模型评分(或预测)API 服务。这不是一个全面的指南,但它会帮助你快速启动和运行,熟悉基本概念和模式。

它将打开浏览器并指导你完成必要的身份验证步骤,确保选择创建的项目以及默认区域。

如果你使用的是 Docker 桌面,那么这将自动模拟 http://localhost:5000 上的负载平衡器。查找 Minikube 在何处公开其模拟负载平衡器运行:

伴随着快手“磁力引擎”的推动,南昌本地商家收获了更多增长的机会和可能。“2019快手营销中国行”还将继续前行,未来,更多城市的品牌和商家将在快手商业生态中收获营销增长。

快手商业全国渠道总监臧小洁

或者直接从 GCP 下载安装映像。注意,如果你还没有安装 Kubectl,那么现在就需要安装,这可以使用 GCP SDK 完成:

对于商家而言,处在红利期的快手短视频营销使精准获客、长效营销成为了可能。江西省风调雨顺网络科技有限公司总经理姚建平在现场表示,“借助快手平台公私域流量打通,我们将帮助南昌本地的各行各业,在快手更简单地实现获客变现。”姚建平强调,未来将把全部重心投入快手,与快手共生、共赢。

这是一个 Python 模块,它使用 Flask 框架定义一个 web 服务(app),带有一个函数(score),该函数在响应对特定 URL(或「route」)的 HTTP 请求时执行,这要归功于 app.route 函数的封装。相关代码复制如下,以供参考:

这在很大程度上与我们在本地运行测试服务时所做的相同-依次运行以下命令: