1
引言
因为机缘巧合,本人进入算法领域时,主要的方向是算法与系统的交叉领域。往通俗了说,就是研究Deep Learning模型的性能优化,更多的是从系统的角度去优化算法的性能。偶尔,也会承担一些建模调参的工作。
现在的算法框架无论是TensorFlow还是PyTorch,或多或少都有性能问题。毕竟做一个通用的高性能的计算框架,这个目标实在太难达到了,总会遇到corner case。这就需要算法与系统交叉领域的工程师们去做优化和落地了。
目前这个领域不但没有内卷,还处于蓬勃发展期,对即将入行的同学也是一个弯道超车的机会。
既然是交叉领域,肯定是算法能力和系统技术栈都需要掌握。你也不要急功近利直接找算法框架性能优化的书,因为目前也不存在什么优质的《TensorFlow源码解析》或者《PyTorch技术内幕》之类的资料,市面上关于算法框架的书基本都是官方文档的直接翻译,和垃圾差不多,所以别浪费时间和金钱了,要打牢基础。
今天我推荐两本书,它们是我入门时认真读过的资料。只熟悉算法或系统其中一个技术栈的同学,请直接关注自己不熟悉的部分即可。
2
CUDA入门
算法同学请看过来,这本书可以让你了解一下GPU的并行架构,书名是《大规模并行处理器编程实战(第2版)》。如果你比较抵触一般CUDA的学习资料,那么我强烈推荐这本书,读起来一点都不难。
在Deep Learning这个领域中,CUDA是不可能不看的,所以请不要停留在“调库”这个阶段。
作为一个技术书,本书我读得很快,大约耗时两周多。虽然CUDA更新了好几个版本,本书还在讲CUDA 5的东西。但是直到目前为止,CUDA编程的基本范式没有太大的变化,只有增加了新的特性。
要压榨昂贵硬件的性能,就一定要对硬件的体系结构足够了解。阅读本书时,相比于熟悉编程的语法,更重要的是理解GPU硬件的体系结构。比如global memory,shared memory,sm,thread,block,grid,warp等。
另外,本书也不用全部阅读,学习前十章即可,足够让你了解编程模式和硬件架构。从第十一章(《高级RMI重构》)开始有案例研究,也有一些高级知识介绍,但对于Deep Learning的领域需求来看,并不十分重要。
本书还配有公开课,直接Google搜索“Heterogeneous Parallel Programming”即可。
3
Deep Learning入门
只熟悉系统的同学请看过来,你们工程能力学习CUDA肯定没有问题,但容易在算法上抓瞎。
Deep Learning入门时,下面这一本就够了,书名就是《深度学习》,网上有电子版。大部分做算法可能都收藏了本书。它的作者是Good Fellow,以及深度学习三巨头Yoshua Bengio。
同样这本书也不用全读,至少Section III的Research部分不用看。
虽然内容比较基础,但它确实是“书”这种材料中比较前沿的知识了。后续若想再深入学习,就要紧跟业务和paper了。读其他的书可能只能让你大量阅读重复的知识。
类似深度学习实战之类的教程我也不太推荐,因为它们或多或少都与某种具体的深度学习框架耦合,容易变成“学习”某种框架的API。与其这样,我们不如去看GitHub或者网上的实例。
4
后续
上述两本资料是我快速入门时认真啃过的两样东西。入门作为一个阶段,切忌停留太久,而应该在掌握之后迅速投入到实战之中。实战包括做具体的业务建模,或者搭建具体的项目工程,用写代码的方式让自己形成体感。
再之后,就应该会涉及到性能优化了,免不了阅读框架源码,改写框架结构等。
关于如何切入到框架源码的阅读中,快速梳理调用栈,我会另写一篇文章详细介绍我的方法。
讲技术,也谈风月,更关注程序员的生活状况,欢迎联系二少投稿你感兴趣的话题。