人工智能




人工智能是是一个全新的技术领域,不管是国家还是企业都在奋力争夺掌控这一领域。据媒体发布的一份报告称,2017年为开发人工智能技术,谷歌的母公司Alphabet投资约300亿美元,百度投资约200亿美元。不仅企业投入了大量的时间、金钱和精力去发展人工智能,中国政府也在大力推进人工智能技术,以便掌控未来科技创新的基石。
滴雨科技不仅支持HADOOP生态中的CAFFEE on spark (deep learning),Spark ML,Mahout,Madlib,而且支持由GOOGLE贡献的Tensorflow, 并把YAHOO开源 Tensorflow on Spark集成到同一平台上。TensorFlowOnSpark在设计时充分考虑了Spark本身的特性和TensorFlow的运行机制,大大保证了两者的兼容性,使得可以通过较少的修改来运行已经存在的TensorFlow程序。在独立的TFOnSpark程序中能够与 SparkSQL、MLlib和其他 Spark 库一起工作处理数据。总的原理是: 在Spark上拉起了一个TF的集群服务。从而使得Spark集群拥有了深度学习和GPU加速的能力,它有以下优点:
轻松迁移所有现有的TensorFlow程序,修改代码小于10行;
支持所有TensorFlow功能:同步/异步训练,模型/数据并行,inferencing和TensorBoard;
Server端到Server端直接通信提升处理速度(RDMA启用时);
允许由Spark分发或由TensorFlow拉取文件系统和其他资源上的数据;
轻松整合现有的数据处理流程和机器学习算法(如MLlib,CaffeOnSpark);
轻松在云或内部部署:CPU & GPU, Ethernet and Infiniband.

TensorFlow 和Spark的核心都是一个数据计算的流式图,Spark面向的是大规模的数据,支持SQL等操作,而TensorFlow主要是面向内存足以装载模型参数的环境,这样可以最大化计算效率。
另外一个趋势是在移动端或是嵌入式终端上加上深度学习,有两种方式:
一是将模型运行在云端服务器上, 向服务器发送请求,接收服务器响应;二是在本地运行模型。一般来说,采用后者的方式,也 就是在 PC 上训练好一个模型,然后将其放在移动端上进行预测。使用本地运行模型原因在于,首先,向服务端请求数据的方式可行性差。移动端的资源(如网络、 CPU、内存资源)是很稀缺的。例如,在网络连接不良或者丢失的情况下,向服务端发送连续的数据的代价就变得非常高昂。其次,运行在本地的实时性更好。但问题是,一个模型大小动辄几百兆,且不说把它安装到移动端需要多少网络资源,就是每次预测时需要的内存资源也是很多的。那么,要在性能相对较弱的移动/嵌入式设备(如没有加速器的 ARM CPU)上高效运行一个 CNN,应该怎么做呢?这就衍生出了很多加速计算的方向,其中重要的两个方向是对内存空间和速度的优化。采用的方式一是精简模型,既可以节省内存空间,也可以加快计算速度;二是加快框架的执行速度,影响框架执行速度主要有两方面的因素,即模型的复杂度和每一步的计算速度。精简模型主要是使用更低的权重精度, 如量化(quantization) 或权重剪枝(weight pruning)。剪枝是指剪小权重的连接,把所有权值连接低于一个阈值的连接从网络里移除。而加速框架的执行速度一般不会影响模型的参数,是试图优化矩阵之间的通用乘法(GEMM)运算,因此会同时影响卷积层(卷积层的计算是先对数据进行 im2col运算,再进行 GEMM 运算)。
TensorFlow Serving可以将训练好的模型导出,从而方便地为生产环境服务,其中的接口是RESTful。 由于滴雨的平台同时支持DOCKER,所以Google基于Docker的kerbernets方案,使TensorFlow可以在容器上轻松部署与运行。

2018中国人工智能发展报告

Tensor FLow on Spark