开源技术框架Pipcook助力智能化发展!
署名2021-01-04

开源技术框架Pipcook助力智能化发展!随着深度学习的发展,智能化已经开始赋能各行各业,前端开源技术作为互联网中离用户最近的一环,也希望借助AI的能力大幅提高效率,减少人力成本,给用户创建更好的体验。因此,前端智能化也被看作是前端开源技术的未来的重要发展方向。  

然而,在这条道路上,有几个问题一直阻碍着智能化的发展:熟悉机器学习的算法工程师对前端的业务没有体感,对前端开源技术所积累的数据和这些数据可能产生的价值也并不了解,很难参与到这个过程中来。传统的前端工程师对机器学习常用的语言,诸如python,c++等并不了解,学习和转换的成本很高。传统的前端工程师对深度学习本身的算法和原理不了解,导致很难直接使用一些现有的机器学习框架(tensorflow,pytorch等)来进行训练。  

为了解决这些问题,推动前端开源技术智能化发展,我们开发了pipcook。pipcook使用对前端友好的JS环境,基于Tensorflow.js框架作为底层算法能力并且针对前端业务场景包装了相应算法,从而让前端工程师可以快速简单的运用起机器学习的能力。此篇文章将主要讨论pipcook是如何和Tensorflow.js结合的,重点探讨一下如何利用tfjs-node的底层模型和计算能力搭建一个高阶机器学习流水线。  

为什么采用TensorFlow.js作为底层算法框架?Tensorflow.js是google在2018年发布的基于js的机器学习框架,google也开源了相关代码。pipcook在数据处理和模型训练中使用tfjs-node作为底层依赖的框架,在Tensorflow.js之上开发pipcook插件并组装成流水线。我们使用Tensorflow.js主要有以下几个原因:  

pipcook定位于服务前端工程师,所以主要采用JS语言开发,所以我们更倾向于采用JS的运算框架,避免桥接其他语言等方式带来的性能损失和出错风险。相对于一些其他的JS的机器学习框架,Tensorflow本身在C++和Python上非常流行,js版本也复用了C++的底层能力和很多算子,支持大量的网络层,激活函数,优化器和其他组件,并且具有良好的性能并提供GPU支持。  

官方提供了tfjs-converter等工具,可以将SavedModel或者Keras等模型转化为JS模型,从而可以复用很多Python成熟的模型。JS在对数学运算这一方面的生态并不成熟,没有一个如同numpy这样的科学计算库,一些类似的库也很难和其他的运算框架无缝结合。而tfjs本身提供了tensor的封装,相当于numpyarary的能力,并且可以直接传入到tfjs模型中进行训练,同时性能非常高效。tfjs提供了DatasetAPI,可以对数据进行抽象,为数据封装了简单高效的接口,同时可以进行批数据处理。DatasetAPI的数据流的方式也可以和pipcook管道的方式高效结合。

(1)使用TensorFlow.js处理数据  

对于机器学习,访问和处理大量数据是一个关键问题。对于一些传统数据量不大的场景,我们可以把数据一次性读入内存进行操作,但是对于深度学习来说,很多时候数据远远超出了内存大小,因此,我们需要按需从数据源逐段访问数据的能力。而tfjs提供的DatasetAPI对这种场景的处理进行了包装。在一个标准的pipcookpipeline中,我们会使用DatasetAPI对数据进行包装和处理。  

(2)训练模型  

TensorFlow.js分成低阶与高阶两组API。低阶的API是由deeplearn.js衍生,包含搭建模型所需要的operator(OP),负责处理一些低阶如线性代数的数据运算等等,来协助我们处理机器学习中的数学运算部分。而高阶的LayersAPI则是用来包装一些常用的机器学习的算法,同时允许我们载入训练好的模型,像是由Keras学习的模型等等。  

(3)部署  

对于一条工业级的机器学习流水线,在训练模型完成之后,还需要有一种方式部署您的模型,从而让模型可以为真实的业务服务,目前pipcook部署的方案主要有以下几种,这些方案都是通过modeldeploy插件完成的。  

(4)和TFX(TensorFlowExtended)的对比  

我们最终的目标是一个成熟的工业级的机器学习pipeline,这个pipeline可以将出色的模型运用于生产环境,实际上为了解决这种需求,google官方基于长期的实践发布了TFX,并且开源了此项目。  

(5)未来展望  

pipcook自开源以来已经有一段的时间,期间,也收到了一些用户的反馈,同时,根据我们的规划,我们还有很多需要做的事情,我们也期望可以借助开源社区的力量,不断完善pipcook,使其可以真正助力前端智能化。与各云服务厂商(阿里云,AWS,Gcloud等)合作,打通pipcook到各个云服务机器学习部署链路。生态完善,建立起pipcook的试玩广场等从而降低用户的上手成本。更好的支持分布式训练。插件丰富,模型完善,支持更多的pipeline。