算法部署优化工程师面试题整理
🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:C/C++面试整理
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!
目录
整体情况简介
高性能计算基础
AI 框架知识
算法题
一些比较零碎的问题
推荐参考资料
整体情况简介
面试中的问题基本上分成以下几类:
- 基础的八股文:C/C++,OS,计算机体系结构等。这一部分略,网上已经有很多总结了。
- 高性能计算基础知识:这一部分是面试的重点,本文章以CUDA为重点。
- 各种AI框架知识:本文章以推理方向为主。
- AI基础知识:对于常见的机器学习算法,以及CV & NLP & 推荐模型有一定了解,了解计算流程以及模型结构即可,重点为了能分析出计算瓶颈在哪里,找出可能优化的方向。本部分略
- 算法题: 手写CUDA kernel和leetcode的比例大约为3:1。手写CUDA kernel的时候一般会结合第2部分一起问,一步一步要求你优化,每一步优化的具体原理,涉及到什么硬件知识等。
高性能计算基础
- CUDA的线程组织结构
- CUDA的存储体系结构,每一种存储的优缺点,该如何合理使用。
- GPU每一代的新特性有了解过吗?应该从哪里去了解详细信息?
- CUDA stream的概念,为什么要使用多个stream?
- GPU和CPU分别适合执行哪些程序?结合它们的硬件架构解释一下为什么它们有各自的优势。
- 说明一下神经网络加速器与CPU、GPU的区别,他们各自有何优势?
- 半精度浮点数FP16各个部分的具体位数,为什么要有半精度浮点数?
- TensorCore的加速原理
- MPI,OpenMP以及CUDA各自适用的加速场景。
- RDMA相关问题。
- 平时如何进行kernel的优化,会用到哪些工具?
- CPU上哪些并行优化方法?
- ARM相关的库有了解过吗?
- PTX有了解过吗?
- roofline模型有什么用?如何确定最优的BLOCK_SIZE。
- GPU资源调度有哪些方法?
- 稀疏矩阵的存储格式有哪些?稀疏矩阵的应用场景?稀疏矩阵计算与稠密矩阵计算有何不同?
- 如何计算CPU指令的吞吐量和时延?
AI 框架知识
这一部分会涉及一些AI框架(训练&推理&编译器)相关的问题,并且会重点根据简历上的项目经历去做一些发散性的提问。
- MLIR有了解过吗?ONNX有了解过吗?
- TVM的整体结构,如何用TVM进行开发?
- 为什么要进行推理优化?直接用tensorflow或者pytorch的推理接口不行吗?
- 模型推理优化的常用方法有哪些?
- 有研究过某一个框架的具体源码吗?
- TensorRT如何进行自定义算子开发?
- TensorRT对模型实现了哪些推理优化?常量折叠,算子融合,量化....
- 算子融合为什么能加速推理,优化了哪一部分?TensorRT用到了哪些算子融合?算子融合在推理框架中是如何实现的?
- 模型量化的加速原理,模型量化带来的精度损失如何解决?
- ONNX Runtime支持在多种硬件上进行推理,说明具体的实现机制。
- 总结一下TensorRT,ONNX Runtime等推理框架的组成架构,如果我们公司自己要为硬件开发一套推理框架,应该重点关注哪些部分?
- 各种推理框架都有何优劣势?它们的性能怎么样?
- 分布式训练中有哪些并行模式?每种模式需要做什么,有什么优缺点?
- 分布式训练中我们重点需要处理的问题有哪些?目前已有哪些解决方案
- MPI如何应用于AI框架中?
- 模型在移动端进行推理优化的框架有了解过吗?移动端和在服务器的推理优化思路有何不同?移动端能用到的加速指令有了解过吗?
- 移动端有哪些加速方法?
- 为什么要将模型一部分推理优化放在移动端,全部放在服务器上不可以吗?
- 自动驾驶上的推理框架有了解过吗?我们重点需要关注的指标有哪些?
- 反向传播的原理,具体实现的源码有了解过吗?
- 你了解哪些推理模型的调度方法?
- 推荐模型的结构有了解过吗?要部署一个大的推荐模型,应该如何将各个部分放在哪种硬件上部署?
- 计算图切分有了解过吗?如何应用于大模型推理?
- TensorFlow和Pytorch都用过吗?它们设计思路有何不同?有何优劣?如何添加自定义算子?
算法题
手写CUDA kernel几乎每场面试都会考,面试官会以写出来的第一个版本为准,一步步问继续优化的方法,在这个期间会结合高性能计算的基础知识来考察,从这个过程中能了解到对体系结构以及优化方法的了解程度。leetcode不一定有,但是遇上了基本上都是hard。两类算法题都要准备。
下面是常见的一些问题:
- 矩阵乘:
- 矩阵转置: 访存密集型算子的处理
- 一维reduce-sum:重点是如何处理bank confict
- 二维reduce-sum
- 卷积
- 将单stream改成多stream
以矩阵乘法为例说明一下一个典型的面试流程,下面以A表示面试官,B表示面试者。
A:写一个矩阵乘法吧,并将main函数中具体调用给写清
B: (写了一个最naive版本的矩阵乘)
A: 目前这个程序有什么问题,能进一步优化吗?
B : 目前访存性能比较低,可以采用矩阵分块并且使用上shared memory优化,并解释一下这样做的原理。
A:可以具体计算一下优化前后的计算访存比,来具体说明这一部分提升了多少。并写一下优化后的程序。
B: 通过计算优化了.....
上述对话会重复几轮,在后面几轮可能面试官不会再要求将每一版程序都写出来了,重点在于讨论优化思路,并且在讨论的过程中发散地问一点CUDA的知识考察理解的深度。
一些比较零碎的问题
- 卷积的三种加速计算方式,im2col+GEMM & Winograd & FFT,各自有何优缺点,cuDNN中有哪些实现?
- 数字信号的采样定理、熵 & 交叉熵 的含义 & 计算公式
- 还记得KKT条件吗?写程序求解一个非线性方程,并说明具体用到的优化方法。
- 脑洞问题:如何从编码的角度进行模型压缩?
- 如何将你研究生阶段的成果应用到我们的产品中?
- 给了一个TF 模型的profile,找出里面的bottle neck,提出如何改进这个模型的性能的方法。
- MIPS流水线有几级?分别是哪些组成部分?
- 说一下transformer的具体结构,如何加速transformer进行推理?
- attention的计算公式,写一下tf里面对应的代码
- 马尔科夫链简单知识
- 一道较难的概率题
推荐参考资料
- 《通用图形处理器设计:GPGPU编程模型与架构原理》:CUDA、GPU体系结构、PTX、TensorCore等GPU知识大杂烩,CUDA相关面试问题标答。对于GPU的硬件体系结构有较深入的介绍,虽然比较难懂,但是这一部读完后会对CUDA编程模型以及为什么要采用一些特定的优化方法有更深入的理解。
- 官方文档《CUDA Programming Guide》 & 《CUDA Best Practice Guide》: 不解释,必读。
- 《大规模并行处理器程序设计》:入门最佳,没有之一。其中第二部分对于CUDA中常见的计算Pattern做了分析,几乎可以应付所有的面试中的kernel编程,至少能答出80%,至于更深入地优化方法需要再花时间去研究。
- 《机器学习系统:设计和实现》:介绍了ML Sys这一领域的所有方面的基础知识,可以从一个整体的层面对机器学习系统的组成部分、每个部分的重点技术有较好的把握。这本书的框架主要以MindSpore为例,所以在整体读完后,需要结合自己比较熟悉的框架进一步仔细理解。该书有在线版本机器学习系统:设计和实现 - 机器学习系统:设计和实现 1.0.0 documentation
- 《深度学习进阶:自然语言处理》:只用numpy实现NLP模型,可以作为阅读深度学习框架源码的first course,会对AI模型中的底层实现细节有很好的理解。
- 《分布式机器学习:理论、算法与实践》:可以对分布式训练有大致的了解
- 《AI编译器开发指南》:深度学习编译器相关的介绍,重点在TVM。
建议: 1 ~ 4必读,这是所有领域的基础知识,5 ~ 7需要根据个人的研究兴趣和方向有选择性地深入阅读。
🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!
相关文章:
算法部署优化工程师面试题整理
🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:C/C面试整理 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 目录 整体情况简介 高性能计算基础 AI 框架知识 算…...

