使用Docker部署机器学习模型-第1部分

本文的翻译是为基础和高级机器学习课程的开始而准备的。







. OTUS Machine Learning: . , -, — (Senior Data Scientist Oura) , .



作为数据科学家,我们的主要重点是处理数据以及开发和改进机器学习模型。有一种观点认为,数据处理是整个项目中最耗时的阶段,并且模型的准确性决定了信息产品的成功。但是,该行业现在正处于“从发现时代到实现时代”的过渡阶段(人工智能领域的超级大国:中国,硅谷和该领域的新世界秩序由李开复决定。)。现在情况正在扩大,关注点正在从构建模型转变为将模型作为服务提供给用户,从模型的性能转向其商业价值。此处最著名的例子是Netflix,尽管承诺从这些引擎获得显着的性能提升,但由于工程成本的原因,从未使用过其100万美元算法的获奖模型-有线





从理解到现实(Strata Data会议的幻灯片-Kubeflow解释了:Kubernetes上的便携式机器学习)该



模型实现非常重要,并且信息产品现在可以视为软件产品,因为它们具有相似的项目结构,管理和生命周期。因此,我们有权使用软件开发领域中的所有已知技术在生产中部署机器学习模型。



容器化是一种广泛用于在云平台和本地服务器上部署软件产品的方法。基本上,我们正在谈论将代码和依赖项包装在称为容器的盒子中。以下是在软件开发上下文中容器的定义:



Docker站点上,



容器是软件的标准单元,可打包代码及其所有依赖项,以便应用程序可以在不同的计算环境中快速可靠地运行。



Docker是一个可以帮助您加快开发,容器化以及将我们的机器学习模型部署到其他环境的平台。在本系列文章中,我将向您展示如何存储模型,将其用作API端点,容器化ML应用程序以及如何在Docker引擎上运行它。



问题一“为什么要使用Docker?”



在我们开始之前,如果您没有Docker ID,则需要注册一个Docker ID,然后使用该ID在您的计算机上下载并安装Docker。



当我第一次在银行工作时,我被分配了一个涉及数据处理的项目,并且第一个MVP(最低可行产品)必须在一个月内交付。听起来压力很大,但是作为一个团队,我们在所有主要产品的开发中都使用了敏捷方法,因此,此MVP的主要目标是检验有关产品实用性和有效性的假设(有关敏捷方法的更多信息,请参见Eric Ries“精益创业”)。我的经理希望我将模型部署在他的笔记本电脑上,即运行它并将其用于预测。



如果您想像了准备经理的便携式计算机以运行我的项目所需的所有步骤,那么您可能会遇到许多问题,例如:



  • 由于他使用Macbook和ThinkPad,该模型需要在什么操作系统上运行?我当然可以问他这个问题,但是假设在他生命中的那一刻,我的老板很讨厌,不想让我知道这些信息。(这里的想法是让您意识到操作系统依赖性问题,而我的老板是一个非常好的人。)
  • 第二个问题:“他安装了Python吗?” 如果是这样,哪个版本2或3?哪一个:2.6、2.7或3.7?
  • 所需的软件包如scikit-learn,pandas和numpy呢?它具有与计算机上相同的版本吗?


考虑到所有这些问题,这就是我要使用他的计算机使模型在其上运行的原因。



  1. 安装Python。
  2. 安装所有软件包。
  3. 设置环境变量。
  4. 将代码转移到汽车上。
  5. 使用所需的参数运行代码。


所有这些步骤都需要付出很大的努力,并且在不同的环境中运行代码时存在不兼容的风险。



因此,如果您已经安装并运行了Docker,则可以打开一个终端并运行以下命令:



docker run --rm -p 5000:5000 datascienceexplorer/classifier


几分钟后,您应该在终端中看到类似的内容:



* Serving Flask app "main" (lazy loading)
* Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)


现在打开您喜欢的浏览器并转到以下地址:



http://localhost:5000/apidocs/


单击API上的预测,然后单击右侧的“试用”按钮,界面将如下所示:





后端的API Swagger页面



记得您使用的标准Iris Flowers数据集吗?这个小应用程序将帮助您基于有关分类模型的一些测量信息来预测花的类型。实际上,您已经在使用机器学习模型作为服务,并且您安装的一切都只是Docker,而我不需要在您的机器上安装Python或任何软件包。



