面试和笔试中经常出现的(模板)代码题
1. 实现LRUCache 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136// 方法一:不使用STL,自己设计数据结构#include<unordered_map>#include<iostream>using namespace std;struct DLinkedNode { int key, value; DLinkedNode* prev; DLinkedNode*...
leetcode刷题总结
...
AI Infra初步认识
一、AI Infra 在大模型公司当中,AI Infra团队如何分类? 最底层是芯片、中间是推理和训练的架构、最上面是应用层等几个方面,这里面最大的是推理和训练: 网络、调度,这些在训练和推理都会需要,调度比如说这么多卡,怎么调度任务; 推理当中最重要的就是KV Cache,训练是做fault tolerance,保证不会太大故障; 应用层如Agent Memory和Agentic Workflow等; 这有点像云计算的分类:网络、存储、计算,比如计算就是GPU的算子优化,怎么做schedule之类的,KV Cache对应存储,网络就是通信。 infra团队的目标与原理是什么? AI...
分布式训练:DeepSpeed的ZeRO1/2/3
问硬件、硬件利用率 讲讲deepspeed几个阶段,分别分片什么、代价是什么 简介 DeepSpeed是微软推出的大模型分布式训练的工具,主要实现了ZeRO并行训练算法。 ZeRO(零冗余优化器,Zero Redundancy Optimizer)主要从模型参数(Parameters)、优化器状态(Optimizer States)和梯度(Gradients)三个方面对模型进行拆分,从而降低大模型训练占用的显存。 ZeRO的三个级别 ZeRO被分为了三个级别: ZeRO1:对优化器状态进行拆分; ZeRO2:在ZeRO1的基础上,对梯度进行拆分。 ZeRO3:在ZeRO2的基础上,对模型参数进行拆分。 ZeRO1 在模型训练中,正向传播和反向传播并不会用到优化器状态,只有在梯度更新的时候才会使用梯度和优化器状态计算新参数。 假设有NdN_dNd个并行的进程,ZeRO1会将完整优化器的状态等分成NdN_dNd份并存储在各个进程中。当反向传播完成之后,每个进程的优化器会对自己储存的优化器状态(包括Momentum、Variance 与 FP32 Master...
GPT面试经验
4.2.1 GPT1 4.2.2 GPT2 4.2.3 GPT3 4.2.4 GPT4 为什么GPT等LLM采用Only-Decoder模式 GPT(Generative Pre-trained Transformer)采用only-decoder(仅decoder)模式的主要原因与其设计目标和使用场景密切相关,以下是几个核心原因: 1. 专注于生成任务 任务特点:GPT的核心目标是生成连续的文本(例如回答问题、写作、总结等)。只需要基于输入的上下文生成输出,而不需要像encoder那样提取复杂的特征。 只用decoder:decoder具有自回归的特性(autoregressive),即它通过逐词预测下一步的输出,非常适合生成文本。 2. 自回归生成方式 decoder的工作方式:GPT的decoder通过掩码机制(masked...
Llama系列模型
参考网站 https://syhya.github.io/zh/posts/2025-04-06-llama/ 关键技术解析 以下是对 LLaMA 系列中广泛采用的关键技术的解析。 RMS Normalization (RMSNorm) FFN_SwiGLU Grouped Query Attention (GQA) Rotary Positional Embeddings (RoPE) Mixture-of-Experts (MoE)
AWQ归纳总结
介绍一下smoothquant 介绍一下AWQ量化 AWQ是一种对大模型仅权重量化方法。通过保护更“重要”的权重不进行量化,从而在不进行训练的情况下提高准确率。AWQ 发现,并非所有 LLM 权重都同等重要,仅保护 1% 的显著权重便能大幅减少量化误差。而要识别显著权重通道,应参考的是激活分布而非权重分布。激活值就是与权重矩阵作matmul运算的输入值。在计算时,将对激活值的每一列求绝对值的平均值,然后把平均值较大的一列对应的通道(行)视作显著通道,对其他通道进行低比特量化。 尽管保留显著权重为 FP16 可以提升量化性能,且不会显著增加模型的总位数,但混合精度的数据类型会使推理系统实现复杂化。 为了避免硬件效率低下的混合精度量化,经过公式推导后,AWQ 采用等效变换来放大显著权重通道,权重W乘以缩放因子s,激活值X除以s,可以减少显著权重的量化误差。但是随着s的增大,非显著通道的相对误差将会增加,这可能会损害模型的整体精度。因此,在保护显著通道的同时还需要考虑非显著通道的误差,找到权重矩阵每一个通道的最佳缩放系数s,使得量化误差最小。 AWQ...
GPTQ归纳总结
GPTQ简介 GPTQ 的思想最初来源于 Yann LeCun 在 1990 年提出的 OBD 算法,随后 OBS、OBC(OBQ) 等方法不断进行改进,而 GPTQ 是 OBQ 方法的加速版。在介绍 GPTQ 算法之前,需要先介绍 OBD -> OBS -> OBQ 的演进过程。 OBD: Optimal Brain Damage OBD 实际上是一种剪枝方法,用于降低模型复杂度,提高泛化能力。 如果要在模型中去除一些参数(即剪枝),直觉上,我们希望去除对目标函数 EEE 影响小的参数。于是我们可以对目标函数 EEE 做泰勒展开: ΔE=∑igiΔwi+12∑ihiiΔwi2+12∑i≠jhijΔwiΔwj+O(Δw3)\Delta E = \sum_i g_i \Delta w_i + \frac{1}{2} \sum_i h_{ii} \Delta w_i^2 + \frac{1}{2} \sum_{i \neq j} h_{ij} \Delta w_i \Delta w_j + O(\Delta...
大模型量化概述
模型量化简介 定义 模型量化是指以较低的推理精度损失将连续取值(通常为float32或者大量可能的离散值)的浮点型权重近似为有限多个离散值(通常为int8)的过程。 量化分类 根据应用量化压缩模型的阶段,可以将模型量化分为: 量化感知训练(Quantization Aware Training,QAT) 在模型训练过程中加入伪量化算子通过训练时统计输入输出的数据范围可以提升量化后模型的精度,适用于对模型精度要求较高的场景;其量化目标无缝地集成到模型的训练过程中。这种方法使LLM在训练过程中适应低精度表示,增强其处理由量化引起的精度损失的能力。这种适应旨在量化过程之后保持更高性能。 量化感知微调(Quantization-Aware Fine-tuning,QAF) 在微调过程中对LLM进行量化主要目标是确保经过微调的LLM在量化为较低位宽后仍保持性能,通过将量化感知整合到微调中,以在模型压缩和保持性能之间取得平衡。 训练后量化(Post Training...
CUDA学习笔记
CUDA基础概念 CUDA 内置变量 1. 线程和块索引变量 这些变量用于确定当前线程在网格(grid)和块(block)中的位置: 变量名 数据类型 说明 threadIdx dim3 当前线程在 block 内的索引(x, y, z 分量) blockIdx dim3 当前 block 在 grid 内的索引(x, y, z 分量) blockDim dim3 block 的维度(每个 block 的线程数,x, y, z 分量) gridDim dim3 grid 的维度(每个 grid 的 block 数,x, y, z 分量) 2. 计算能力相关的常量 这些变量描述了 GPU 的硬件特性: 变量名 数据类型 说明 warpSize int 一个 warp 的线程数(通常是 32) __CUDA_ARCH__ int 编译目标的计算能力(如 700 表示 SM 7.0) 3. 内存和同步变量 这些变量用于控制内存访问和线程同步: 变量名 说明 __shared__ 定义共享内存(每个 block...










