猿代码科技高性能计算讲座原文——OpenBLAS创始人无保留分享 我们如何成为一个高性能计算的工程师,或者这种性能优化的这一部分的软件工程师。 我其实想了一下,这一部分的入门的基础其实没那么难。 就是更主要的话,我还是在于兴趣和自驱力,它其实是因为是一个偏向于这种底层的开发嘛,所以说他可能会希望你有一个比较好的C和C++的这种底层的基础。 然后另外一部分的话,我希望就数学稍微好一些,因为里边有一些,就是算法开发会涉及到一些基础的一些的数学东西,但一般都不难,就是大家学过了一些基础的矩阵计算的话,都知道是什么东西,或者大学学过线性代数就基本上就可以了,不会超过这些东西相关的事情。 然后呢,第二个的话,对于这个计算机的这个专业来说的话,可能就是在这个计算机组成原理上要有了解,因为这个工作是一个横跨软件和硬件,或者横跨应用和硬件的一部分的工作,所以说这里边儿的话,对这个计算机组成原理要是有了解,有认识的,而不是说我们要去设计一个计算机或设计一个芯片,但是我们要对这个架构的基础大概有什么含义,这些要有认识。然后就当然如果你要又学过并行计算,那更好了,因为这里边很多这个并行化上市,或者异构计算,什么扩大啊,GPU编程啊,这些这些都是很重要的加分项。 然后第三点其实是就像我刚才提过尝试,更重要的就是要对这个事情有兴趣,就像我最开始说的就是要有初心,如果说你本身对这个事情是感兴趣,有初心的话。那那选择是没问题,如果说你对这个事情觉得没什么意思,因为这个高清计算的事情,因为是偏底层吧,就是它是做framework和library为主这一部分软件或一些并行应用软件,它可能不像你去做这种。 呃,算法应用这事情,比如说一些AI应用,我去相对比较简单的就是就是可能有很多现成的这一部分的框架搭好了,你去做新的算法开发,然后呢,然后可以做一些比较炫酷的视觉的,比如说效果,然后展示度还是比较炫的,但是高性能计算的很多领域,其实它的展示度。 相对没那么炫,它其实很枯燥的,他你最后评价的时候,啥是在评价那些性能图,比如说时间哪个高哪个低,然后你的曲线是什么样的,你的这个可扩展性,我在单机上是多快算完,我可能在机群上是多快算完,然后我的这个呃,准确度怎么样,它其实很多时候是相对。 呃,枯燥一些的,它不是那种可以做的很可能很炫酷的那种效果那种的话可能是相对弱一些,这个可能是。这个和这个就是和上层应用开发一个明显的不同地方,还有一个事情是,就是在这个领域下,其实呃,文章所做的要求其实是不一样的,就是说。 这个领域的会其实会比那些,呃,就是有很多领域的,就是那种顶级会相对要少一些,或者是每年录取的文章也不多,这个实际上是呃,他这背后的原因也是因为可能是整体上从事的人相对比较少,所以说这个呃,这个竞争程度呢,肯定是不低的,而且因为这个算作这种底层,或者做这种system的这个工作,你到最后的这些,不管你是毕业呀,或者说是你去。这个就是上到博士啊,或者是你去做一个科研项目的话,你最低最低你得去做到一个原型系统。 对吧,你得去做到一个以原型系统为展示的程度,而不是说我去这个呃贯几篇论文就结束,这肯定是不行的,所以说基本上所以说对这个系统的能力的要求会更高一些,这上是这个领域的一些的不同吧,这个也是,呃就是说会和这个其他的做这个,呃就是上层算法和上层应用开发一个典型的差别,这如果各位对这个事情感还感兴趣,那那那这个高清计算肯定会是一个比较好的方向,就对做这种系统这种事情感兴趣。 我们这次其实这个培训的这个体系的一个的考虑,因为我们觉得这个确实这个领域的培养在之前确实是非常少的,可能只是有限的几个研究所或者是一些高校,可能少量的,也就是少量的硕士生,博士生,可能少量的优秀本本科生才有机会去做这个领域,对而我们其实实际上去合作了一个这种的培训的课程体系,我们希望能去做一个入门吧,或者说是一个入门,当然这个领域很多还是比较高深的,我我们其实只是做一个基础的一个入门的一个培训体系,比如说首先在这次的话,我们其实做了一个CPU的这个,它的软件的性能优化工程师的一个体系,这里边的话,我们可能会是以Linux的实验环境为主。然后我们可能是描写。 像了这种国产的飞腾的按摩服务器,然后的话,这里边有一些基础入门的这些,比如说Linux常用命令编译啊什么这些的使用,后面的话我们会有这些,比如说算法流程分析啊,程序性能分析啊,然后包括一些类似典型的奔驰mark h pcg这些方面的学习的分析啊,包括相应的调试啊,然后这个后面会介绍一些基础的优化的方法,然后也包括在单核上如何做这种向量化,然后做这个呃,比如说这种open MP的这种的这个并行编程,最后会涉及到一些矩阵计算,矩阵矩阵性量程这部分的性能优化等等,这可能也是我们希望通过一个呃,时间不长的一个的。 呃,培训体系能让有兴趣的人能做一个入门吧,就当然他可能你去做到高手,可能这个还差得远,或者说这个人你已经有一定基础的话,上这个课可能会稍微觉得可能是简单了一些,但是对于这个,呃,他没对这个领域没有去做过,但是又很感兴趣的话,把这个课作为一个这种。 入门的这个培训的话,其实是一个不错的选择,这个实是我们在设计这个整个课程主题啊,然后这包括这个内容上上稍微做的这个事情,这上是我们在这个这培训上事情,然后之后的这个就业化,就像我之前。提到来说整体的背景还是因为。 这个整个的产业在升级,所以说需要这个计算去做更多的事情,所以说计算需求在上升,由此带动了整个高性能计算人才需求的上升,这实际上是我们大的背景,然后这个整目前这个领域的就业方向其实是几种类型吧,一种就是芯片公司了,因为芯片公司就是要为了适配它的这些的芯片,需要很多的这种计算类的软件站的人才,然后现在的芯片大家也知道,也比较火热嘛,随便。可能就有几十家,这范围之后的话,还有这些的算法的企业,然后包括云计算公司等等做的事情的话,基本上都是以这种框架呀,数据库啊,算子性能优化,应用部署开办为主。 然后从我个人的角度,或者说从我个人理解来说,呃,我觉得高性能计算领域是一个长期可发展的领域,是非常值得作为一个长期的职业道路在,为什么呢,一个呢是。这个领域其实是还挺难的,就是不是就是或者说他做往深了做,它实际上是可以往深做很多的东西。这也这个的好处是代表着呃,个人的经验是可累积的,然后你在这领域做了几年,几十年或者更长的时间的话,你你这部分的这个个人技术能力,个人经验的这价值提高度是很好,是可累积,这上是一个好的事情,因为大家想长期做一个行业的话,肯定是要它,要它有足够的厚度,这样的话你可能。十年后你能做的事情肯定会要比那些嗯七入行的人要做的好的多,这就代表了你的价值嘛,这个可能是你的个人累积起动来,第二个的话可能会大家考虑要考虑,要想的是就是。 我的工作会不会有可能会被一些机器替代,比如说现在什么rpa很火对吧,比如说现在什么无代码编程很火或者什么之类的这些事情,就是说呃,计算机辅助或者说AI辅助的这些的,或者其他这种辅助,这些事情必然会是一个的趋势,它它很有可能会替代一些。重复的劳动就是一些低技术门槛的劳动,而目前看到这个高层计算领域可能靠呃,这个。自动化完全替代,或者是所谓算法完全替代,AI完全替代的话,目前看可能性还是比较低的,因为这个领域的知识要求还比较广,很难有一个,呃。就是非常智能的东西,把这个把我们全部干掉,这个估计是比较困难,所以说从这个两个的角度来说,我觉得这是一个适合给这种对底层技术有爱好的长期从事的一个职业方向,这是我的这个的个人的观点啦。 然后后面的话就是说,比如说举一个具体例子,我一直觉得我们高层计算去做什么,其实你可以就是在做底层framework,或者做这个框架的人来说,很多时候我们其实是在做这种硬件和应用的桥梁。比如说你可以想象成一边是一个这种上层应用,比如说深度神经网络,或者什么解方程,或者什么其他这些的应用,呃,另外一边呢,可能是面向了不同的硬件,可能有CPU,有GPU,有NPNPFPJ,或者国产的重核,或者说大规模的病毒计算机,或者超算等等,你直接把这个应用放到这个硬件上,它很多时候是跑不起来的。 就很很多时候可能只有一些CPU可能能跑到,就举一个简单的例子,呃,大家可能都写过排序算法,对吧,如如果说一个排序算法可能只是一个非常简单的冒泡排序。我对这个数据量非常小的情况下,我的速度还很快,对吧,但是如果我数据量很大的时候。我的这部分的速度必然就会下降了,那我要怎么做呢?有我一个选择是我换更快的硬件,对吧,我我随着我这个处理器的主频提高,我的内存访问速度提高,我的软件的这部分,你如果把这个想象成我的应用调用了一个排序的一个的库或框架来说。我的软件不需要做更改,我只是随着硬件的变化,我就能获得一个比较高性能的,这个从应用上来说,我就解决了这个排序的事情。对吧,这个是理想的情况,这很多时候都是在这个,可能20几年前,当时摩尔单核摩尔定律还生效的时候,很多时候是这么做的,因为我硬件每每18个月就会性能翻番吧,单核的性能翻番。 但是现在从零几年以后看起来,你的硬件的单核性能,就是主频速度其实是没有变化,如果说你的代码就是你的框架,或者说你的库,不做针对性的,就是并行化也好,或者想更好的算法,或者用它的向量化,或者用易购也好。你其实是用不了这些硬件的性能的,因为这硬件所用的这些手段已经不是局限局限在这个主频了,主频上已经实际上是没什么提升,它都是用了这种体架构的状态。如果是以高性能计算,或者是以这种高性能计算机来说,高性能计算机的这个峰值性能。它是。每十年会提高1000倍。每十年提高一个1000倍,这其实是远远超过了摩尔定律的那个增长的倍数,所以它其实里边实际上除了摩尔定律这种或者工艺制成变化,它其实里边有很多的,呃,用了更大规模的机器,用了这种体系结构的变化,在你每十年你的硬件提高1000倍的话,如果我的软件没有变化,我的软件是。 我的这一部分的应用其实是没办法去跟上我硬件提升的步伐的,就是说虽然你硬件上提高了硬件背,但我软件上发挥的效率很低,这上就是问题所在。而高性能计算工程师。大部分时间就是要弥补这个差距,就是做这个framework和library的这部分的加速和优化,能让应能让上层的应用能追赶上我的这个硬件提高的这一部分步伐,这个在之前的传统的这些科学计算领域其实很多时候就做到了,比如典型的可能以稠密巨人计算为主,可能这些其实就很多都已经做得很好了。然后更具体来说,比如说对于现在比较火的这些AI,我可能又要提AI,其实这个报告举了很多AI例子,就是说很多在这些时候,他可能遇到的任务,就可能就会和你的这个,呃,这个AI的相关,或者说这个部署相关。 比如说我要。呃,部署一个DNN的模型去做推理,就是,呃,算法工程师可能已经是在这个GPU的机群上,我已经训练了一个模型,我现在要用这个模型,我要去做ER,我要用推理部手。那我们要怎么做?这边其实对于这一部分的一个优化的目标,实际上就是说在保证模型正确的前提上,我的速度越快越好,这上是你要想做的最终优化目标,这为什么这样一个呢?是意味着。我尝试可以用同样的硬件来支持更多的负载。比如说你可能之前做呃,比如说你的这个推理可能呃每秒可能是呃十十。1000个吧,1000个图像我随便加驶,可能别人的话可能做到2000个,这样的话我是不是就可以雇更少的机器,或者租用更少的云服务器来去达到类似的效果呢? 是吧,这样的话可以节省了硬件成本,然后另外一些说我达到类似的效果,我是不是可以不用GPU,对吧,我是不是可以只用CPU或者其他用一些其他的高性价比的硬件达到。类似的效果,或者是你这个经济账能算得过来,因为在云厂商里边,你你带GPU的这个服务器和不带GPU的这个服务器,它的这个价格还是差挺远的,对吧,这实上,这实际上,这实际上是举了一个服务器上的一个云端的做例子,在嵌入式端的话,做嵌入式的influence,其实也是类似,因为有芯片有很多种吧,有这种。 带NPU的,不带NPU的可能是便宜的贵的等等这些,其实很多人这个实际上就要求很多时候你就实要去开发或优化一个高性能的一个,呃,AI的推理框架,这里边你可以去自源,或者说基于开源的改,或者说是你可能直接开源的满足需求,这个里边,这里边就会涉及到要做这种高性能的这种的算子实现,包括什么卷积的实现呀,石化的实现呀,然后可能还有很多这种心情算子实现,然后支持这种的算子的融合呀,图优化这些相关的技术啊,然后要支持多精度啊,就是比如说有些可能是可以跑FP16,或者跑INT8或者甚至INT4,如果是有硬件支持啥,然后还有一些对于这个异购加速器的支持。等等的很多这种方面都是你需要做的这部分的开发任务,这上是我举的一个以AI为主的一个呃例子,如果说是在一个呃AI算法公司,这个对高清计算工程师的很多的需求,很多时候都会涉及到这些呃模型的部署上做的工作,而且这是你具体要做的事情。
|