今天在某离职群里看到前同事聊天,说到国内某大厂的一个面试,本来求职面试的岗位是通信库,类似于英伟达的 nccl, 但是却被问到了很多与算子开发相关的问题。
看来算子开发岗位依然很稀缺。
联想到之前写过的一篇关于AI算子开发的文章,那时是一个做大模型的公司需要AI算子开发:有前途!大模型也需要AI算子开发岗。
不少小伙伴看了这篇文章之后,对算子开发这个岗位有了了解,也十分感兴趣。
刚好今天朋友圈不少人都发了一个图片,调侃大模型的算法开发,拥有优先择偶权。
图片不知真假,大家感受下。
其实算子开发岗位,与算法岗位有相似之处,但又不是纯算法,还需要和硬件、芯片打交道。
需要对底层芯片很了解,才能把算法更好的部署在芯片上,实现推理的低延时高性能。
1、纯算法的传奇工资
很早之前网上就流传着一些算法工程师的传奇:毕业去大厂做算法,白菜价30-40w起步!
这让工作了很多年的老工程师们都愤愤不平,纷纷大呼薪资被倒挂。
虽然这几年市场冷静了一些,但不可否认的是,搞算法依然是香饽饽,而与算法相关的岗位中,有一个独特的存在,那就是AI 算子开发工程师。
2、AI 算子开发是做什么的?
算子,英文名为 Operator,简称 OP。指的是神经网络中完成特定功能的一些算法节点。比如在CNN网络中,一个卷积节点就属于一个卷积算子。
往大了讲,甚至一个CNN网络也可以称作一个大算子,只不过这个大算子比较复杂。
AI算子开发的岗位主要集中在与底层芯片相关的公司的招聘需求中,或者需要对神经网络有优化需求的公司招聘需求中。
但是问题来了,现在哪个做AI的,稍微有点技术原创型的公司,无论用GPU,还是ASIC,不需要对神经网络做优化呢?
所以,需求很多。那这个职位具体是做什么的呢?
做过深度学习或者使用框架搭过神经网络的同学都知道,一个神经网络就是由一层层的算子构成的。
但在使用框架搭网络的过程,基本上是搭积木似的调用算子接口。
比如在 tensorflow 中调用一个卷积,一行代码就可以搞定:
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
看似很简单,但在这个过程中,你根本看不到这个卷积算法是如何实现的。
你唯一知道的是,给定了一个输入,这一行代码做了卷积运算。
而卷积运算的实际执行过程,恰恰就是算子开发工程师需要做的事:把卷积的运算,在更底层实现出来。
如果在x86的架构下实现,可能就是直接用循环嵌套的方式来实现了,比如:
#include <stdio.h>
#define N 4 // 输入数组大小
#define K 3 // 卷积核大小
void conv2d(float input[N][N],
float kernel[K][K],
float output[N-K+1][N-K+1]) {
int i, j, m, n;
float sum;
// 遍历输出数组
for (i = 0; i < N-K+1; i++) {
for (j = 0; j < N-K+1; j++) {
sum = 0;
// 遍历卷积核
for (m = 0; m < K; m++) {
for (n = 0; n < K; n++) {
// 对应元素相乘并累加
sum += input[i+m][j+n] * kernel[m][n];
}
}
output[i][j] = sum; // 存储卷积结果
}
}
}
这是因为x86的架构和指令集并没有针对卷积这一算法做特殊的指令设计,因此我们要想实现这个功能,基本上也只能根据卷积的运算逻辑,来一层层的循环遍历完成。
而有些芯片作为专用AI加速部件,会为卷积这一运算单独设计硬件来完成计算,相对应的,也会设计单独的卷积指令。
因此,在AI芯片上,一个卷积的运算实现,可能就用一条指令,就可以完成很多个数据的乘累加操作,不需要再像上面的代码一样,写那么多循环来遍历卷积核。
当然实现出来只是第一步,更重要的是要优化。利用硬件架构的特性来完成算子的性能优化,从而实现计算加速。
3、算子开发需要什么技能?
了解了算子开发是干什么的,那大概就知道需要什么技能了。
首先,一定要对算法本身很熟悉,甚至是了熟于心才行。
因为算子开发是要真正实现这个算法,而不是在框架侧简单的进行一行python代码的调用。
要在芯片上实现一个算法,需要知道算法的每一个细节,只有这样,才能完成一个算法的功能交付。
其次,还需要对AI芯片的架构特别了解。
需要知道芯片上有哪些硬件模块可以实现这个算法,这些硬件模块之间有什么依赖关系,如何并行、如何同步、如何做优化等,做到了这一点,才能完成一个算法的性能交付。
可以说,算子开发,是一个软硬兼具的岗位。
除此之外,C++/python语言也是不可少的。
因此,算子开发需要的技能,可以大概有3方面:扎实的算法基础、扎实的硬件知识(计算机体系结构相关)以及扎实的编程技能。
4、算子开发的岗位待遇如何?
我从boss直聘上找了一个比较有代表性的职位描述和薪资。
这是北京某公司招聘的5年经验算子岗位的职位和薪资描述。
感兴趣的同学可以去Boss直聘上搜一搜看看。
我个人感觉,算子开发岗的薪资与纯算法岗位其实差不多,但是对算法的要求应该是没有纯算法岗位高的。
因为AI算子开发需要的能力不单单是算法能力,还需要一些硬件知识,甚至是编译器知识。
在现在纯算法工程师越来越卷,恨不得把leetcode刷一遍都不一定过得了纯算法岗面试的情况下,如果你具备算法+硬件+编程能力的技能,不妨试试算子开发岗。
试问,这种可以拥有优先择偶权的岗位,谁不喜欢呢?
参考:^ AI算子开发是什么