深度学习和并行计算在计算视觉中的思考

2015年3月20日 10:14 阅读 2875
【导语】这是格灵深瞳Open Day当天高性能运算小组的讨论中,三位嘉宾的精彩观点,我们的帅哥“攻城狮”姚成祥将当天讨论的精彩内容集合整合,以飨读者。如有您的观点分享,欢迎在线留言。


正文分割线


在摩尔定律的预测下,半导体行业仿佛一条奔腾不息的河流持续高速地发展着,同时不断地滋养着整个IT产业的演变和进化。在很多人看来,现今的计算机已经拥有了非常强大的运算能力,在很多计算方面已经远超人类。


但是,虽然计算机CPU的处理速度已经非常快,对于计算视觉系统来说,却仍然显得不足。复杂应用对计算性能的需求就像手里的现金,花着花着就没了,永远都不够用。


计算视觉的算法大部分是计算密集和存储密集的,时间复杂度高。在算法产品化过程中,性能和功耗是很多“美妙”算法必须翻越的一座大山。


解决高性能运算的方法最直接的就是使用计算机集群,譬如云计算。然而,利用云计算解决视觉感知系统的运算问题耗费的带宽成本,功耗成本和计算成本都太大,远程运算给系统带来的风险也很大。我们需要构建尺寸小,价格便宜,同时运算密度极高的计算设备。


一般地,算法的精度和计算复杂度是正相关的。对于计算能力有限的设备,为了加速计算过程,就只能在计算能力和算法精度上进行平衡了。而CPU+GPU的高性能异构方案正在改变计算视觉领域,让更多“美妙”的算法走入实际应用。


这次高性能分组话题,围绕“深度学习和并行计算”进行展开,三位嘉宾和各位同行就此分享了彼此的观点。


贾海鹏:CUDA并行编程复杂,相比CPU单线程,主要有三点:第一,CUDA程序开发难,一方面要根据串行算法设计并行化算法,这要求有很好的算法基础,另一方面还要了解GPU底层硬件以更好地利用CUDA模型,这还要求一些硬件架构基础;第二,CUDA程序调试难,相比单线程开发,CUDA多线程调试难在问题定位,有时需要从几百上千的线程里找到出错的线程;第三,CUDA程序优化难,一个CUDA程序的开发需要经过多次APOD迭代优化,有时需要改动程序架构,有时需要改改指令顺序,里面的trick很多。


谷俊丽:AMD一直在积极提供CPU+GPU解决方案,与NVIDIA不同的是,AMD主要关注在并行程序的可移植性上,包括服务器设备、移动设备。近来,主要工作包括在AMD FirePro产品上使用OpenCL加速多种深度学习模型,目前不考虑精度的情况下,达到了同等Tesla产品的加速比。


贾海鹏:计算所也在做一些计算可移植性的研究,比如针对矩阵运算的source 2 source的并行代码生成,这些工作在实现OpenBlas的过程中已经积累了一些。


李士刚:在分布式深度学习模型的开发中,我认为有必要开发一种Active的通信方式,sever端发送消息会直接触发slave端的进程。同时,并行程序设计人员和深度学习算法设计人员需要共同合作,实现更高效的深度学习分布式并行处理。


在接下来的时间里,大家还对FPGA,ASIC加速深度学习等内容进行了讨论,关于硬件加速Deep Learning这个说法大多数人都表示赞同。在场的一位中科院的研究生提到计算所研发的寒武纪1号神经网络计算机,通过高效的分块处理和访存优化,能够高效率处理任意规模、任意深度的神经网络,以不到传统处理器1/10的面积和功耗达到了100倍以上的神经网络处理速度,性能功耗比提升了1000倍。




NVIDIA在Deep Learning上不断更新运算库和驱动包,将Deep Learning作为GTC 2015的重要议题。作为CUDA的拥趸,希望装备NVLINK和3D stacked memory技术的GPU能早点面市,为高性能计算提供更强大的能力。




嘉宾介绍


谷俊丽,AMD中国研究院高级研究员,2012年于清华大学-UIUC大学获得博士学位,主要从事异构计算平台、人工智能与Big Data相关应用研究。在计算机和高性能计算领域的国际顶级会议HPCA、MICRO等发表多篇论文。


李士刚,博士,中科院计算所助理研究员,长期从事大规模并行、异构加速等并行计算相关研究。2011至2013年在UIUC计算机系进行学术交流,进行MPI相关研究工作。


贾海鹏,毕业于中国海洋大学,获博士学位,目前在中国科学院计算技术研究所从事博士后研究工作,主要研究方向为异构计算平台的并行编程方法和优化技术研究。


我是分割线


小编和几位技术的小伙伴们加班加点地将此次Open  Day活动中各位嘉宾分享的内容进行了整理,更多干货请关注我们的微信公众号“格灵深瞳”!

格灵深瞳是一家行业领先的人工智能上市公司,提供面向智慧金融、城市管理、商业零售、轨交运维、体育健康、元宇宙等领域的人工智能产品及解决方案。