说说深度学习模型的部署

深度学习已证明自己在图像识别、语音识别、自然语言处理等领域吊打传统机器学习方法,网上也有很多深度学习的资料和教程,目前来看还是以讲解「流程」偏多,比如做目标检测,主要是按收集数据、标注、训练、测试这几个步骤来讲。

而我们的最终目的是将训练的模型应用到现有系统中,那么深度学习模型如何部署呢?有下面几个问题需要考虑:

硬件

神经网络再次火起来除了因为学习算法的突破、大数据的出现,就是硬件性能的发展和成本的下降了。十几年前的硬件条件下,建立多层多节点的神经网络,其时间复杂度是无法接受的。

所以,生产环境的硬件配置是首先需要考虑的,是部署在客户端机器上,还是部署在服务器上,甚或嵌入式设备上。

调用问题

比如你用TensorFlow训练了一个自己的模型,如何应用到C++或Java的生产系统中呢?网上很多教程都是用Python来进行训练的,这就需要解决Python和C++或Java之间的调用问题。

这里有篇文章,大家可以参考:

http://www.myoak.info/post/62/

文中介绍了如何利用Deeplearning4j系列工具将深度学习应用到Java生成环境中,文中提到:使用深度学习,最理想的方案是,不管你拥有大数据或小数据,都应该可以很方便的部署。数据科学家在企业里部署深度学习时,总会遇到的问题有:

1 以数据为质心的模式

2 系统整合问题

3 训练模型

4 运用模型

这里我们重点说一下C++应用程序如何调用深度学习的模型。以C++调用TensorFlow的模型为例,我了解到有三种实现方式。

1、编译TensorFlow的C++版本的动态链接库

我一共尝试了4次,花了一周时间,每次编译要花一天时间(或一晚),最后也没编成功,仍然报error。有这方面成功经验的小伙伴,欢迎来指导哇。

这个尝试叫做「从源代码安装TensorFlow」,对于此官方是这么说的:我们不支持在Windows上构建TensorFlow。不过,如果您无论如何想要尝试在Windows上构建TensorFlow,可使用以下两种方法中的任何一种:

1 Windows上的Bazel

2 TensorFlow CMake构建

2、使用OpenCV的DNN模型调用

我曾做过一个使用OpenCV的DNN模块加载Caffe模型的联系,代码见这个链接:

https://docs.opencv.org/3.3.0/d5/de7/tutorial_dnn_googlenet.html

然而,OpenCV的DNN模块支持加载的模型还不够多,特别是我们自己训练的模型,很多时候都会加载失败,因此OpenCV+TensorFlow或OpenCV+Caffe的路线也不是那么容易走的。

3、单纯的C++和Python之间的调用

这种方法有个前提,就是客户端机器需要安装Python和TensorFlow环境,这个就有比较大的局限性了。

关于在C++系统中使用深度学习,目前还在尝试编译Caffe的C++库、TensorFlow Serving这两种方式。

性能问题

生成环境一般都有明确的性能指标,比如每秒钟期望的请求数量、处理一张图片的时间等等,除了对时间有要求外,还可能对空间有要求,比如你希望将模型视为整个应用程序的一部分,将模型加载到应用程序中。服务端的应用程序还好,如果是客户端想加载深度学习模型,恐怕无法忍受动辄几百M、上G的大小。

所以,深度学习模型是否可以应用到低端的机器环境中,需要进一步探索。而在服务端,一是可以利用并行计算达到时间指标,再者服务器端就不存在空间的限制了。

Kubernetes Docker是一种在服务器端部署模型的工具,大家可以了解一下:

https://yeasy.gitbooks.io/docker_practice/kubernetes/

12周,坚持周更之16/12,连接开发者,连接迭代成长者

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910G224BR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券