机器学习系统平台开发 一面
2024.4.18面试 约1h30min 一面挂
1、算法题
146. LRU缓存
中等难度,重点在于对双向链表的快速访问,使用unordered_map可以实现时间复杂度和空间复杂度都为$O(1)$
2、C++八股
- STL中容器的底层原理及其时间复杂度
- 模板类的实现
- 如果模板类的具体实现类是很占内存的结构体,如何修改参数传递来优化时间和空间?
- 右值引用与转移语义
- docker与虚拟机的区别
3、简历内容拷问
(1)基于FFT进行卷积加速的并行算法实现 项目
- 这个项目的意义是什么?
- 使用CUDA加速用到哪些技巧?
- 哪些地方用到了共享内存?
- 在这个项目中,共享内存为什么能加速FFT计算?
- 算法正确性是怎么进行测试的?
- 测试的最大数据量有多大,如果数据量超过CUDA显存了还有什么优化手段?
- 听起来你的工作量就是将C++实现的FFT算法转换为了CUDA代码,然后使用共享内存进行加速,为什么会花了将近半年的时间?
(2)基于文本提示的图像编辑系统 项目
- 讲一下这个项目的内容
- 为什么要重新训练StyleGAN?
- 推理优化主要用了什么,为什么会快?
- 在部署过程中有遇到什么困难吗?
(3)系统文件备份软件 项目
- 怎么读目录树的?
- 怎么写入文件的?用了什么API?
- 网盘功能是怎么实现的?
- 如果文件大小超过电脑内存,该怎么读文件,有什么优化策略?
【暑期实习】大模型推理/训练引擎研发工程师 一面
2025.03.26面试 约 40 min 一面过
1、简历拷打
(1)字节跳动实习经历
- 介绍一下模型结构、以及参数量有多大?
- 选用了什么推理方案?
- 相当于单机单卡去推吗?
- 没有,使用了多大,使用 ulysses 进行推理
- 详细讲一下激活权重量化和 dit cache?
- 怎么评价量化效果?
- 这样的 dit cache 在显存节省上有优势吗?
- 介绍一下 ulysses 通信量?
- 核心是 all to all 通信量(当时没能答上来)
- all to all 有做 overlap 吗?如果要做,怎么设计?
- 介绍一下 ulysses 怎么使用 all to all?你能想到什么 overlap 方法?
- 介绍一下双向注意力修改这个项目?
- dit 推理和 LLM 推理的最大区别是什么?
- dit 全是 compute bound,而 LLM 分为 prefill 和 decode 两个阶段,其中 prefill 是 compute bound,decode 是 I/O bound
- mmdit 有对 text 分支进行特殊优化吗?因为在 video generation model 中,text 分支的 seq_len 是比较小的,所以可以对 text 分支进行特殊优化?
- 为什么只做了 element-wise 融合?对 GEMM 没做融合吗?
- 有了解过 dit 训练过程吗?
(2)美团实习经历
- 介绍一下 flash attention 优化这个项目?
- 了解 flash attention 原理吗?为什么比 native attention 又省显存又快?
- 使用 Tiling 方式计算 attention,怎么保证 softmax 的正确性?
- 核心是介绍 online softmax
- 你会手写算子吗?
- 你能介绍下 TP 怎么实现吗?
- TP 里有一个 sequence parallel,你有了解吗?
- 没有了解过
2、代码题
用 triton 写一个简单矩阵乘,MxN 和 NxK 矩阵乘