大厂面试题备份20250129

embedded/2025/1/31 9:46:28/

20250129

KV CACHE压缩

在大语言模型推理中,KV Cache(Key-Value Cache)用于存储过去的注意力键(Key)和值(Value),加速自回归解码。然而,KV Cache会随输入长度增加而占用大量内存,影响推理效率。因此,KV Cache压缩成为优化推理速度和降低显存占用的重要研究方向。

KV Cache 压缩的目标是 降低显存占用,提高推理速度,但需要权衡计算精度、存储需求和推理性能。常见方法包括:

  • 量化(Quantization)
  • 低秩近似(Low-Rank Approximation)
  • 滑动窗口注意力(SWA)
  • 局部注意力(Local Attention)
  • KV Cache 复用

online topk

Online Top-K 是在动态数据流(Streaming Data)或增量更新的场景下,实时维护前 K 大(或前 K 小)元素的一种算法或数据结构。它广泛应用于搜索、推荐系统、自然语言处理(NLP)、大数据分析等领域。

topk cuda kernel算子

在 GPU 上实现 Top-K 操作通常需要高效的 CUDA Kernel 算子,以最大化并行计算能力并减少数据传输开销。Top-K CUDA Kernel 主要用于深度学习(如 Transformer 解码)、排序任务、大规模数据分析等场景。

1. Top-K CUDA Kernel 计算流程

在 CUDA 上实现 Top-K 操作,主要涉及:

  1. 分块并行计算:将数据分块(block-wise)进行并行处理,每个 CUDA 线程块(Block)处理一部分数据。
  2. 局部 Top-K 计算:每个线程块先在共享内存中计算局部 Top-K(通常使用堆排序或快速选择算法)。
  3. 归约(Reduction)合并 Top-K 结果:使用分层归并方法,将各个线程块计算的局部 Top-K 结果进行合并,得到最终的 Top-K 结果。

2. 主要实现方法

方法 1:基于堆排序(Heap Sort)

  • 适用于 K 远小于 N 的情况(例如 K=5, N=10^6)。
  • 每个线程块使用一个最小堆(Min-Heap),仅维护 K 个最大元素。
  • 新数据到来时,若比堆顶大,则替换堆顶并重新调整堆。
  • 复杂度:O(N logK),适用于小 K 值的场景。

📌 适用场景

  • Transformer 解码时的 Top-K 采样
  • 计算模型输出的 Top-K 置信度类别

方法 2:基于快速选择(QuickSelect)

  • 适用于 K 不是特别小(如 K ≈ N/2)。
  • 使用 QuickSelect 算法,在并行计算中采用**分块划分(block partitioning)**策略。
  • 通过 分层 partition 操作,快速找到第 K 大的元素,并筛选 Top-K 个元素。
  • 复杂度:O(N)(平均情况)。

📌 适用场景

  • NLP Transformer 模型中用于加速 Top-K 采样
  • 推荐系统中的 Top-K 物品排序

方法 3:基于 Bitonic Sort(GPU 友好的排序)

  • 全排序后提取前 K 个元素,适用于 K 不是特别小 的情况。
  • Bitonic Sort 是一种适合 GPU 并行架构的排序算法,支持多线程并行比较交换
  • 复杂度:O(N logN)。

📌 适用场景

  • K 较大,无法使用堆或快速选择的情况下
  • 需要对所有元素排序的任务

方法 4:Warp Reduction + 原子操作

  • 利用 CUDA Warp 级别同步(Warp Shuffle)技术,将多个线程的结果进行归约(Reduction)。
  • 结合原子操作(atomicMax, atomicMin),高效更新 Top-K 值。

📌 适用场景

  • 高吞吐量任务,如大规模图像/文本处理
  • CUDA Warp 级别优化的 Transformer Top-K 计算

3. PyTorch & TensorRT 中的 Top-K CUDA

在 PyTorch 和 TensorRT 中,Top-K 已有高效的 CUDA 实现:

PyTorch 的 torch.topk()

PyTorch 的 torch.topk(input, k, dim, largest=True, sorted=True) 已使用 CUDA 优化:

  • 适用场景
    • NLP Transformer 生成任务(如 ChatGPT 解码)
    • 目标检测后处理(选取 Top-K 置信度目标)
  • 底层实现:采用 堆排序(Heap Sort)+ CUDA 并行化

TensorRT 中的 Top-K

TensorRT 提供 TopK Layer,用于推理优化:

  • 可选择 Top-K 最大值(max mode)Top-K 最小值(min mode)
  • 适用于高性能 Transformer 部署,加速 NLP 生成任务。

sd的训练

Stable Diffusion(SD)是 Latent Diffusion Model (LDM) 的一种,实现了高效的文本到图像(Text-to-Image)生成。它通过 扩散模型(Diffusion Model) 结合 潜空间(Latent Space) 进行训练,能够在较低计算成本下生成高质量图像。


1. Stable Diffusion 训练流程

SD 训练通常包括从头训练微调两种方式。

(1) 从零训练(Full Training)

完整训练一个 SD 需要大量计算资源(通常在 几十到几百块 A100 GPU 规模),包括以下步骤:

  1. 数据准备
    • 采用 LAION-5B、COCO、OpenImages 等图像-文本配对数据集。
    • 统一分辨率(常见 512x512768x768),并进行归一化、增强
  2. VAE 训练(Variational Autoencoder)
    • 高维图像转换到低维潜空间(latent space)。
    • 训练时采用 KL 散度约束,使潜空间信息尽可能丰富。
  3. U-Net 训练(核心扩散模型)
    • 目标:学习从噪声到清晰图像的去噪过程。
    • 训练过程:
      • 向数据中添加噪声(正向扩散)。
      • 训练 U-Net 预测噪声(反向扩散)。
      • 使用**随机调度(Scheduler)**优化噪声去除过程。
  4. CLIP 文本编码器(Text Encoder)训练
    • 采用 OpenAI 的 CLIP 模型ViT-L/14)将文本转换为嵌入向量,用于指导 U-Net 生成图像。

