Home Blogs Readings Notes Jupyter Seafile

构建一个企业级深度学习平台

3 Jun 2018

通常一个公司内的算法工程师达到一定规模后,就需要一个统一的环境来提供一系列的模型训练及上线。 整体来说一个完整的深度学习平台包含两大块,一个就是训练,另一个是上线。那么有么有一套环境能够 较好的支持模型训练和上线呢?在目前探索下,jupyterhub+k8s是一个比较理想的方案。

统一环境其实核心问题主要涉及两个方面,一个是单用户的环境的自定义和隔离,另一是用户资源的隔离。 jupyterhub已经较好的支撑了多用户统一调用的功能,再结合jupyter的notebook这个本来就很好的 支撑深度学习算法开发环境的工具,所以支持单用户开发环境是没有问题的。那么对于计算资源来说,因为 企业内往往都是集群使用,那么对集群资源的抽象最好的就是分布式系统了。可是传统的资源抽象基本都是 基于java进程的container的,比如说yarn。所以容器化平台kubernetes最合适不过了。

那么接下来就简单熟悉下这样的一个平台和架构吧。本文会从以下三个方面来说:

基本概念

为了更好的构建整个平台,首先需要的就是弄清楚这些框架工具是什么,有哪些核心组件,需要时怎么定制,以及有哪些局限等。

jupyter,notebook,jupyterhub

jupyter对于构建深度学习和python开发来说算是比较方便的交互开发环境。 这三者到底是什么关系,各自的定位是什么呢?在一开始接触的时候,真的是一头雾水,因为它不像spark,sklearn这些框架,一个名字对应的就是整个系统本身。一图胜千言,先来一张架构图,

上图可以看出整个jupyter体系架构主要分了四层:kernel,api,application,server。其中需要弄清的关键点是:

所以简单来说一个多用户开发环境是以上几个的结合。

kubernetes

kubernetes是google开源的一个容器化平台。主要的概念来说有这么几个:

其架构整体如下:

简单来说k8s集群的节点有2个角色,一个是master,其他是资源节点。master节点上主要是apiserver和scheduler还有些controller。

资源节点上都是apiserver和kubelet交互,服务访问则是kube-proxy进行处理的。具体来说,要部署一个应用到k8s上一般要经过以下几个步骤:

熟悉的最好方法是自己跟着教程走一遍.这个nodejs服务的教程还算是比较全,值得一看。

深度学习平台

前面说完了jupyter和k8s,接下来需要进入正题,一个平台到底要有些什么?

一个深度学习平台主要目标是给建模人员提供一个比较完善高效的开发和上线环境。结合当前主流的平台,一个较好的平台的话主要是自由度和标准化的协调。标准化越高,整个建模流程和上线就自动化程度越高,但自由度的丧失其实一定程度上是限制了建模人员对算法的掌控和自定义。所以一个比较好的平台应该根据当前产品的主要用户群体进行相应的调整侧重点。

总体来说一个应该包含以下几个方面:

如何构建平台

所有镜像已经在github准备好了。可以直接使用。

基础镜像

训练环境

训练环境的构建目标是提供标准的基础环境以及可以自由配置的辅助环境。

模型服务上线

模型上线的话主要解决的问题是不同训练框架产出的模型怎么在线上服务的问题。那这个之所以成为问题的原因是:

第二点是所有线上服务都有的。但是第一点却是模型服务特有的。模型服务自身的特点具体来说有这几个方面:

所以模型服务需要解决的问题的可行方案也就瞄准上面的问题来说:

小结

总算写完了。其实很多点还没有写到。后面再补充吧。

-->
Fork me on GitHub