C#,入门教程(26)——数据的基本概念与使用方法
上一篇: C#,入门教程(25)——注释(Comments)你会吗?看多图演示,学真正注释。https://blog.csdn.net/beijinghorn/article/details/124681888 本文所述的知识基本上适用于C/C,java等其他语言。 …...

加密与安全_PGP、OpenPGP和GPG加密通信协议
文章目录 PGPOpenPGPGPG工作原理工作流程用途案例说明过程 代码实现pom依赖PgpEncryptionUtilPgpDecryptionUtilCommonUtilsPgpEncryptionTest 小结 PGP PGP (Pretty Good Privacy) 是一种加密通信协议,用于保护电子邮件和文件的安全性和隐私。它通过使用加密、数字…...
Maven模块化最佳实践
一,模块化的原因及意义 模块化是一种将大型的软件系统拆分成相互独立的模块的方法。具有以下优势: 代码复用:不同的模块可以共享相同的代码。这样可以避免重复编写相同的代码,提高开发效率。 模块独立性:每个模块都可…...

嵌入式C语言中 #pragma once 的作用
1、#pragma once有什么作用? 为了避免同一个头文件被包含(include)多次,C/C中有两种宏实现方式: 一种是#ifndef方式; 另一种是#pragma once方式。 在能够支持这两种方式的编译器上,二者并没…...