ddpm

Denoising Diffusion Probabilistic Models

DDPM(去噪扩散概率模型) 是一种基于扩散过程(Diffusion Process)的深度生成模型,最早由 Jonathan Ho 等人在 2020 年提出,并应用于图像生成任务(如 Stable Diffusion)。DDPM 通过逐步向图像添加噪声,然后训练一个神经网络逐步去噪,最终生成高质量图像。


1. DDPM 的核心概念

DDPM 主要由两个过程组成:

  1. 前向扩散(Forward Diffusion):向图像添加随机噪声,使其逐步变为纯噪声。
  2. 反向去噪(Reverse Denoising):通过神经网络学习去噪过程,从噪声中恢复原始图像。

整个过程可看作是一个马尔可夫链(Markov Chain),不断地进行随机噪声扩散与去噪。


2. 前向扩散过程(Forward Process)

在前向扩散过程中,给定一个真实数据样本 x0x_0x0​,我们逐步向其添加高斯噪声,使其变得越来越随机,直到接近标准正态分布 N(0,I)\mathcal{N}(0, I)N(0,I):

 

可视化:

  • t=0:原始图像
  • t=100:轻微模糊
  • t=500:几乎不可辨认
  • t=1000:完全变成高斯噪声

3. 反向去噪过程(Reverse Process)

为了从噪声中恢复图像,我们希望逆向学习去噪过程:

4. DDPM 的训练

DDPM 训练目标是最小化去噪误差,即:

 

6. DDPM 进阶优化

尽管 DDPM 生成的图像质量很高,但原版 DDPM 存在两个主要问题:

  1. 生成速度慢(需要 1000+ 步)。
  2. 难以控制图像细节

因此,后续研究提出了多种优化方法:

(1) DDIM(Denoising Diffusion Implicit Model)

  • 提出了 非马尔可夫链 采样方法,使得生成步骤减少到 50~100 步
  • 生成速度比 DDPM 提高 10 倍,但质量接近。

(2) Latent Diffusion(Stable Diffusion)

  • 将扩散过程迁移到 VAE 潜空间(而非像素空间),大幅减少计算量。
  • 采用 CLIP Text Encoder 进行文本引导,实现文本到图像(Text-to-Image)。

7. DDPM 在 Stable Diffusion 中的应用

Stable Diffusion(SD)基于 DDPM 进行改进,主要特点:

  • 在潜空间(Latent Space)中执行扩散,而不是直接在像素空间计算。
  • 使用 CLIP 进行文本引导,控制图像生成风格。
  • 采用 DDIM 采样,提高生成速度。

总结

DDPM 是一种基于马尔可夫链的扩散模型,通过逐步添加 & 去除噪声来生成数据。
DDPM 训练的关键是 U-Net 学习去噪过程,优化均方误差(MSE)损失。
DDPM 的改进版本(DDIM、Stable Diffusion)极大提升了生成效率
DDPM 是当前主流 AI 生成模型(如 SD、Imagen、DALLE-3)的核心技术

 


http://www.ppmy.cn/embedded/158316.html

相关文章

K8S中高级存储之PV和PVC

高级存储 PV和PVC 由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。 PV(Persistent Volume) PV是…

【Leetcode 每日一题】119. 杨辉三角 II

问题背景 给定一个非负索引 r o w I n d e x rowIndex rowIndex,返回「杨辉三角」的第 r o w I n d e x rowIndex rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 数据约束 0 ≤ r o w I n d e x ≤ 33 0 \le rowIndex \le 33 …

【由浅入深认识Maven】第3部分 maven多模块管理

文章目录 第三篇:Maven多模块管理一、前言二. 多模块项目结构1、多模块项目的典型结构2、父POM与子模块POM的关系3、子模块POM配置 三、 多模块项目的构建四、 版本管理与模块间依赖五、 总结 第三篇:Maven多模块管理 一、前言 开发大型项目时&#xf…

7.抽象工厂(Abstract Factory)

抽象工厂与工厂方法极其类似,都是绕开new的,但是有些许不同。 动机 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 假设案例 假设…

2025最新版MySQL安装使用指南

2025最新版MySQL安装使用指南 The Installation and Usage Guide of the Latest Version of Oracle MySQL in 2025 By JacksonML 1. 获取MySQL 打开Chrome浏览器,访问官网链接:https://www.mysql.com/ ,随即打开MySQL官网主页面&#xff…

Springboot使用AOP时,需不需要引入AspectJ?

Springboot使用AOP时,需不需要引入AspectJ? 在Spring Boot中使用AOP时,是否需要引入AspectJ取决于你选择的具体AOP实现方式。以下是详细分步说明: 1. 默认场景:使用Spring AOP(基于代理) 不需要引入AspectJ依赖&am…

OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境

一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源:运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm,将Microsoft软件源添加到系统中,以便后续能够从该源安装.…

2024 ICLR Spotlight Learning-Feedback

机器学习 SalUn: Empowering Machine Unlearning via Gradient-based Weight Saliency in Both Image Classification and Generation 试图解决的问题是机器学习模型中的机器遗忘问题 关注模型中的特定权重而不是整个模型 深度学习 Dictionary Contrastive Forward Learning v…