原文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 举一个我面试中遇到过的目前最牛的例子,简称M。我一般负责和人吃饭闲聊。这位先生以前在Intel,只大概看过机器学习的一些东西。 我:目前深度学习当中用mapreduce的比较少,因为我们经常要SGD, M:哦我猜一下,所以你们用MPI,然后你要优化Allreduce。 我:。。。对的,然后很多时候网络会有瓶颈, M:恩,因为你们不想上infiniband。我:。。。对的, M:然后你们 网络的 吞吐速度是够的,但是延迟不理想。 我:。。。对的, M:所以你们想要有异步通信,但是同时又要控制 模型不发散。 我:。。。对的。 我:然后我们的模型在部署的时候希望尽量高速,一个方法是 找稀疏解, M:但是你们发现稀疏性不够,目前的运行库需要1-5%的稀疏性才行。 我:。。。对的, M:但是你们估计最多只有30%上下的稀疏性,否则模型质量就下降。 我:对的。但是还是有一些办法,因为部署的时候模型是固定的, M:所以可以做即时编译然后内联参数。 我:。。。对的。
所以面试的加分项就是面试官还没问问题,你就先回答完了。装b结束了,说说我大概想表达的意思吧:机器学习里面了解怎么推公式,怎么解释算法等等,都是停留在技术的层面上。技术牛肯定是有加分的,但是如果要找一位算法/系统架构师,更容易加分的是了解这些技术背后真正解决的问题,在出现 需求的时候能很快解释背后的原理,然后找到解决问题的思路。这也是为啥我在面试的时候不问具体技术细节的缘故 - 开个玩笑,好的架构师只需要写头文件就行。。。
=== 因为评论说没看懂,具体展开说 ===
SGD+MPI+Allreduce:这个问的是机器学习当中SGD算法怎样并行化,以及如何处理并行当中的计算模式,讨论可以见Allreduce (or MPI) vs. Parameter server approaches(https://hunch.net/?p=151364)
网络瓶颈:需要正确估计计算时间和网络通讯之间的比例,保证可以实现pipeline:Pipeline (computing)
Infiniband以及ethernet:问的是大规模系统架构的时候的硬件选择问题,不想上Infiniband是因为成本问题,以及容易被少数vendor lock in的风险。
网络的吞吐和延迟的区别:What is the difference between latency and throughput?
异步通信的时候对于收敛性的影响:可以参见google的async sgd,sync sgd revisited,Eric Xing的latency bounded sgd,以及EASGD等一系列文章的讨论。
模型的稀疏解:这个涉及到对于模型稀疏化能力的正确估计,目前的很多网络要保证不丢准确率的情况下,很难做到传统稀疏矩阵的那种要求。
稀疏矩阵库的计算效率问题:这个如果做过数值优化的话应该是常识,但是五秒钟里面能从上一条跳到这一条然后找到瓶颈还是让我很惊讶的。
即时编译和内联参数:这个比较涉及到数值优化的一系列可能性,以及对于编译器的期望,本身就是一道可以展开说一个钟头的问题。。。比如说,我们在做矩阵乘法的时候是需要pre-pack矩阵的,如果我们知道参数矩阵不会变,我们就可以预先pack,然后如果你可以自己写编译器来利用这些特性的话,你甚至可以没有那个矩阵,直接出一个程序把参数都写在指令里头。一般面试是不会涉及到那么多问题的,其中一两个就够讨论了,M先生属于特别牛的那种。。。
|
知识点解读
深度学习并行计算模式
MPI vs PS
single-machine vs. multi-machine
deterministic vs. nondeterministic
网络瓶颈
计算通信比决定是否要pipeline。当计算通信比接近1:1时,pipeline的效果是比较明显的。
网络硬件选择
Infiniband vs ethernet,Infiniband成本比较高,且有vendor locked in的风险。
网络带宽和延迟
带宽足够,但是延迟高。那么可以加大并行通信的数量来进行优化。比如采用异步通信,充分利用带宽,提高单位时间数据传输量。
异步通信对模型收敛的影响
一般来说,异步通信会使得模型收敛性变差。
模型稀疏解
模型稀疏的好处:
稀疏矩阵库计算效率
矩阵越稀疏,稀疏矩阵库的计算速度越快
即时编译和参数内联
矩阵稀疏度不够,利用模型不变的特性,可以从编译方面对速度进行优化