模型部署/推理优化/高性能计算方向社招面经总结

背景:lz在自驾公司做bev模型在orin上的部署和优化,三年工作经验。最近面了几家公司,主要是自驾公司的模型部署和工程化岗位,也有一些是推理框架和大模型推理优化相关的岗位。这两周大概搞了二十多场面试,也该总结一下经验,顺便攒一波rp了:)

lz既然是社招,那肯定是项目问的比较多,这块没啥好讲的,每个人的项目都不一样,只要保证简历上写的东西是自己做的,面试的时候能讲清楚就可以了。

CUDA和C++八股

lz的cuda基本都是自学的,自我感觉良好,结果面试的时候被各路面试官吊打,还是自己太菜了cuda的问题有下面这些

  1. cuda graph作用原理,kernel launch流程
  2. 如何确定blocksize和gridsize
  3. 什么是default stream,它存在什么问题
  4. shared memor的bank conflict及解决方法
  5. threadfence的作用
  6. 如何debug cuda kernel
  7. unified memory和zero-copy memory
  8. cuda sort如何实现
  9. sin函数在哪个硬件计算,这个硬件还能算什么
  10. Volat架构特性,ITS
  11. 3090上单个block能用的shmem最大有多少
  12. PTX与SASS的区别
  13. GPU性能xx TFLOPS是怎么计算的

C++的八股问的也挺多,不过翻来覆去就下面几个问题

  1. C++虚函数实现机制,单继承、多继承、虚继承的内存布局
  2. 四种cast
  3. 三种智能指针
  4. 函数模板声明与定义能否分离
  5. CRTP静态多态
  6. vector扩容,resize和reserve
  7. 单例模式

手撕题目

做推理优化和高性能计算肯定是要懂点cuda,所以大部分的题目都是用cuda实现,一些不太好用cuda实现的如NMS就用c++写了。当然也遇到过一些力扣题目,基本是hot100的范畴,这里不再赘述。

cuda实现:reduction,softmax,matrix transpose,avg pooling,算两堆bbox的iou,大部分情况下都是实现kernel即可,少数情况需要跟cpu对齐。

c++实现:NMS,conv2d,双线性插值,layernorm,单例模式

这里面让我印象比较深刻的是layernorm,用cuda写个layernorm不难,但面试官让我用vadd/vsub/vmul/vdiv等向量指令实现一个layernorm,我人都傻了。一是咱平时写cuda都是SIMT的编程模型,cpu优化是SIMD,这俩写起来有差别;二是没提供sqrt,得自己用牛顿法求,而且还没有比较运算符,浮点数的比较还有一些trick,最后肯定是寄了。

另外就是某大模型公司,要求实现softmax,需要跟cpu版本对齐。我写了个3pass的softmax,可惜面试过程中结果没有对齐,面完下来5分钟就解了bug,也算比较可惜吧。还有个小插曲就是面试官让我把代码通过腾讯会议发给他,但是我发错文件了,目录下有test.cc和test.cu,test.cc里面是另一个家面试的手撕,test.cu里面才是softmax。手滑了,发给面试官的是test.cc第二天我重新发了调通的test.cu,希望他能看到吧

#24届软开秋招面试经验大赏##如何判断面试是否凉了##我的求职思考#
全部评论
请教一下佬,这方面校招会对项目要求高嘛。我有一些cuda和tensorrt相关的研究项目,不知道能不能冲一下😭现在在做agent相关的但是感觉跟llm本身没啥关系。
3 回复 分享
发布于 2024-03-21 11:55 日本
好家伙 我说问题怎么这么难 一看是社招
2 回复 分享
发布于 2024-03-28 13:02 湖北
cy
1 回复 分享
发布于 2024-04-07 23:47 湖北
cy
点赞 回复 分享
发布于 06-12 16:09 安徽
太难了,这怎么学啊
点赞 回复 分享
发布于 01-16 19:00 广东
cuda实现:reduction,softmax,matrix transpose,avg pooling,算两堆bbox的iou,大部分情况下都是实现kernel即可,少数情况需要跟cpu对齐。 c++实现:NMS,conv2d,双线性插值,layernorm,单例模式 请问这些实现有什么比较好的参考吗
点赞 回复 分享
发布于 2024-12-18 13:50 上海
可以分享一下cuda学习路线吗,有相关的课程或者资料推荐吗
点赞 回复 分享
发布于 2024-07-08 10:25 江苏
cy
点赞 回复 分享
发布于 2024-03-30 12:44 广东
请教楼主,请问怎么找高性能计算相关的项目呢,目前研一下,之前自学了一些cuda和机器学习,想找一份日常实习,但是没什么相关的项目和经验。
点赞 回复 分享
发布于 2024-03-22 20:42 北京

相关推荐

1. 项目背景:针对端侧设备(树莓派、昇腾、RK系列)的低资源环境,设计一套轻量化分布式框架,实现大模型(LLM/ASR/TTS等)的高效协同推理,解决端侧设备算力分散、通信受限、动态扩展难等问题。技术栈:Linux、C++、ZMQ、设计模式、分布式架构、主从Reactor模式、docker、cmake、shell3. 项目设计方案1. 双模式部署设计:设计Docker与裸机双部署方案,通过自动化镜像部署和容器操作脚本,环境部署效率提升70%2. 底层混合通信组件:- 设计基于ZMQ的多模式通信中间件,通过工厂模式统一创建PUB/SUB、PUSH/PULL、RPC等6种通信策略,结合策略模式实现动态通信方式切换,降低业务层网络代码复杂度70%;- 构建高可用RPC框架,支持方法动态注册与服务发现,通过设置双端超时控制与自动重连机制提高通信可靠性;- 设计ZMQ消息封装模块,开发轻量级序列化协议,采用长度前缀+紧凑存储结构设计实现多参数打包/解包3. channel模块设计:- 统一管理底层多模式通信中间件的ZMQ连接,支持动态URL绑定,信道注册- 设计观察者模式和闭包方案,实现网络层与业务逻辑的解耦- 通过动态work_id路由和连接池技术,实现多unit单元通信隔离- JSON协议设计,用于节点间/外部用户消息交互4. 分布式任务调度框架设计-与业务节点关系(继承)- 采用 Reactor模式,设计异步事件驱动的任务调度框架,通过eventpp实现毫秒级事件响应- 动态RPC服务注册,支持跨业务节点 setup/exit 等指令的远程调用- 统一管理 work_id-channel 连接池,对上层业务节点屏蔽底层通信复杂性- 提供标准化setup等虚函数接口,支持业务节点自定义任务处理逻辑5. unit-manager模块- 设计RPC服务注册,实现信道自动注册/释放,SQL处理;并解析 action 实现动态分发请求- 实现轻量化内存kv缓存数据库 存储 unit 元信息;并提供线程安全SQL查询接口,供节点动态通信- 设计多协议网关,实现TCP/ZMQ协议转换,支持外部用户-内部业务节点通信交互- 设计主从多Reactor TCP通信框架,实现压测10000+TCP并发连接6. Node业务层接口设计- TASK任务管理:实现单任务实例管理,模型加载/推理/流式输出回调机制等- 服务层控制:自定义实现setup等接口,对业务节点进行生命周期管理,实现节点间相互订阅
简历中的项目经历要怎么写
点赞 评论 收藏
分享
07-26 13:37
已编辑
电子科技大学 C++
点赞 评论 收藏
分享
评论
27
300
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务