背景
最近几年生成式AI技术和自动驾驶技术发展发展很快,这些行业对于算法的运行效率有很高的要求,尤其一个模型在训练完成后运行到设备上,需要大量的工作,包括模型的剪枝、蒸馏、压缩、量化、算子优化、系统优化等。
对于传统的算法岗位在互联网基本已经饱和,干的工作比较低级,据我了解到基本是做数据清理和调参,这些岗位在未来基本没有竞争性。对于传统互联网的算法岗位,我是不看好的,目前最火也就是做做推荐算法,还算不错,但是现在特别卷,基本没有好的学历和paper很难进去。
未来是AI的时代是大家的一个共识,目前AI行业的一个难题是算力问题,算力就是成本,能够通过极致的优化使得算法在不同架构的处理器上高效运行,榨干芯片的极致性能,这是当前非常重要的一个工作,我从BOSS了解到最近2年有关AI算法部署、AI算子开发、模型优化岗位增多,而且薪资较高,且竞争压力比较小,要求主要是算法在不同平台上的极致性能优化,对算法设计的要求低一些,偏工程化。
面试
网上搜索有关的面试经验,基本不太全面,实际的问题和方向,相对于一些后端开发和算法岗位实在少得可怜,这也说明这个方向还不太卷,有着极大的机会,说实在的,这些年走来发现机会大于一切努力,但是机会一般只在一定的窗口期产生,错过就没有了。
以下是我总结我在面试AI部署、模型优化、深度学习模型部署等岗位过程中的一些范围,先写一些整体的方向,后续有机会我会分享具体的面试经验。
-
基本技能
-
C/C++、多态、模板、引用、智能指针、STL、内存管理等,会持续深入,甚至会让实现一些比如:解决循环引用、智能指针的实现。
-
AI的基础知识,整体的训练的流程、算子的计算对比、深度学习的基本知识,pytorch等框架,网络结构,目前流行的网络结构、transformer、YoLo系列、LLMs、BEV、GPTs、BERTs等。
-
模型推理部署优化的整体了解,把握其中的一些点,模型的剪枝、int8量化、算子融合等计算图的优化;算子优化,涉及kernel的实现,这里会要求手写实现,比如3x3 conv2d和矩阵乘;内存、通信方面的优化,内存池,通信等。
-
一些硬件体系结构,主要是存储体系结构、x86、ARM;知识有Cache、寄存器、内存控制器、总线、Intrinsic指令、矢量编程、汇编;要求能够了解CPU优化的核心。
-
-
重点题
-
一般会问你一个模型推理优化的手段有哪些,准备怎么做,如何极致优化,如何使用profiling工具、如何判断该模型的优化瓶颈和重点在哪里,如何判断这个模型无法往下优化了,如何快速找到优化这个模型的最好的方法
-
手撕kernel 算子开发,一边撕,一边问,直到不会,常见的有:矩阵乘、conv2d 优化、矩阵转置,占比80%
-
手撕LeetCode,上面回答的好,这里可能简单些,占比20%,说实在的LeetCode手撕,个人认为没有太多意义,就是验证下你是否有编程过
-
-
个人项目
根据简历情况问
-
NVIDIA CPU的体系结构、内存模型、线程模型,CUDA算子优化
-
OpenCL算子优化,具体优化手段
-
AI编译器的一些知识和优化、TVM、代码生成等
-
一些推理引擎、TensorRT、OpenVINO、OpenPPL等
-
根据上面看到的,大家不难看出想要掌握这些知识非常的不容易,但这也是壁垒,我看到的是这个行业目前没有35岁之说,而且随着时间的增加优势会不断的扩大,AI的快速发展、要求我们时刻进步,未来只有使用AI的人和被AI淘汰的人。
有兴趣可以关注我的专栏《高性能开发基础教程》
该文章首发于 subscriptions:极空AI,后续我会在上面整理完整的AI+HPC资料,并提供相关书籍推荐,至于视频要不要录制,看大家需要不需要。
有兴趣的可以关注。