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

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

注:数据统计截至2019年11月底,按募集规模排名

在募资规模TOP30中唯一的专项基金为“台州杭绍台高铁投资管理合伙企业(有限合伙)”。其第一大股东复兴国际持股40.43%,将主要从事铁路领域的投资、建设和营运管理及沿线配套土地的综合开发利用。

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

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

就全球范围看,资本寒冬不仅仅发生在中国。

1999年至2008年,人民币处于萌芽发展期,美元基金“风华正茂”;2009年至2018年,人民币基金蓬勃发展,势头逐渐超过美元基金。2019年,美元基金再度“崛起”,部分人民币基金也加入到募集美元基金的队伍中来。

基金数量腰斩,美元基金崛起

再把目光放在中国市场。

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

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

按基金类型进行划分的话,活跃度最高的是VC基金,但其募资总额较少。市场上的5%的头部基金募走了市场上70%左右的资金。在业内人士看来,未来一段时间内,全球投资总量依旧会继续下降,但LP投资的主要方式将以并购基金为主。

“内蒙古产业转型升级引导基金”将通过财政资金带动社会资本投入,激发社会投资动力与活力,引导社会资本投向支柱产业与战略新兴产业。

2019年募资规模最大的为国家集成电路产业投资基金II期,募集规模为2000亿元。由国家财政部、国开金融、中国烟草、亦庄国投、中国移动、上海国盛、中国电子、中国电科、华芯投资等共同发起设立。

其次,大消费、医疗、金融科技、企业服务依然是机构重点关注的领域,“德弘资本一期”、“大钲资本一期美元基金”、“元生资本美元二期基金”、“光速中国第四旗舰基金”、“华兴新经济基金三期”、“云九资本第四期美元基金”等6支基金均聚焦国内消费升级和产业整合的行业领域,包括消费互联网、医疗健康、科技金融和商业服务等。其中,“华兴新经济基金三期”还将重仓包括新能源、先进制造在内的新兴赛道。

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

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

在未来一段时间内,美元基金会比较充沛,北极光邓锋曾表示,人民币基金将在短期内难改颓势,头部基金以及美元基金则处于“随时看好项目就投”的状态。

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

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

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

全球基金尤其是北美市场,募资速度放缓,2019年Q2共完成244支基金的募集,创下五年来新低。其中,北美市场完成募资的基金为139支,募资总额为680亿美元,亚洲市场完成募集的基金为45支,募资总额为150亿美元。与之同步的是,募资速度有了很大改善,在LP的“严苛”要求下,有将近一半的基金在半年之内完成募集。

关于美元基金崛起的原因,除了全球资本对中国长期发展潜力持看好态度外,融中财经认为,在过去的两年中,港股和美股IPO数量大幅增长,美元基金顺利退出,从而得以在中国市场下注。其次,表现强劲的美国股市使资金回流,导致2019年流向亚洲及中国市场的资金配置比例大幅提高。

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

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

国家军民融合产业投资基金,募资规模为5600000万元,由财政部和国防科工局发起设立,股东包括中电科、中航工业、中国航发、中船、中核等央企。

2015年至2017年,本土GP急剧扩张。人民币基金募集规模从2014年时的不足2000亿元,大幅增长至2017年的10000亿元。一些老牌美元GP也开始进行人民币基金的募集。

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

启动并运行 Google 云平台

当前中国最大的投资主题是产业升级,国家大量的优质资源在向这个主题聚集,包括资本。

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

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

延续2018年国资占据C位的情况,截止到2019年11月底,募资规模TOP30基金中,有22支基金资金来源含有国有属性,政府为主要出资方之一,或者央企、城投公司在内的国有企业活跃其中。

据融中研究院统计,就2019年上半年而言,完成募资的基金以成长及创投型基金居多。VC主要集中于健康医疗、互联网、IT及信息化、人工智能等新兴领域,在前两者中的投资金额占比分别为16.32%和13.09%。PE投资重点投向领域为制造业和汽车行业,投资金额占比分别为15.59%和10.81%。和2018年相比,娱乐传媒行业投资活跃度大幅下降。

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

此外,国资直接投资的基金有北京东富国创投资管理中心(有限合伙)、“华兴新经济基金三期”以及内蒙古产业转型升级引导基金等多只基金。北京东富国创投资管理中心由财政部、全国社保基金投资,华兴新经济基金三期总募资额超65亿元,投资者中除了老股东之外,全国社保基金、银行、保险、市场化母基金等相继加入。内蒙古产业转型升级引导基金出资方包括自治区国资公司,内蒙古电力(集团)有限责任公司等。

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

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