这就是Docker的优势。它可以帮助我解决依赖关系问题,以便我可以在不同的环境(或本例中的计算机)之间快速部署代码。



DevOps数据科学



现在,希望我能激励您继续阅读,如果您只想跳过这些部分而直接进入代码,那没关系,因为这意味着您想使用Docker容器化您的机器学习模型并将其公开为服务。但是,到目前为止,我们将不得不停下来一点,把关于机器学习和Docker的所有材料放在一边,以考虑数据科学中的DevOps以及为什么在那里需要它。



什么是DevOps?





DevOps来自Wikipedia,是将软件开发和信息技术服务相结合的实践的集合,其目的是缩短系统开发生命周期并确保持续交付高质量的软件。
软件开发人员的目标是及时交付具有所有必需功能的代码,同时具有易用性,可靠性,可伸缩性,网络部分,防火墙,基础结构等。通常仍然存在运营问题。由于最终目标和可能的关键绩效指标不同,这些团队通常不在同一屋檐下相处。因此,DevOps专家可以充当联络员,帮助这些团队一起工作,甚至承担双方的责任,从而最终结果是一个团队,从头到尾领导开发。毕竟,您不能仅仅将计算机提供给客户端,因为代码可以在客户端上正常工作。

但是有了Jupyter笔记本,我很开心!
数据科学家也有类似的故事,因为同样,您不能只是拿起笔记本电脑给Jupyter Notebook使用,而是让客户端使用它。我们需要一种使用该模型的方法,以便它可以随时随地为大量用户提供服务,并以最少的停机时间(可用性,可靠性,可扩展性)来提升模型。



因此,公司正在寻找具有DevOps技能的数据科学家,他们可以在生产中部署和部署机器学习模型并为公司提供业务价值,而不仅仅是证明概念并专注于提高模型准确性。这样的人被称为独角兽。



部署机器学习模型的方法有很多,但是Docker是功能强大的工具,可为您提供所需的灵活性,同时保持代码的健壮性和封装性。当然,我们不会要求客户安装Docker并打开一个终端来运行它。但是,当您开始处理实际项目时,必须将模型部署到云平台或本地服务器,容器化的这一阶段最终将成为基础。



存储训练后的模型



回到大学后,我们了解到数据科学项目包含六个阶段,如下图所示。如果将模型自动化并部署到生产中是我们的最终目标,那么我们如何将模型“部署”到部署阶段?





数据科学项目的六个阶段



您想到的最简单的方法是从笔记本复制所有内容,将其粘贴到.py文件中并运行。但是,每次我们需要进行预测时,我们都将运行此文件,并在相同的数据上再次训练模型。如果此方法某种程度上适用于具有少量训练数据集的简单模型,则对于具有大量训练数据的复杂模型(考虑您训练ANN或CNN模型将花费多长时间)无效。这意味着,当用户提交模型预测请求时,他将需要等待几分钟到几小时才能获得结果,因为完成模型训练阶段将花费大量时间。



训练后如何立即存储模型?



在大多数情况下,Python中的机器学习模型将在代码执行期间作为Python对象存储在内存中,然后在程序完成后删除。如果我们可以在训练模型后立即将这个对象保存在硬盘上,那么下次我们需要进行预测时,我们可以将完成的模型简单地加载到内存中,而无需经历初始化和训练阶段。在计算机科学中,将对象转换为字节流进行存储的过程称为序列化。在Python中,可以使用名为pickle的包轻松完成此操作,该包具有开箱即用的本地Python支持。 Python开发人员也将使用pickle序列化对象过程称为“ pickle” ...



在Jupyter笔记本,你可以轻松地保存模型对象(在我的情况“KNN”)向PKL文件,它位于同一目录中的代码:



import pickle

with open('./model.pkl', 'wb') as model_pkl:
  pickle.dump(knn, model_pkl)


将模型保存到当前目录



我的笔记本,我建议从此处获取,以便将来我们能得到类似的结果。另外,您可以使用自己的模型,但请确保您具有所有必需的程序包以及正确的模型输入。



完成第一步后,您已经保存了经过训练的模型。进一步,我们将重用该模型进行预测,但本文第二部分将对此进行更多介绍。






学习更多关于:








阅读更多






All Articles