亚马逊Alex Smola:为什么你的机器学习代码运行速度慢

2017 年 3 月 27 日,亚马逊云服务(AWS)机器学习总监 Alex Smola 到北京大学招贤纳士,并呈现了一场题为《为什么你的机器学习代码运行速度慢(Why your machine learning code is slow)》的精彩演讲,点此查阅ppt


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 为大家展示了此次演讲的三个主题。


1.png


第一部分:存储器


  •  包括快速缓冲存储器、随机存取存储器、固态硬盘、硬盘、网络


第二部分:计算


  •  包括向量化、多核


第三部分:MxNet


  •  包括语言、并行化、亚马逊 AMI 和云形成模板


2.png


第一部分:存储器

 

3.png


目前存在很多存储器类型,不同类型的存储器容量、存取时间不尽相同,可以实现不同的目的。

 

4.png


从下面的表格可以看出,从存储器中每一次读取数据都会消耗时间,代码中无用的内容,可能会导致读取数据时间的消耗。

 

5.png


这里,Alex 介绍了在推荐系统中的用例:

 

6.png




可以看出,在这种情况下,内存消耗较大、运行时间较长。


然而,更好的工程代码是可以大大缩短运行时间的,怎样做到的呢?

 

7.png


协同过滤带来的影响:

 

8.png


这里,有几个关键概念:


分层用户的评价

在 Cache 中存储出现频繁的 Datatable

避免 socket 之间的伪共享

 

10.png


11.png


12.png


13.png


14.png


Alex 还介绍了另外一个关于支持向量机优化算法的用例

 

15.png


16.png


17.png


这里存在技术难点,一是存在初始下降的可能性导致无法记录;二是 dual as-cent 是准确的从而导致目标不变。

 

 

18.png


19.png


20.png


第二部分:计算

 

21.png


在这一部分,Alex 首先解释了向量化如何提升运行速度。

 

22.png



之后,介绍了关于 SimHash 算法用例(Simhash 是用来网页去重最常用的 hash 方法,速度很快)

 

23.png


24.png


25.png


26.png


28.png


然后,介绍了无锁多核心

 

29.png


预估广告系统中的点击问题

 

30.png


逻辑回归

 

31.png


随机梯度下降

 

32.png


第三部分:MxNet

 

33.png


  • 命令式和说明式编程

  • 语言支持

  • 后端和自动并行


这一部分一开始,Alex 就提出了一个问题:为什么我们还需要另外一种深度网络工具?这是出于对资源效率、速度、简单性的考虑。

 

34.png


节省&资源效率


  • 用小内存的廉价 GPU 编程网络


速度


  • 用机器和 GPU 进行线性延展;

  • 在单个机器上也有高效率


简单性


  • 混合命令式和说明式的代码


关于代码的简洁以及效率

 

35.png


在演讲的过程中,Alex 不止一次提起代码简洁化的重要性,并对命令式和声明式编程做出解析。


36.png

 

命令式编程的优点:


  • 简单灵活;

  • 利用语言固有的特征(loop、condition、debugger)


命令式编程的缺点:


  • 难以优化


37.png


说明式编程的优点:


  • 更多的优化机会;

  • 跨不同的语言;


说明式编程的缺点:


  • 不灵活;


下图对命令式编程与说明式编程做深度学习进行了对比。

 

38.png


而 MXNet 将这些特点结合在了一起。

 

39.png


而且混合的 API 能够进行更快的延展:

 

  • 不同图之间运行时间的转换有输入所决定;

  • 对序列建模和图大小的重塑有帮助;

  • 使用 Python 中的命令式代码,10 行额外的 Python 代码;


41.png

 

多种语言、多种工具包

 

42.png


在这里,Alex Smola 提到他们从用户那里所得到的信息:


43.png


编程语言:


  • Python 很好,但我更喜欢 R/Julia/Matlab 等;

  • 我想要 Scala 与 Spark 管道一起工作;

  • 我需要 C++接口在嵌入式系统上运行;

  • 我喜欢在用户浏览器上运行 Javascript;


框架:


  • 我使用 Torch 7 年了;

  • 我所有的代码都在 Caffe 中;

  • 我喜欢 Keras;

  • 我用 TensorFlow 开始的深度学习;

  • 之前我只使用过 Numpy,我该如何开始呢?


针对亚马逊从用户那里获得的建议,MXNet 对编程语言、框架的需求进行了集成:带有多种编程语言;把 Caffe、Torch、Numpy 都带入了 MXNet。

 

44.png


45.png


在计算机视觉领域,Caffe 有普遍的应用,而在 MXNet 中有 Caffe Operators。

 

46.png


对科学计算和深度学习而言,Torch 是流行的 Lua 框架。


47.png


效率以及并行化

 

48.png


Alex Smola 表示写并行程序非常痛苦。每个前端-后端更新涉及到 O(num_layer),通常在 100—1000 之间的张量计算和通信。


49.png

 

以下是进行自动并行:

 

50.png

51.png


数据并行:


  • 读取数据分隔;

  • 拉动参数;

  • 计算梯度;

  • 推进梯度;

  • 更新参数;


52.png


分布式实验:


  • 谷歌 Inception V3;

  • 从 1-47 增加机器量;

  • 如果使用 10 台以上机器,MXNet 要比 TensorFlow 快 2 倍。


53.png


54.png


55.png


AMI 和云形成模板


56.png


  • 亚马逊机器图像(AMI)

  • 深度学习框架

  • 云形成模板

 

57.png


用于深度学习 AMI


  • 面向数据科学家与开发者的工具;

  • 建立深度学习系统需要时间与技巧

 

58.png


59.png


AWS CloudFormation 组件如下:


60.png

 

演讲的最后,Alex 对本次演讲的内容做出了小结,并再一次表示欢迎同学们加入亚马逊 AWS 人工智能团队(招募邮箱为 aws-ai-event-recruiting@amazon.com)  


61.png

 

入门机器学习亚马逊AWS产业演讲
返回顶部