嵌入式 AI 工程师一面、二面面经
完整信息
本篇目录
感觉自己好菜、面试很难,还是要多多练习
投的是宇树机器人这块的嵌入式 AI 岗,base 杭州 做的是端侧模型部署。
两轮技术面,模型压缩和部署那块问得很细。
先说个整体感受:这岗是交叉的,纯搞算法的和纯搞嵌入式的进去都会有短板。
它不要求你会训模型,但要求你懂模型怎么在资源有限的板子上跑起来、跑得快、还不影响机器人本身的实时控制。
我嵌入式底子还行,AI 不够。
一面 技术面 约 55min
对着简历问,中间穿插基础,最后手撕。
先自我介绍,然后挑一个最有挑战的项目讲,我讲了个在板子上跑视觉模型的项目,问了十几分钟,
主要问模型多大、推理多久一帧、内存占多少、怎么压下来的。
- volatile 什么场景必须加,读寄存器和中断标志为什么要加
- static 修饰局部、全局、函数分别啥效果
- 结构体内存对齐,给了个结构体算大小,再问怎么重排省内存
- 指针和数组的区别,函数传数组的时候实际传了什么
- 堆和栈的区别,模型的权重和中间结果一般放哪
- malloc 在嵌入式上有什么风险,内存碎片怎么产生的
- 浮点和定点的区别,为什么模型量化要转定点
- 大小端怎么判断,模型文件跨平台加载为什么要注意字节序
- 进程和线程的区别,推理任务你会开线程还是单独进程
- cache 是干嘛的,为什么访问内存的顺序会影响速度
- 手撕:实现一个二维卷积的朴素版本,然后问怎么优化
- 手撕追问:循环顺序换一下为什么会快,跟 cache 有什么关系
卷积那道我写出来了,但优化那部分只答了循环展开和减少重复计算,面试官提了 cache 局部性我才反应过来,答得有点被动。
一面整体不算难,主要是覆盖面广。
二面 技术面 约 1h15min
这轮我吃力得很。
- 模型量化的原理是什么,int8 量化具体怎么把浮点映射过去的
- 对称量化和非对称量化区别在哪,什么时候用哪个
- 量化之后精度掉了,你会从哪几个方向找原因
- 训练后量化和量化感知训练的区别,各自什么场景
- 剪枝是怎么回事,结构化和非结构化剪枝在部署上差别大吗
- 知识蒸馏大概怎么工作的
- 算子融合是干嘛的,为什么能提速,一般融哪些层
- 模型部署的完整流程讲一遍,从训练好的模型到板子上跑起来
- ONNX 是干嘛的,为什么要有中间表示这一层
- 推理框架你用过哪些,TensorRT 或者 TFLite 的大致工作流程
- NPU 和 CPU、GPU 算矩阵有什么本质区别,为什么 NPU 效率高
- 一个模型在板子上跑得慢,你怎么定位是算力瓶颈还是内存带宽瓶颈
- 内存带宽为什么会成为瓶颈,怎么减少数据搬运
- 零拷贝在推理链路里怎么做,图像从摄像头到模型输入这一路怎么优化
- 推理任务和机器人的实时控制任务抢 CPU 怎么办,怎么保证控制不被饿死
- 多个模型要在一块板子上跑,你怎么调度和分配资源
二面出来感觉一般,感觉有点挂的意思 整体情绪我比较紧张。
两面下来的体感
这岗最大的特点就是交叉 volatile、内存对齐、指针、内存碎片、cache 这些;
AI 那半边主要不是算法本身,是部署和优化——量化、剪枝、算子融合、推理框架、NPU、内存带宽,这些才是重点。
如果你是嵌入式出身,学学模型压缩和部署这条链(量化原理、ONNX、推理框架的工作流程、算子融合)
我自己就是嵌入式出身,底层那部分答的还行,AI 部署我学的时间太少了 ,后续二面挂了。
嵌入式那半边我是跟着牛客那个《嵌入式软件工程师面试完全指南》过的,像 volatile、内存对齐、指针、内存管理、cache 这些通用题里面基本都能对上
链接放这,按需自取:
<a href="https://gw-c.nowcoder.com/api/sparta/jump/link?link=https%3A%2F%2Fgw-c.nowcoder.com%2Fapi%2Fsparta%2Fjump%2Flink%3Flink%3Dhttps%253A%252F%252Fgw-c.nowcoder.com%252Fapi%252Fsparta%252Fjump%252Flink%253Flink%253Dhttps%25253A%25252F%25252Fgw-c.nowcoder.com%25252Fapi%25252Fsparta%25252Fjump%25252Flink%25253Flink%25253Dhttps%2525253A%2525252F%2525252Fwww.nowcoder.com%2525252Fcreation%2525252Fmanager%2525252FcolumnDetail%2525252FMJNwoM" target="_blank">https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM</a>
两面都走完了,后续二面挂了。这方向确实热,但交叉岗对两边的要求都不低半。
本篇目录
当前问题0130
- 01
先自我介绍,然后挑一个最有挑战的项目讲,我讲了个在板子上跑视觉模型的项目,问了十几分钟,
- 02
主要问模型多大、推理多久一帧、内存占多少、怎么压下来的。
- 03
volatile 什么场景必须加,读寄存器和中断标志为什么要加
- 04
static 修饰局部、全局、函数分别啥效果
- 05
结构体内存对齐,给了个结构体算大小,再问怎么重排省内存
- 06
指针和数组的区别,函数传数组的时候实际传了什么
- 07
堆和栈的区别,模型的权重和中间结果一般放哪
- 08
malloc 在嵌入式上有什么风险,内存碎片怎么产生的
- 09
浮点和定点的区别,为什么模型量化要转定点
- 10
大小端怎么判断,模型文件跨平台加载为什么要注意字节序
- 11
进程和线程的区别,推理任务你会开线程还是单独进程
- 12
cache 是干嘛的,为什么访问内存的顺序会影响速度
- 13
手撕:实现一个二维卷积的朴素版本,然后问怎么优化
- 14
手撕追问:循环顺序换一下为什么会快,跟 cache 有什么关系
- 15
模型量化的原理是什么,int8 量化具体怎么把浮点映射过去的
- 16
对称量化和非对称量化区别在哪,什么时候用哪个
- 17
量化之后精度掉了,你会从哪几个方向找原因
- 18
训练后量化和量化感知训练的区别,各自什么场景
- 19
剪枝是怎么回事,结构化和非结构化剪枝在部署上差别大吗
- 20
知识蒸馏大概怎么工作的
- 21
算子融合是干嘛的,为什么能提速,一般融哪些层
- 22
模型部署的完整流程讲一遍,从训练好的模型到板子上跑起来
- 23
ONNX 是干嘛的,为什么要有中间表示这一层
- 24
推理框架你用过哪些,TensorRT 或者 TFLite 的大致工作流程
- 25
NPU 和 CPU、GPU 算矩阵有什么本质区别,为什么 NPU 效率高
- 26
一个模型在板子上跑得慢,你怎么定位是算力瓶颈还是内存带宽瓶颈
- 27
内存带宽为什么会成为瓶颈,怎么减少数据搬运
- 28
零拷贝在推理链路里怎么做,图像从摄像头到模型输入这一路怎么优化
- 29
推理任务和机器人的实时控制任务抢 CPU 怎么办,怎么保证控制不被饿死
- 30
多个模型要在一块板子上跑,你怎么调度和分配资源