国家军民融合产业投资基金,主要投向军民融合产业中具有广阔技术应用前景的成长期、成熟期高科技企业以及具有核心专利、技术的优质企业。

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

然后我们需要初始化 SDK

投资金额为7300亿,和2018年同期相比下降近30%,在退出上,IPO笔数同比上升70%,将近1500起,成为IPO大年。

你应该得到的输出是:

与此同时,股权投资市场的退出开始进入“丰收”。据统计,2019上半年,一级市场共计831笔股权投资市场退出案例。除了科创板的推出为股权退出增加途径的因素外,受环境的影响及自身业务需求的驱动,投资人更青睐于加快资金回笼的节奏,落袋为安。

除了财政直接出资,央企、城投公司在内的国有企业也非常活跃。比如,长三角协同优势产业基金的投资方有中国太保、上海城投、扬子国投等。义乌和谐锦弘股权投资合伙企业(有限合伙)由四川双马水泥控股,潍坊山高新旧动能转换投资合伙企业(有限合伙)由山东高速集团控股、徐州徐工产业发展基金(有限合伙)中投资者有央企徐工集团等。

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

重点关注大数据、人工智能和区块链领域的基金,仅为“亚洲金融科技并购基金”1支。此外,芯片、新能源汽车、清洁技术相关的新能源方向领域均有1支,募资规模均为百亿级别。

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

“立足投资逻辑的底层基础,产业分阶段,资本分层次,在两者中找到结合点,才能发挥最大效能获得投资收益。”在融中集团董事长朱闪看来,“模式创新与技术创新相辅相成,不可偏废;实业与投资需要双轮趋动,其中一个重要的方面是投资机构通过控股上市公司来为传统经济与企业赋能,以及赋能式并购重组。”

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

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

“国家集成电路产业投资基金II”,投向将围绕国家战略和新兴行业进行投资规划,比如智能汽车、智能电网、人工智能、物联网、5G等。

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

此外,在TOP30中,一些GP由国资担任,比如任国家集成电路产业投资基金II期管理方的华芯投资、任中央企业贫困地区产业投资基金股份有限公司三期管理方的国投创益等。

据统计,截至2019年11月底,一级市场共完成330支基金的募集,和去年同期完成募集的686支的数量相比,数量几近腰斩。

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

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

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

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

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

据调查,有60%的机构在未来一年将重点布局人工智能、医疗健康、高端装备制造、大数据和企业服务四个战略新兴行业。尤其是硬科技、高端制造领域因受国际关系背景及政策支持,备受投资机构关注。

按照募集完成规模排序,2019年基金TOP30中,25支人民币基金共募资41336875万元,9支美元基金共募资18820000万美元(募资规模相同的基金并列入选,入选基金共34只)。2018年同期TOP30中,4支美元基金共募资1931000万美元,人民币基金共募资32158369万元。和2018年相比,今年美元基金募资额上涨874%,人民币基金募资额上涨28%。美元基金呈现崛起之势。

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

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

根据融中财经统计,2019年一级市场募集完成基金TOP30如下:

2019年,过去和未来 

“中央企业贫困地区产业投资基金股份有限公司三期”投向“三区三州”等14个集中连片特困地区,投资一批对地区产业带动作用大、扶贫效果好的龙头企业和IPO项目。同时还将与地方政府合作在贫困地区设立子基金,撬动更多社会资本投入贫困地区。

当喧嚣落下帷幕,冷静便成为黄金时代的开端。

国资依旧占据绝对C位

为了看到运行的 pod,

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

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

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

消费升级和产业整合备受关注

在投资领域方面,2019年募资规模TOP 30中,国字号央企基金共有5支,与2018年募资规模top30基金主要聚焦一带一路、国际联合产业基金相比,今年所投领域主要以国计民生相关的基础设施建设和地方性扶贫建设为主。

2018年,资管新规推出后不久,一级市场“骤冷”,新募基金数量和募资总额和同期相比,分别下降47.2%和19.4%。资本寒冬之下,国资成为GP活下去的救命稻草。二八法则之下,头部机构和国有机构募集走市场上绝大部分资金。

要检查部署运行的状态,

结合宏观经济情况和股权投资数据来看,2019年,一级市场逐步回归理性,进入存量出清和高质量发展阶段。

上海国方母基金管理的“长三角协同优势产业基金”旨在通过对“硬科技”子基金、“完善产业链”子基金、“明星项目”三个方向的投资放大,推动长三角产业链深度融合、产业链优势企业加速发展,促进长三角加快形成面向未来的优势产业集群。

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