亚马逊Alex Smola:为什么你的机器学习代码运行速度慢
机器之心原创
作者:高静宜
2017 年 3 月 27 日,亚马逊云服务(AWS)机器学习总监 Alex Smola 到北京大学招贤纳士,并呈现了一场题为《为什么你的机器学习代码运行速度慢(Why your machine learning code is slow)》的精彩演讲。读者可点击阅读原文下载完整 PDF。
Alex Smola 曾于 1996 年获得慕尼黑工业大学物理学硕士学位,1998 年获得柏林工业大学计算机科学博士学位。在 1999 年到 2007 年期间,先后于澳大利亚国立大学及 NICTA 研究中心担任研究小组组长。2008 年,他加入雅虎,后在 2012 年加入谷歌。他是加利福尼亚大学伯克利分校的兼职教授,目前担任卡内基梅隆大学机器学习教授。2015 年,他联合创立了 Marianas 实验室。2016 年,Alex 加入亚马逊,目前担任亚马逊 AWS 机器学习总监一职。迄今为止共发表超过 200 篇论文并参与编写 5 本学术专著。
这次 Alex 中国行的主要目的之一就是代表亚马逊 AWS 人工智能团队招贤纳士并分享最前沿科技信息。3 月 28 日上午 10:00,Alex 在北京大学理科教学楼进行了一场针对现代硬件的算法设计的题为《为什么你的机器学习代码运行速度慢(Why your machine learning code is slow)》的学术演讲。这次演讲围绕多核、多机器和 GPU 的可扩展数据分析方法,从基础开始讲起,讲述可扩展的机器学习并非想象中那么困难。具体内容包括分布式推荐系统、广告计算和深度学习。
在介绍来意之后,Alex 为大家展示了此次演讲的三个主题。
第一部分:存储器
包括快速缓冲存储器、随机存取存储器、固态硬盘、硬盘、网络
第二部分:计算
包括向量化、多核
第三部分:MxNet
包括语言、并行化、亚马逊 AMI 和云形成模板
第一部分:存储器
目前存在很多存储器类型,不同类型的存储器容量、存取时间不尽相同,可以实现不同的目的。
从下面的表格可以看出,从存储器中每一次读取数据都会消耗时间,代码中无用的内容,可能会导致读取数据时间的消耗。
这里,Alex 介绍了在推荐系统中的用例:
可以看出,在这种情况下,内存消耗较大、运行时间较长。
然而,更好的工程代码是可以大大缩短运行时间的,怎样做到的呢?
协同过滤带来的影响:
这里,有几个关键概念:
●分层用户的评价
●在 Cache 中存储出现频繁的 Datatable
●避免 socket 之间的伪共享
Alex 还介绍了另外一个关于支持向量机优化算法的用例
这里存在技术难点,一是存在初始下降的可能性导致无法记录;二是 dual as-cent 是准确的从而导致目标不变。
第二部分:计算
在这一部分,Alex 首先解释了向量化如何提升运行速度。
之后,介绍了关于 SimHash 算法用例(Simhash 是用来网页去重最常用的 hash 方法,速度很快)
然后,介绍了无锁多核心
预估广告系统中的点击问题
逻辑回归
随机梯度下降
第三部分:MxNet
命令式和说明式编程
语言支持
后端和自动并行
这一部分一开始,Alex 就提出了一个问题:为什么我们还需要另外一种深度网络工具?这是出于对资源效率、速度、简单性的考虑。
节省&资源效率
用小内存的廉价 GPU 编程网络
速度
用机器和 GPU 进行线性延展;
在单个机器上也有高效率
简单性
混合命令式和说明式的代码
关于代码的简洁以及效率
在演讲的过程中,Alex 不止一次提起代码简洁化的重要性,并对命令式和声明式编程做出解析。
命令式编程的优点:
简单灵活;
利用语言固有的特征(loop、condition、debugger)
命令式编程的缺点:
难以优化
说明式编程的优点:
更多的优化机会;
跨不同的语言;
说明式编程的缺点:
不灵活;
下图对命令式编程与说明式编程做深度学习进行了对比。
而 MXNet 将这些特点结合在了一起。
而且混合的 API 能够进行更快的延展:
不同图之间运行时间的转换有输入所决定;
对序列建模和图大小的重塑有帮助;
使用 Python 中的命令式代码,10 行额外的 Python 代码;
多种语言、多种工具包
在这里,Alex Smola 提到他们从用户那里所得到的信息:
编程语言:
Python 很好,但我更喜欢 R/Julia/Matlab 等;
我想要 Scala 与 Spark 管道一起工作;
我需要 C++接口在嵌入式系统上运行;
我喜欢在用户浏览器上运行 Javascript;
框架:
我使用 Torch 7 年了;
我所有的代码都在 Caffe 中;
我喜欢 Keras;
我用 TensorFlow 开始的深度学习;
之前我只使用过 Numpy,我该如何开始呢?
针对亚马逊从用户那里获得的建议,MXNet 对编程语言、框架的需求进行了集成:带有多种编程语言;把 Caffe、Torch、Numpy 都带入了 MXNet。
在计算机视觉领域,Caffe 有普遍的应用,而在 MXNet 中有 Caffe Operators。
对科学计算和深度学习而言,Torch 是流行的 Lua 框架。
效率以及并行化
Alex Smola 表示写并行程序非常痛苦。每个前端-后端更新涉及到 O(num_layer),通常在 100—1000 之间的张量计算和通信。
以下是进行自动并行:
数据并行:
读取数据分隔;
拉动参数;
计算梯度;
推进梯度;
更新参数;
分布式实验:
谷歌 Inception V3;
从 1-47 增加机器量;
如果使用 10 台以上机器,MXNet 要比 TensorFlow 快 2 倍。
AMI 和云形成模板
亚马逊机器图像(AMI)
深度学习框架
云形成模板
用于深度学习 AMI
面向数据科学家与开发者的工具;
建立深度学习系统需要时间与技巧
AWS CloudFormation 组件如下:
演讲的最后,Alex 对本次演讲的内容做出了小结,并再一次表示欢迎同学们加入亚马逊 AWS 人工智能团队(招募邮箱为 [email protected])