spring-cloud-openfeign 3.0.0(对应spring boot 2.4.x之前版本)之前版本feign整合ribbon请求流程
在之前写的文章配置基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 下图为自己整理的...

#数据结构 线性表的顺序存储
目录 每日文案 一、线性表的定义 二、线性表的操作 顺序表的存储结构 顺序表的初始化操作 判断顺序表是否为空表 将顺序表置为空表 计算顺序表中的元素个数 取出顺序表中的对应位置元素 取出对应数值的位序 在对应位置插入元素 将对应位置的元素删除 将顺序表中的数据…...

[iOS]高版本MacOS运行低版本Xcode
Xcode 版本支持文档 目的: 在MacOS Sonoma 系统上安装 Xcode14.3.1 第一步 先在Xcode下载一个Xcode14.3.1的压缩包 第二步 本地解压Xcode,将外层目录名变更为Xcode_14.3.1,将文件拷贝到 /Applications目录下。 第三步 变更xcode-sel…...

仿牛客项目Day5:开发登录、退出功能
登录功能 数据库 创建了一个表login_ticket来记录登录凭证,类似于session 核心字段是ticket entity 创建了一个类loginTicket mapper 处理login_ticket的mapper接口层,用来往里面查询数据、增加数据和修改数据 查询数据通过ticket来查 select是通…...

Vue3全家桶 - Vue3 - 【3】模板语法(指令+修饰符 + v-model语法糖)
一、模板语法 主要还是记录一些指令的使用和vue2的区别;vue3指令导航; 1.1 v-text 和 v-html 指令的区别: v-text: 更新元素的文本内容;v-text 通过设置元素的 textContent 属性来工作,因此它将覆盖元素…...

OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136616551 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿)的博…...

2024蓝桥杯每日一题(时间日期)
一、第一题:日期差值 解题思路:模拟 写一个计算时间的板子两者相减 【Python程序代码】 mon [0,31,28,31,30,31,30,31,31,30,31,30,31] def pd(x):if x%4000 or (x%40 and x%100!0):return Truereturn False def get_day(y,m,d):res 0for i …...
js【详解】事件
给 DOM 节点绑定事件 推荐使用 addEventListener 函数 第一个参数:事件名称第二个参数:事件处理函数(第一个参数为 event)第三个参数: true 采用捕获法来处理事件false 【推荐】采用冒泡法来处理事件 let div1 docu…...
webpack5基础--14_优化css
Css 处理 提取 Css 成单独文件 Css 文件目前被打包到 js 文件中,当 js 文件加载时,会创建一个 style 标签来生成样式 这样对于网站来说,会出现闪屏现象,用户体验不好 我们应该是单独的 Css 文件,通过 link 标签加载…...

Skywalking(9.7.0) 告警配置
图片被吞,来这里看吧:https://juejin.cn/post/7344567669893021736 过年前一天发版,大家高高兴兴准备回家过年去了。这时候老板说了一句,记得带上电脑,关注用户反馈。有紧急问题在高速上都得给我找个服务区改好。 但是…...
删除、创建、验证Kafka安装自带的__consumer_offsets topic
删除Kafka自带Topic 一般情况下,你删除Kafka自带的__consumer_offsets topic,会报错提示不能删除。 倔强的你直接找到zookeeper删掉了它,list查看确实没有这个topic了,但是这会导致消费者和偏移量无法记录。 创建Kafka自带的Topi…...

在文件夹下快速创建vue项目搭建vue框架详细步骤
一、首先在你的电脑目录下新建一个文件夹 进入该文件夹并打开控制台(输入cmd指令) 进入控制台后输入 vue create springboot_vue (自己指定名称) 如果出现这类报错如:npm install 的报错npm ERR! network request to http://registry.cnp…...

蓝桥杯倒计时 36天-DFS练习
文章目录 飞机降落仙境诅咒小怂爱水洼串变换 飞机降落 思路:贪心暴搜。 #include<bits/stdc.h>using namespace std; const int N 10; int t,n; //这题 N 比较小,可以用暴力搜搜复杂度是 TN*N! struct plane{int t,d,l; }p[N]; bool vis[N];//用…...

ctfshow web入门 php特性总结
1.web89 intval函数的利用,intval函数获取变量的整数值,失败时返回0,空的数组返回,非空数组返回1 num[]1 intval ( mixed $var [, int $base 10 ] ) : int Note: 如果 base 是 0,通过检测 var 的格式来决定使用的进…...

Media Encoder 2024:未来媒体编码的新纪元 mac/win版
随着科技的飞速发展,媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求,Media Encoder 2024应运而生,它凭借卓越的技术和创新的特性,重塑了媒体编码的未来。 Media Encoder 2024 mac/w…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...