记本人上周面试一小伙的全过程--AI推理优化方向
最近,正好在面试一些AI推理/大模型推理方向的校招同学,把面试过程按照对话的方式放出来,供各位看着玩玩。
上周,领导又双来给了我一份简历。之前已经面过一次了,见此处
领导:熊猫,这里是一个来自xxxx大学的同学,你看看有没有空去面试一下
我:OK,我看一下
(我看了后发现,这同学的简历虽然感觉写的一般,但是看起来工作量不少,实习应该有在认真工作,大模型推理相关技巧也有接触,在校招生里面,这些经历或许算得上top10%了,没准水平高过我,于是和
不一样,这次我是心怀忐忑地去“焦作人”)
--------------------------------------分界线-------------------------------------
时间飞逝到面试时刻。
我:你好,同学!我是XX公司的AI推理加速工程师,花名熊猫,首先感谢你今天参加我们的面试,那我们开始吧(本人对颜值依旧比较有信心,所以摄像头一般依旧会主动打开),请你先简单介绍一下自己与AI相关的经历吧
候选人:(此处略去5分钟,候选人非常详细地介绍了简历上自己负责的内容、成果以及对团队的贡献,但是一个自我介绍而已,其实我听得有点累了,但是又不忍心打断他的表演)
我:OK,非常详细哈,看来你应该是有备而来,(我挑了一个自认为有很多聊头的项目来聊一聊)
候选人:我具体用了xxx和xxx和xxx的优化手段解决了xxx性能问题,(这里他详细分析了问题的来源、适用的方法,以及取得的结果,这个是我想听到的)
我:好的好的(接着换一个问题,继续聊项目)
候选人:此处省去n个字(依然难不倒他啊,对简历上东西很熟悉啊)
A FEW MOMENTS LATER...(聊项目时间)
我:(到这里,开始问一下重要的基础知识)shared memory的bank conflict你能描述一下定义吗
候选人:噢,这个xxxxxx(此处省去n个字)
我:(穷追不舍)那你看这种访问方式会有bank conflict吗?(我给了他一张图)
候选人:有
我:你确定吗(我承认bank conflict的概念非常隐晦,很多错误的说法,资料也不好找,且本人也经常误解)
候选人:确定(很遗憾,错误的确定)
我:CUDA stream有听过吗?
候选人:有
我:嗯,那么CUDA的所有stream是否都可以异步执行
候选人:不是,因为xxxx
我:(决定加大一点难度,甩一张图), 你看看下面这张图,每个CUDA stream上都有memcpyh2dasync,kernel,memcpyd2hasync的操作,你觉得这几个stream上的这些操作执行顺序可以是怎么样的?
候选人:emmm..我想想,此处省去n个字
我:(我有兴趣继续问下去)那哪种顺序下,总的latency最低?(这里其实有点难为他了,我没期望他能答出来)
候选人:(这里他想了有个5分钟以上,最终还是没打出来)
我:没事,这个问题其实有点难了,你能说出有哪些执行顺序其实已经很不错了,(差点把人弄自闭了,赶忙安慰一下),再问你一个关于CUDA的吧,我们都知道CUDA里面寄存器数量有限,那么如果kernel使用的寄存器超出了这个数量,会发生什么情况?
候选人:xxxx
我:嗯,还不错,我们来聊聊大模型推理相关的
候选人:嗯好
我:先来个简单的,encoder和decoder推理的区别在于哪里?
候选人:此处省略n个字(基本也答得七七八八还不错)
我:嗯,哪些是encoder模型,有没有encoder-decoder的模型
候选人:xxxxxx
我:好,你能稍微讲讲iter-level schedule解决了什么问题吗?
候选人:(此处略去n个字)
我:那你目前了解过哪些大模型推理引擎,有了解过SGLang吗?
候选人:(主要是vllm,SGLang没听过。。
我:(开始问一些vllm)你觉得vllm最大的创新在于哪里?
候选人:xxxx
我:(还不错)OK,那你觉得vllm现有的调度机制有没有可以改进的地方(这个我估计对他就有点难了)
候选人:想了一时半会,没想出来,感觉vllm挺牛逼的(想不出来实属正常,要我我也想不出来啊)
我:再问点量化吧,现有的Weight only量化主要针对哪些算子,哪些数据类型
候选人:xxxxx
我:你确定吗?
候选人:确定!
我:(还不错)那你觉得为什么只量化weight,不量化activation
候选人:(想了一会没想出来)
我:(慢慢引导)如果量化activation,你觉得模型性能是否会有提升
候选人:应该有
我:嗯,那你再想想为什么不量化activation
候选人:答出来了
我:好嘞,聊了这么多,最后再做个题吧,单链表反转,这个没问题吧
候选人:没问题
A FEW MOMENTS LATER...
我:感谢同学的时间,后续会有HR联系你,88
点评
这个同学的基础也是不错的,大模型推理/量化/CUDA的一些基础都能答上来,leetcode题也写对了,对写在简历上的项目也能清楚的描述出来,相关的引申知识点也能答出来,对一些做法的理解也是比较深刻,当然也有理解不太深刻的地方,比如CUDA stream schedule、activation的量化等等,但是整体也在校招生上等水平了,对一些前沿技术也有一定了解,技术之间的优缺点也有自己的理解,我这一面其实我是愿意给√的。