当前位置: 首页 > news >正文

算法部署优化工程师面试题整理

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:C/C++面试整理
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!

目录

整体情况简介

高性能计算基础

AI 框架知识

算法题

一些比较零碎的问题

推荐参考资料


整体情况简介

面试中的问题基本上分成以下几类:

  1. 基础的八股文:C/C++,OS,计算机体系结构等。这一部分略,网上已经有很多总结了。
  2. 高性能计算基础知识:这一部分是面试的重点,本文章以CUDA为重点。
  3. 各种AI框架知识:本文章以推理方向为主。
  4. AI基础知识:对于常见的机器学习算法,以及CV & NLP & 推荐模型有一定了解,了解计算流程以及模型结构即可,重点为了能分析出计算瓶颈在哪里,找出可能优化的方向。本部分略
  5. 算法题: 手写CUDA kernel和leetcode的比例大约为3:1。手写CUDA kernel的时候一般会结合第2部分一起问,一步一步要求你优化,每一步优化的具体原理,涉及到什么硬件知识等。

高性能计算基础

  1. CUDA的线程组织结构
  2. CUDA的存储体系结构,每一种存储的优缺点,该如何合理使用。
  3. GPU每一代的新特性有了解过吗?应该从哪里去了解详细信息?
  4. CUDA stream的概念,为什么要使用多个stream?
  5. GPU和CPU分别适合执行哪些程序?结合它们的硬件架构解释一下为什么它们有各自的优势。
  6. 说明一下神经网络加速器与CPU、GPU的区别,他们各自有何优势?
  7. 半精度浮点数FP16各个部分的具体位数,为什么要有半精度浮点数?
  8. TensorCore的加速原理
  9. MPI,OpenMP以及CUDA各自适用的加速场景。
  10. RDMA相关问题。
  11. 平时如何进行kernel的优化,会用到哪些工具?
  12. CPU上哪些并行优化方法?
  13. ARM相关的库有了解过吗?
  14. PTX有了解过吗?
  15. roofline模型有什么用?如何确定最优的BLOCK_SIZE。
  16. GPU资源调度有哪些方法?
  17. 稀疏矩阵的存储格式有哪些?稀疏矩阵的应用场景?稀疏矩阵计算与稠密矩阵计算有何不同?
  18. 如何计算CPU指令的吞吐量和时延?

AI 框架知识

这一部分会涉及一些AI框架(训练&推理&编译器)相关的问题,并且会重点根据简历上的项目经历去做一些发散性的提问。

  1. MLIR有了解过吗?ONNX有了解过吗?
  2. TVM的整体结构,如何用TVM进行开发?
  3. 为什么要进行推理优化?直接用tensorflow或者pytorch的推理接口不行吗?
  4. 模型推理优化的常用方法有哪些?
  5. 有研究过某一个框架的具体源码吗?
  6. TensorRT如何进行自定义算子开发?
  7. TensorRT对模型实现了哪些推理优化?常量折叠,算子融合,量化....
  8. 算子融合为什么能加速推理,优化了哪一部分?TensorRT用到了哪些算子融合?算子融合在推理框架中是如何实现的?
  9. 模型量化的加速原理,模型量化带来的精度损失如何解决?
  10. ONNX Runtime支持在多种硬件上进行推理,说明具体的实现机制。
  11. 总结一下TensorRT,ONNX Runtime等推理框架的组成架构,如果我们公司自己要为硬件开发一套推理框架,应该重点关注哪些部分?
  12. 各种推理框架都有何优劣势?它们的性能怎么样?
  13. 分布式训练中有哪些并行模式?每种模式需要做什么,有什么优缺点?
  14. 分布式训练中我们重点需要处理的问题有哪些?目前已有哪些解决方案
  15. MPI如何应用于AI框架中?
  16. 模型在移动端进行推理优化的框架有了解过吗?移动端和在服务器的推理优化思路有何不同?移动端能用到的加速指令有了解过吗?
  17. 移动端有哪些加速方法?
  18. 为什么要将模型一部分推理优化放在移动端,全部放在服务器上不可以吗?
  19. 自动驾驶上的推理框架有了解过吗?我们重点需要关注的指标有哪些?
  20. 反向传播的原理,具体实现的源码有了解过吗?
  21. 你了解哪些推理模型的调度方法?
  22. 推荐模型的结构有了解过吗?要部署一个大的推荐模型,应该如何将各个部分放在哪种硬件上部署?
  23. 计算图切分有了解过吗?如何应用于大模型推理?
  24. TensorFlow和Pytorch都用过吗?它们设计思路有何不同?有何优劣?如何添加自定义算子?

