深入学习普及后受到了很多关注。大多数刚接触到深度学习的学生都集中在如何调整参数/数据/网络结构以及如何达到预期的准确率/召回率/准确率等方面。
但是,在深度学习模型的整个应用过程中,仍然有一个重要的环节,即模型是在线部署的模型的价值只有在线部署时才能实现。
,所以我们今天不讨论如何培训模型,我们将集中讨论如何在线部署培训后的模型。
模型生命周期模型生命周期
模型部署在线是将模型封装到在线服务中,分配相应的资源,在服务器上运行在线服务,实时接收请求,并返回预测结果打包在线服务有很多方法。您可以选择一些成熟的框架,如http/节俭/gRPC,并选择一个适合您的项目。我们专注于如何部署它。
型号部署v 0.1-裸机部署< br>
,顾名思义,就是直接在物理服务器上安装和配置相应的环境,并将工程代码/型号文件直接部署到物理服务器上运行。它看起来非常简单和直接,但在实际操作中有许多问题。实际的服务器可能有2个甚至4个图形处理器,因此一个服务器通常需要部署多个模型应用程序,在同一台服务器上部署多个应用程序时遇到的最常见的问题是环境问题。< br>
环境问题的复杂性表现在以下几个方面:依赖管理很复杂:由于各种原因,在线服务器的操作系统版本可能不一致,如CentOS6/7、Debian8/9,甚至内核版本也可能有所不同,使得依赖包管理非常复杂;模型部署复杂环境/依赖关系
模型部署v 0.2-容器技术< br>
为了将开发和操作从复杂环境管理中解放出来,我们引入了容器技术Container是一种轻量级、可移植、独立的软件打包技术,它使应用程序几乎可以在任何地方以相同的方式运行。
简单地说,容器由两部分组成:< br>
容器化环境隔离
但是容器技术不能解决所有问题,其中之一是资源管理和调度问题。由于服务器需要部署多个应用程序,每个应用程序需要分配一个GPU。这需要我们手动维护分配记录。例如,< br>
应用程序a部署在服务器0上,应用程序b部署在服务器0/服务器1上,应用程序b分配在服务器0/服务器1上。更严重的是,由于没有应用程序资源的隔离,以这种方式部署的应用程序将会存在资源竞争问题。例如,一个账套应用程序运行在一台服务器上。此时,由于一个程序错误,应用程序将耗尽中央处理器资源。此时,同一台服务器上的客户/客户应用程序也会受到影响。型号部署了v0.3-Kubernetes
。为了解决资源调度问题,我们引入了KubernetesKubernetes是一个开源系统,用于集装箱化应用程序的自动部署、扩展和管理。库本内特斯有一个“资源”的概念。例如,CPU和内存都是资源类型。我们可以通过库本内特斯来管理运行中的容器。例如:
版本:v1我们为正在运行的nginx容器申请了64M内存和1-核心中央处理器,并将容器限制为128 Mi内存和2如果nginx程序试图申请超过128M的内存,它将被kubernetes系统kill收回,以确保它不会影响其他应用程序。在nvidia提供的k8s设备插件的帮助下,nvidia GPU也被抽象成一种资源类型。此时,我们可以像申请CPU/内存一样申请GPU资源。
apiVersion: v1In提交申请后,Kubernetes会自动分配相应的资源并进行调度。开发和运营人员的视角从“xx应用部署在一个服务中”转变为“这个kubenetes集群的资源使用”,大大简化了运营和运营管理工作。< br>
Kubernetes有自己的仪表板组件。该监控方案可由prometheus+grafana实施。可以实现基本的操作和监控管理,但毕竟它是一个开源版本。有些功能无法满足我们的操作和维护开发需求。经过一些定制化的开发,我们开发了一个基于Kubernetes的一站式管理平台,将开发和运营整合为一体。
项目资源摘要信息项目资源摘要信息
摘要
由于易盾业务的快速发展,网易安全部门在短短三年多时间内将易盾商业化,网易易易盾拥有26万多名开发者和数千客户这也使得这项技术,从最早的裸机手动部署到半自动容器部署,再到全自动kubernetes部署。
的每一项改进都伴随着效率的提高,为开发和运营人员释放了大量的能量。靠边站,运输人员可以将更多精力投入到值得关注的产品功能上。同时,易盾的机器学习模式从完成培训到在线应用只需几分钟,从而及时帮助一些有迫切需求的客户
参考