天气变冷,桂花飘香,又一个秋天来了。上海的冬天阴冷潮湿,夏季酷热难耐,春季虽好但很短,唯有秋季不仅风轻云淡、景色怡人,而且可以慢慢品味,从9月开始,一般持续到12月底左右。
这个周末因为有中秋假期,所以休息三天。三天里,第一天参加了机器学习大会,早上七点多出门,晚上十点多才回到家,足足在会场呆了一天,really a long day。第二天还是参加了机器学习大会,也是从早上到晚上,one more long day ^-^。
多年来,参加的技术会议难以计数,而这一次我特别投入,几乎全程在场,很多年没有这样了。那么这一次为什么如此认真呢?
第一个原因是想学习。首先想听听别人怎么想某某方向,怎么看待某某问题。对于有些问题,虽然自己也理解,也明白,但是还是想听听别人怎么说。另外,当然也想学到一些新的东西,弥补认识的不足。古人说,君子戒慎乎其所不睹,恐惧乎其所不闻。对于创业初期的我来说,这句话真的不过头,因为认识的不足就可能导致方向的错误。
我听的第一场演讲是Michael Wong的,他是C++语言方面的专家,去年C++大会在北京见过他,给我很深的印象。而且他目前在做的事情和我做的方向有相同之处。他在语言层为AI加速,我在更低的推理引擎和硬件接口层面做加速。
因为做的大方向一致,所以Michael的很多分享都说到我的心坎上。比如,在下面这张表中,Michael非常好的归纳了运行推理过程的几种不同做法,第一种是直接在Tensorflow/Caffe这些同时支持训练和推理的框架下运行,这种方法最简单,但是速度也是最慢的。第二种是导出给专门的推理引擎,比如OpenCV的DNN便属于此类,因为是专门为推理写的,所以速度一般要快一倍左右。第三种方法是编译优化,Michael所在的Codeplay公司便是做这个的,取名为SYCL(发音与SQL很像)。第四种方法是重写推理引擎,这是我(Xedge.ai)目前在做的。四种方法从上到下,复杂度不断提高,技术难度也在加大。
在第一天返回的路上,我的伙伴也夸赞Michael的归纳,我们一边走,一边大声叫好。再附上一张Michael讲解这张表时的照片吧。
在Michael的分享中,还有一个内容让我拍案叫绝。那就是下面这张照片里的“星空图”。说“星空图”是比喻,因为看起来有点像。Michael自己也承认这张图太复杂了(too comlecated graph)。但我还是一眼就看懂了,因为我冥冥之中就希望看到这样一幅图,用来印证我的推测。
先解释一下这个神秘的图吧。首先左侧的摩天轮是在AMD GPU上的测试结果,右侧是在ARM Mali GPU,也就是移动设备上的测试结果。外圈的白色数字是描述不同的模型,与一条从圆心的射线对应,射线的长度代表使用GPU加速这个模型的效果,白色圆形代表基准情况(1X),因此射线越长代表加速效果越好。明白了这些后,就可以得出很多宝贵的推理了。
- 对于相同硬件配置,不同模型的加速效果是不一样的,对于有些模型很好,对于有些模型,使用GPU更差了。
- 对于相同模型,在不同硬件上的加速效果也是不一样的,有的在AMD这样的大型GPU上好,有的在ARM这样的小规模GPU上好,原因当然也好解释,因为不同GPU的内存拓扑结构和缓存结构都不同。
根据上面的结论可以进一步推出,很难找到一个适合所有模型和适合所有硬件的加速方案。或者说,这不是一个可以完全解决的问题。而是一个永远没有止境的问题。这样的方向才适合老雷啊,如果一下子就解决掉了,那还有什么意思呢?换句话来说,老雷关心的是永恒的问题,比如Bug/Debug,比如安全漏洞和安全,比如调优......还有么?哈哈,这些已经够忙活到五十岁了,其它的现在不能说。
Michael Wong的演讲在我意犹未尽中结束了,提问环节我问了一个问题,问他如何看待NPU的影响,他的回答也让我非常满意,他很坦诚地说,NPU会努力做现在软件优化所做的,但是NPU的灵活性和可移植性会是弱项,根据他20多年的工程经验,他认为灵活性和可移植性也是非常重要的。
第一天下午,给我很多感触的另一个演讲是袁老师的《大规模深度学习引擎的最优结构》。袁老师也在AI方向上创业,与我扎根边缘和终端不同,袁老师深耕的是云端,或者说是大规模分布式训练。在演讲中,袁老师分享了他的很多工作成果和感悟。
袁老师演讲的风格也是我很喜欢的,先讲背景,回顾硬件方面的创新。他先介绍了Nvida的DGX-2系统——史上最强大的GPU工作站。16片V100 GPU高速互连,算力高达2-petaFLOPS。
在介绍DGX-2时,袁老师特别强调了Nvlink——Nvidia的杀手锏,GPU互联技术。Nvlink可以在GPU之间提供高达超过百GB(B是字节)的数据带宽。并行计算中,多核之间的互连始终是个关键的技术,我在我后面的演讲中,也特别介绍了NPU中的互连挑战。
除了DGX-2,袁老师还介绍了IBM的Power9。
大约去年这个时候吧,我在北航边上的致真大厦里,和FaceOS的伙伴们,一起近距离观察过Power9的服务器,当时印象很深,跑了几个测试,感觉很强大,当然噪声也非常大,我第二次去的时候,就搬走了。Power9的特色除了有蓝色巨人的独特处理器外,还有很牛的互连技术。根据wikipedia的数据,多项指标都与Nvlink相当。
(https://en.wikipedia.org/wiki/NVLink)
在介绍了硬件背景后,袁老师转变方向:DGX-2虽好,但是太贵,也缺少弹性,话锋转向分布式训练框架。
在切换到软件话题时,袁老师说出了我心中的一个强音。硬件再好,“也需要更好的软件”。是啊,没有好的软件,硬件的使用率会很低,白白浪费。
(插入此辐插图多次都失败,不知为何,可能是AI识别引擎发现敏感内容,AI的误判何其多也,也罢)
接下来,袁老师很详细地介绍了名为OneFlow的分布式训练系统。介绍了其中的关键技术,包括跨机器通信,以及任务分割,去中心化,降低任务依赖性等等。特别给我印象深的还有袁老师的公司名,一流科技。真是好名字,加油!
第一天中,我还听了其它几个演讲,包括来自香港大学的Michael Kuo所讲的医学影像识别,以及格灵深瞳的自动训练系统。为了避免流水账风格,不详细介绍了
第二天上午的重头是Michael Jordan的keynote。乔丹教授因为培养了吴恩达这样的AI领域风云人物而著名。
乔丹教授的演讲分两个部分,第一个部分是机器学习的经典方法。他先回顾了机器学习的大致发展历程,从上世纪90年代开始,每10年一个间隔。
因为深度学习太著名了,很多人甚至忽略了机器学习的其它方法。回想我当年翻译《机器学习》那本经典教材时,神经网络只是其中的一个部分,虽然是比较重要的部分,但是篇幅只是全书的十分之一吧。
乔丹教授在介绍机器学习的多重决策方法时,举了一个生动的例子:花生米与过敏的关系,很生动。
主题演讲的第二个部分是UCB的分布式训练系统:Ray。
下面的照片是乔丹教授在解说Ray系统的架构图。
下午的演讲中,给我印象很深刻的有顾骧(读乡)老师的《工业互联网中的深度学习》,他介绍了如何使用深度学习技术来辅助检修飞机发动机。
去年曾经在GE上海site的一楼展厅近距离看过飞机发动机,当时就感觉很震撼。这一次,在顾骧老师的演讲中,进一步大开眼界,看到了飞机发动机的内部叶轮。
“君子戒慎乎其所不睹”,那么睹前所未睹是非常开心的。
看到正常的发动机叶片已经大开眼界,但还没完,还有出了问题的叶片照片。
上图右侧两张是有问题的。
这次两天全程参与的另一个原因是,我也有分享任务。我讲的是边缘端优化,其实很大篇幅介绍了TPU的内部设计、指令集和软件栈,并且花较大篇幅讨论了TPU中的多核互联问题。
很多人都听说过TPU,但是TPU的内部设计却不清楚。或者说,关于TPU/NPU的内部设计,今天还是很敏感的技术话题。
AI的大爆发,为处理器的大规模并行提供了一个强需求。这将把处理器的并行度提到一个新的高度。今天,CPU的核数是1或者两位数,GPU的数是三位数,TPU内的核是五位数(65535个)。多核带来的直接挑战是互连问题。为了说明这个挑战,我特别回顾了CPU领域的QuickPath和XEON Skylake引入的环形互连总线。
软件方面,TPU使用的是复杂指令集,CISC。这个选择背后蕴藏的深层道理是CISC指令集需要复杂的编译器,但是宁可在编译阶段多花时间,让编译器寻找最佳的并行方案编码到指令中,目的是执行时速度快,硬件简单一下。
这意味着NPU的编译器将是有挑战的一个新领域。这也是xedge.ai在努力的一个方向。
总的来说,NPU不是银弹。NPU是为了提高速度,这要求硬件结构相对固定,加速效果才好,但这样就会损失通用性。而增加通用性后,就会增加软件层的复杂度,增大额外开销,降低速度。这几个因素交织在一起,相互制约,我把这个制约关系简称为NPU的齿轮定律。
在古老的文化经典《荀子》中,开篇第一句话就是学不可以已。意思是学习应该永不停歇。套用大会上的一句话,AI时代,机器每天都在学习,何况人类呢?
总结一下吧,两天的会议收获还是很大的,一是遇到同行而产生共鸣的快乐,自古便有高山流水觅知音的佳话,在互联网时代,行业细分的厉害,遇到一个有共同语言的同行,思想产生共鸣是很难的一件事。另外,学习到了新知识,老友相聚,认识新朋友也是很快乐的。
***********************************************************
正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生。
欢迎关注格友公众号