算法题

手写CUDA kernel几乎每场面试都会考,面试官会以写出来的第一个版本为准,一步步问继续优化的方法,在这个期间会结合高性能计算的基础知识来考察,从这个过程中能了解到对体系结构以及优化方法的了解程度。leetcode不一定有,但是遇上了基本上都是hard。两类算法题都要准备。

下面是常见的一些问题:

  1. 矩阵乘:
  2. 矩阵转置: 访存密集型算子的处理
  3. 一维reduce-sum:重点是如何处理bank confict
  4. 二维reduce-sum
  5. 卷积
  6. 将单stream改成多stream

以矩阵乘法为例说明一下一个典型的面试流程,下面以A表示面试官,B表示面试者。

A:写一个矩阵乘法吧,并将main函数中具体调用给写清

B: (写了一个最naive版本的矩阵乘)

A: 目前这个程序有什么问题,能进一步优化吗?

B : 目前访存性能比较低,可以采用矩阵分块并且使用上shared memory优化,并解释一下这样做的原理。

A:可以具体计算一下优化前后的计算访存比,来具体说明这一部分提升了多少。并写一下优化后的程序。

B: 通过计算优化了.....

上述对话会重复几轮,在后面几轮可能面试官不会再要求将每一版程序都写出来了,重点在于讨论优化思路,并且在讨论的过程中发散地问一点CUDA的知识考察理解的深度。

一些比较零碎的问题

  1. 卷积的三种加速计算方式,im2col+GEMM & Winograd & FFT,各自有何优缺点,cuDNN中有哪些实现?
  2. 数字信号的采样定理、熵 & 交叉熵 的含义 & 计算公式
  3. 还记得KKT条件吗?写程序求解一个非线性方程,并说明具体用到的优化方法。
  4. 脑洞问题:如何从编码的角度进行模型压缩?
  5. 如何将你研究生阶段的成果应用到我们的产品中?
  6. 给了一个TF 模型的profile,找出里面的bottle neck,提出如何改进这个模型的性能的方法。
  7. MIPS流水线有几级?分别是哪些组成部分?
  8. 说一下transformer的具体结构,如何加速transformer进行推理?
  9. attention的计算公式,写一下tf里面对应的代码
  10. 马尔科夫链简单知识
  11. 一道较难的概率题

推荐参考资料

  1. 《通用图形处理器设计:GPGPU编程模型与架构原理》:CUDA、GPU体系结构、PTX、TensorCore等GPU知识大杂烩,CUDA相关面试问题标答。对于GPU的硬件体系结构有较深入的介绍,虽然比较难懂,但是这一部读完后会对CUDA编程模型以及为什么要采用一些特定的优化方法有更深入的理解。
  2. 官方文档《CUDA Programming Guide》 & 《CUDA Best Practice Guide》: 不解释,必读。
  3. 《大规模并行处理器程序设计》:入门最佳,没有之一。其中第二部分对于CUDA中常见的计算Pattern做了分析,几乎可以应付所有的面试中的kernel编程,至少能答出80%,至于更深入地优化方法需要再花时间去研究。
  4. 《机器学习系统:设计和实现》:介绍了ML Sys这一领域的所有方面的基础知识,可以从一个整体的层面对机器学习系统的组成部分、每个部分的重点技术有较好的把握。这本书的框架主要以MindSpore为例,所以在整体读完后,需要结合自己比较熟悉的框架进一步仔细理解。该书有在线版本机器学习系统:设计和实现 - 机器学习系统:设计和实现 1.0.0 documentation
  5. 《深度学习进阶:自然语言处理》:只用numpy实现NLP模型,可以作为阅读深度学习框架源码的first course,会对AI模型中的底层实现细节有很好的理解。
  6. 《分布式机器学习:理论、算法与实践》:可以对分布式训练有大致的了解
  7. 《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练习

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

ctfshow web入门 php特性总结

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

Media Encoder 2024:未来媒体编码的新纪元 mac/win版

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

接口测试中缓存处理策略

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

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

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

Spark 之 入门讲解详细版(1)

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

关于nvm与node.js

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

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 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&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...