题记
“面试经验”这个系列早在5年多前第一次找工作的时候就想开启,没想到拖了这么久总算是开始了。没错,我又开始找工作了。
这一次的“面试经验”主要用于记录我在海外找工作的面试记录,也以此来复习和审视自己有什么需要提高的地方,同时也记录下这段神奇的经历——在海外找工作究竟是个什么样的环境和过程。
个人背景简单概要——目前我在英国读硕士,预计今年六月份毕业。之前在国内的跨国科技企业和一家国内互联网企业一共工作了五年多。
公司背景
这次面试起源于猎头在LinkedIn上联系我,且给我看了职位描述和公司背景。公司是做AI代码生成,职位也是我比较感兴趣(但经验不足)的方向。同时加上那会我刚学期末,秉承着督促自己开始找工作的心态,我答应了第一次面试(就安排在我交完作业的那一天)。
CTO面
创业公司的CTO面试主打一个介绍公司在做什么,考察面试者的做事思路是否符合公司调性、是否有创业热情、以及几个实践中的技术问题。
具体流程和问题依次如下。
面试者最突出的特性是什么(并尝试用案例证明)
这个部分我根据自己的经验做了回答,也算是去年申请学校到这两年的反复自我思考的一个回答。在海外公司的面试中,可能在HR面和CTO负责人面试会经常出现这类问题,可以做一些提前的准备。
个人特性可以有以下(但不限于):
- 善于合作
- 热爱写代码/代码控
- 有韧性/毅力
- 有创造性
- 喜欢思考
关于某个特性,为什么你会希望用此来描述自己
这个问题算是第一个问题的延伸,面试官(创业公司CTO)跟我说希望更深入理解我做事的出发点。
总结看来就是个人特性也不能简单的总结,最好是有一些递进。
比如回答有创造性,那么用有创造性来描述自己,是因为自己喜欢创造性过程中的什么点。
比如:喜欢在这个过程中更深入理解产品/技术,同时喜欢创造新的工具,等等。
现在观察到什么待解决的技术问题,或者现实问题
这个问题主要考察平时的观察力和思考力。
因为没有提前准备,我说了一个比较危险的点。
建议可以平时多观察,找到合适的点记下来,然后备用为面试答案。
模型训练和推理中有什么可以优化的部分
模型训练可以优化GPU使用率来提升训练效率,同时可以对模型进行压缩和剪枝,减少模型参数,提升参数使用率;
推理可以使用低精度fp16来进行计算加速。
对于创业公司而言,LLM大模型时代可以做一些什么样的工作
训练方面:在GPU资源充足的情况下,可以进行预训练pretraining的模型复现;
如果GPU资源不够,可以考虑做具体场景的模型finetuning,以及场景的定制化。
推理方面:可以设计更好的交互模式,提供更好的调用服务。
最后一个具体的技术问题
低精度训练中,以下3个部分受精度影响的重要顺序依次是:
- 权重
- 激活函数的输出(前向的结果)
- 梯度
这个的答案是最容易受精度影响的是权重,最好是用最高的数据精度表示权重。
梯度的影响相对最小,因为每次求反向传播更新的权值会乘以学习率learning rate使得更新值更低。
技术负责人面试
技术人的整体面试情况来看,对方的技术功底很扎实,更偏性能优化和低层的调度。
和我目前的工作经历和背景不是完全匹配。
不过整体的面试过程,还是学到了很多。
CUDA方向
stream的作用
- 目前的回答是stream用于管理CUDA运行的context和资源调度
- 同时stream管理event的状态,判定某个任务是否在进行中或完成
CUDA代码出现问题如何debug
- 首先设计test case,在pytorch或者是高层应用层进行测试,和错误复现
- 然后在CUDA里进行错误输出,直接使用打印功能
- 再来可以使用gdb和cuda gdb进行调试
CUDA代码性能如何分析和优化
- 可以使用异步计时API,对指定的模块在pytorch或者C++层计时并分析
- 使用NVIDIA nsight system进行时间戳分析,查看是否有大量空转或者某个kernel耗时过多的情况。如果存在kernel细碎,时间大部分花费在kernel的调用部分,可以考虑融合简单的计算过程,以优化计算性能。
简述一下pytorch中copy tensor实际的操作过程(待查)
-
如果该tensor在GPU memory上,那么需要先从GPU拷贝到CPU上
-
然后再从CPU拷贝到一个新的tensor上
-
追问:如果此时将tensor拷贝到GPU上,会不会报错(暗示通常会报错),为什么?
什么情况下会出现memory bank conflict情况,应该如何避免
如何在CUDA kernel中减少register寄存器的使用
- 例如实现了一个CUDA kernel,可以通过减少中间变量的使用
- 同时,使用高级一些的指令集,如cuda 乘加
shared memory和cached memory的关系和区别
- 它们实际上是在同一块物理空间,只是被划分到不同功能
System Programming
mutex和spinlock的区别、以及适用情况
C++方向
unique ptr和shared ptr的区别
某个函数使用strict字段的作用是什么
python
如果希望使用python同步绘制(plot)12个图标,应该怎么做
- 使用多进程,而不是多线程。因为python的plot库的context在多线程设置下会冲突。