AI深度学习推理加速HPC类岗位-Nvidia面经

哈哈标题党了,我其实不是学生,分享一下我作为一名面试官常问的AI推理加速HPC岗位的问题~仅分享通用知识部分,项目部分因人而异这里省略

C++部分

1、为什么我们做C++项目的时候,需要写头文件?

2、讲出static关键字的一种应用场景

3、单例模式如何实现?

4、讲讲四种类型转换

5、拷贝构造函数中浅拷贝和深拷贝的区别?

6、一个类要去访问另一个类的private数据成员,该如何操作?

量化quantization部分

1、说说你知道的那些针对LLM的量化技法?

2、smoothquant为什么可以解决int8 LLM的accuracy问题?

3、bfloat16和fp16(half float point)同样内存大小,那么它们可以节约的内存大小应该是一样的吗?他们的优缺点主要有哪些?

4、量化怎么平衡精度和速度?

CUDA部分

1、讲讲shared memory bank conflict的发生场景?以及你能想到哪些解决方案?

2、CUDA里面如何分配GPU显存?为什么里面的参数是二级指针?

3、优化CUDA程序的访存效率,你可以想到哪些?

4、优化CUDA程序的计算效率,你又可以想到哪些?

大模型部分

1、有哪些encoder-only、decoder-only、encoder-decoder的模型?

2、随着seqlen的增加,你觉得encoder-only的模型和decoder-only的模型的计算量和访存量会是哪些变化趋势?为什么?

3、说说你知道的大模型训练or推理的常用优化手段

4、一般会对哪些大模型里面的算子做算子融合,说说你知道的

5、flash attention的原理讲讲?你认为为什么flash attention极大提升了训练速度?

6、paged attention的原理讲讲?你认为为什么paged attention极大提升了推理速度?它和flash attention的区别是什么?

以上呢,起始都是非常经典的问题,足够看出大家对AI推理加速HPC岗位的基础。

本人知道最近大家忙着准备实习面试和几个月后的秋招面试 ,同时很多学弟学妹深陷AI算法和后端开发的泥沼,认为只存在这俩职位,本人当初作为应届生的时候也是这样,但其实不然,AI深度学习推理加速HPC类岗位随着nvidia的股价暴涨,需求也是越来越大的,我从去年开始就帮助了很多同学了解这方面、加入这方面、着手实践项目,很多去年都成功拿到了offer,因此欢迎大家ping我,祝大家龙年工作如意~附一些截图,(本人大号为: 1987我不知会遇见你)

#牛客在线求职答疑中心##牛客解忧铺##实习##秋招#
全部评论
想问一下日常实习一般几面是全英文吗
1 回复 分享
发布于 05-16 17:58 江苏
哇,你的问题好专业啊!看起来你对AI深度学习推理加速HPC岗位有很深的了解呢。这些问题对于面试者来说,确实是很好的挑战。不过,作为一个AI,我可能无法回答所有的问题,但我会尽力帮助你理解一些概念。 1. 为什么做C++项目时需要写头文件? 头文件是C++程序中一个重要的组成部分,它包含了函数、类、变量等的声明。在C++中,头文件可以帮助程序员组织和管理代码,提高代码的可读性和可维护性。 2. static关键字的一种应用场景是什么? static关键字在C++中有多种应用场景,其中之一是在类中使用static关键字修饰成员变量,表示这个成员变量属于类本身,而不是类的实例。这样,无论创建多少个类的实例,这个成员变量都只有一个副本,并且可以被所有实例共享。 3. 单例模式如何实现? 单例模式是一种设计模式,其目的是确保一个类只有一个实例。在C++中,可以通过将构造函数和拷贝构造函数设置为私有,并创建一个静态的类实例来实现单例模式。 4. 四种类型转换是什么? C++中的四种类型转换包括:static_cast、dynamic_cast、const_cast和reinterpret_cast。每种类型转换都有其特定的用途,例如static_cast用于非多态类型的转换,dynamic_cast用于多态类型的转换,const_cast用于去除变量的const或volatile属性,reinterpret_cast用于将一种类型的指针转换为另一种类型的指针。 5. 拷贝构造函数中浅拷贝和深拷贝的区别是什么? 浅拷贝是指在拷贝一个对象时,只拷贝对象的成员变量的值,而不拷贝成员变量的指针。深拷贝是指在拷贝一个对象时,不仅拷贝对象的成员变量的值,还拷贝成员变量的指针。浅拷贝可能会导致多个对象共享同一块内存,从而产生问题,而深拷贝可以避免这个问题。 6. 一个类要访问另一个类的private数据成员,该如何操作? 在C++中,类的private数据成员是类内部的实现细节,不应该被外部访问。然而,有时确实需要访问另一个类的private数据成员。在这种情况下,可以通过友元(friend)来实现。友元是一个类或者函数,它可以访问另一个类的private和protected成员。 以上就是我对你提出的部分问题的回答,希望对你有所帮助。如果你还有其他问题,欢迎继续提问。
点赞 回复 分享
发布于 03-04 10:17 AI生成
楼主有整理相应的答案吗 求分享
点赞 回复 分享
发布于 03-06 18:20 江苏
大佬公众号搜不到
点赞 回复 分享
发布于 04-25 11:54 湖南
大佬,有给学生推荐的cuda项目吗?
点赞 回复 分享
发布于 05-10 10:08 辽宁

相关推荐

Webpack通过解析入口文件及其所依赖的其他模块,构建一个完整的依赖图,从而理清模块之间的依赖关系。具体的处理方式包括以下几个方面:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=ba06d8fbb87f45f7bf340c85dc4f0cc1模块解析:Webpack会根据配置的解析规则,解析模块的路径和文件类型。默认情况下,Webpack会按照特定的路径搜索规则来查找模块,可以通过配置文件指定更多的解析选项。Webpack支持解析各种类型的文件,如JavaScript、CSS、图片等,以及一些特殊的模块类型,如命名的 AMD 或 CommonJS 模块。加载器处理:Webpack在解析模块时,会根据模块的类型,使用相应的加载器来对模块进行预处理。加载器可以将模块进行编译、转译、压缩等操作。加载器可以串联使用,以处理多个模块,形成一个处理管道。其中,每个加载器负责对模块进行特定的处理,然后将处理结果传递给下一个加载器,直至最终的模块打包。依赖收集:在解析模块的过程中,Webpack会分析模块之间的依赖关系,并将这些依赖关系记录在依赖图中。通过静态分析的方式,Webpack可以在编译时就知道每个模块所依赖的其他模块,以及被哪些模块所引用。模块打包:依赖图中的模块经过加载器处理后,Webpack将根据配置使用优化策略来打包模块。例如,可以将多个模块的公共代码抽取出来,形成单独的代码块,以减少重复的代码。还可以进行代码分割,将不同功能或路由的代码分割成多个文件,以实现按需加载。通过以上的处理方式,Webpack能够准确地处理模块之间的依赖关系,构建出一个完整的依赖图,并最终将模块打包成一个或多个静态文件。这样,在浏览器中加载这些文件时,模块的依赖关系也会得到正确的处理。
点赞 评论 收藏
分享
11 139 评论
分享
牛客网
牛客企业服务