1. 首页
  2. 科技部落

深度学习工具dl-application

摘要

本文介绍了拍拍贷自研的深度学习工具dl-application。它可以快速地创建深度学习算法所依赖的环境,并能一键将模型变成服务。从此,算法研究者可以更加存粹地研究算法。

深度学习(deep learning)是近年来在学界和工业界都非常热门的研究领域,它在自然语言处理、计算机视觉、语音分析、知识图谱等诸多领域都取得了不错的成果,甚至在某些任务上击败了人类。同时,随着GPU, FPGA等硬件的普及以及tensorflow、mxnet等深度学习框架不断完善,应用深度学习的门槛也在不断降低。但是在拍拍贷应用深度学习的过程中,我们发现,对于算法研究人员而言,直接使用这些框架依然存在以下痛点:

 

  1. 环境依赖复杂。由于对计算性能的要求,深度学习算法实现不仅仅依赖于python库,还会对显卡驱动、CUDA并行计算库和CUDNN神经网络优化库的版本有一定要求。当我们测试基于不同深度学习框架实现的算法时,往往需要分别安装相应的环境依赖配置;而当多人同时使用一台服务器时,更需要花不少精力沟通协调可能会出现的依赖冲突。
  2. 可迁移性差。由于GPU服务器是稀缺资源,我们往往会需要将我们的代码迁移到空闲的服务器上运行,但由于需要在新服务器上配置我们代码所依赖的环境,所以迁移的效率会比较低。
  3. 模型服务开发效率低。当我们的深度学习模型开发完毕,往往需要将效果展示给需求方看;在效果验收通过之后,也将模型嵌入到需求方的流程之中。这个时候,将模型转换成一个api服务就是一个很好的选择,但这也对算法研究人员的工程能力提出了一定的考验。

 

针对以上痛点,我们开发了dl-application,一个深度学习环境和应用的部署工具,可以自动地解决深度学习算法研发部署过程中的工程问题,从而让算法研究人员能够更加关注算法本身。

 

为了解决深度学习应用的环境依赖问题,我们引入了docker技术。docker技术可以让开发者把他们的应用和依赖环境打包到一个轻量级、可移植的容器里。这里我们将操作系统、python版本、requirement等信息以配置文件的形式暴露给使用者,并可以通过命令行的方式启动notebook、terminal等不同类型的交互终端,以满足开发、优化、调试等需求。使用者可以个性化定制一个开发环境,且不影响服务器上的其他人;同时,该环境也是可以通过docker镜像在不同的服务器间无缝迁移,极大地提高了GPU资源的利用率。

深度学习工具dl-application

图1. 深度学习开发架构图。可以看到使用者只需要通过dl-application就可以在个人电脑,各类服务器进行开发,而不需要关注docker等的技术实现细节

为了降低开发服务的工作量,我们设计了一套自动将推理函数转换为服务方法。由于大部分的深度学习应用的开发语言是python,并且往往是无状态服务,因此我们选择了Flask作为服务框架,可以比较自由地定制所需要的功能模块。首先,我们会和使用者约定好推理函数的参数;之后,利用python的monkey patch的机制,在启动服务时引入用户自定义的推理函数。这样,使用者只要在配置文件里指定好推理函数的位置,就可以自动通过框架生成相应的服务。

 

目前该项目可以帮助使用者在服务器或者云服务上方便地部署服务,之后希望能够接入容器集群管理系统,比如k8s等;从而进一步地降低工程维护成本,实现”serverless”的架构。