面试岗位 :机器学习训练框架实习生
周日投的日常实习,周二HR 打电话约了时间,约到周四面试。
周四下午四点面试:
技术面:首先是自我介绍。
然后是问项目,我主要说了用TensorRT的项目。
面试官问我学CUDA的情况,我说了就是寒假学了一段时间,
然后寒假的时候看了NVIDIA 开源的 faster transformer 。
面试官问我 用过cuda写过什么,我就说利用 share memory 写过矩阵乘法,但是比不过cuBLAS.
他问我share memory 和global memory的问题。回答的差不多。
又问我 为什么cuda 要把 thread分成 block, grid 。 这我真不会。
然后是个编程题。
用cuda 写 找10240 个float 数的数中的最大值。
我写了一个规约的算法,reduceMax。
首先是<<<10,1024>>> 找到每个block的最大值,然后用存在另一个数组里。
之后 用了一个<<<1,32>>>再对b 进行reduceMax。
写完后,面试官提示了我一些错误,改了下,他说写的还行。
面试官问我愿不愿意 做推理。我说我愿意做,但没看到相关的岗位。
写CUDA写的还可以,能够做推理不错。
问我有没有什么问题,我问了他们字节的bytePS 框架,他稍微介绍了一下。
这时候大概是 16点 45分,他说5点左右会有另一个面试官。
然后就是二面了:
真实绝了,一面二面连在一起。
二面是个女面试官,后来她提到faster transformer 就是她参与写的。
她上来就问我 是研二的吗,我研一。她就回答说那转正可能会困难吧,问我实习时间。(面试的时候是3月初)
七月到十月或者十二月都可以。她好像不太满意,可能想要研二快毕业能转正快速入职的吧。
然后问我 一个 block 最多能有多大的 share memory ,我不清楚。
block 内share memory 是越大越好吗? 我还是不太明白。
下一个问题是 问我写的<<<10,1024>>>有什么问题, 我实在不清楚。
又问 一个SM最多能运行多少个 block。又是一个不清楚的问题。
反正就是一问三不知吧,她这些问题都是资源利用率相关的。我基本都不会。
问我 用过什么GPU,我说了 MX450和 2080Ti.
接着问我它们都有几个SM 。 又是个不会的题。
她说 2080 TI有 68 个SM ,要我根据这个写个cuda
计算 20 * 102400 矩阵每行的和。也就是每行的reduceSum 。
港真,我当时心态已经崩了,没写出了,数据划分实在不确定怎么搞。因为要尽量利用较多sm,也就是提高 资源占用率。后来想想,也还是挺简单的,分成两个stage,200个block,每10个block计算一行,但当时我索引都写错了-_-||(面试官就判断我不合适了)。
她建议学cuda 要软件和硬件结合。我基本上也确定我凉了。
接着她又问了些 C++的问题。
虚函数,纯虚函数的区别。还有一些其他的。
又问了操作系统
线程与进程的区别。
接着又问了进程的通信方式,这个我少答了一个 共享内存,她批评了下。
然后是一道 C++ 编程题:
判断一个二叉树是否是另一个二叉树的子树。
我写的差不多,但还是有一些问题来着。
然后结束了,轮到我问问题时间。
我向她问了 一面面试官提的block的问题。
又问了他们这边主要是做什么业务,她说了一大通,我什么都没记住。
她问我 TensorRT 精通吗,她那边 TensorRT 模型转换经常会遇到些问题。
我诚实的说了,我只用过一两星期,连自定义插件都没写过。
按她的意思我基本凉了。
她说我的情况不太匹配,因为她想要研二马上过来实习,然后转正的。
我这种情况,除非技术特别牛逼的,不然不太想要。
如果3个月后还想面,可以再找hr,看我进没进步。客套话。
基本上凉凉的节奏。