基本内容

b站视频https://www.bilibili.com/video/BV1fGeAz6Eie/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cbhttps://www.bilibili.com/video/BV1fGeAz6Eie/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cb


NN演化: 

  • 找一个近似解, 然后通过不断的给input来猜, 使近似函数逐渐逼近真实函数 -> 多项式
  • 激活函数, 让近似函数可以弯一弯, 拟合目标。 
  • 一个激活函数不行, 就再套一层: 激活函数(线性(f(x))), 每套一层就是一个hidden layer

激活函数(非线性): relu 
损失函数: |y' - y|
    均方误差(MSE): 平方差/N
增加学习率: |y' - learning_rate * y|


过拟合问题: 

  • 简化模型复杂度
  • 增加训练数据量(数据增强: 图片旋转、翻转)
  • 训练结果: 提前终止、加惩罚项(把参数w作为惩罚项, 减少w变复杂的机会) 
    • L1 norm |w|
    • L2 norm power(w)     
    • 损失函数 = 损失函数+lambda * norm
  • drop_out: 防止模型过度依赖某一个w, 整体训练

问题

  • 梯度消失: 模型越深, 梯度反向传播时会越来越小 
  • 梯度爆炸: 梯度数值越来越大,参数失去控制 
  • 收敛速度过慢:陷入局部最优
  • 计算开销过大: 

具体方法: 

  • 梯度裁剪: 防止梯度更新过大
  • 残差网络: 防止深度网络的 梯度衰减
  • 权重初始化:  使梯度更平滑
  • 归一化: 使梯度更平滑
  • 动量法/RMSProp/Adam: 加速收敛,减少震荡
  • mini-batch: 巨量数据分割, 降低单次计算开销

nlp编码: 

  • 转成数字: 一个字-> 一个数字;问题: 维度太低了, 数字的表示毫无意义, 无法衡量词之间的相关性
  • one-hot: 一个字是一个向量, 每个向量只有一个位置是1;    问题: 维度太高了, 非常稀疏, 词之间仍然找不到相关性
  • 词嵌入(word embedding): 上两者的演化。 维度不高不低, 但能表示词之间相关性
    • 相关性的求解: 
      • 点积: a · b = Σ (aᵢ * bᵢ) (i从1到n)
      • 余弦相似度: cos(theta) = (a · b) / (|a| · |b| )
    •  word2vec

CNN 
通过卷积核: 达到: 模糊效果、浮雕效果、轮廓效果、锐化效果
卷积核是未知的, 被训练出来的
池化层: 对卷积层降维、减少计算量、保留主要特征

思考: 
为什么适用于图片:因为图片的单像素信息密度太低, 需要将几个像素点聚合, 成为一个可分析、并能够作为一个特征提取的单位。 卷积就是这个特征的单位

适用于: 静态特征: 图片


RNN/GRU/LSTM 

动态特征:时间序列、文本、语音、视频
目标的场景: 给几个字的提示, 输出下一个字


RNN
    场景: 第二个词跟第一个词无法关联, 所以RNN提出,第二个词= f(w2) + H(w1)
        h1 = g(wX1 + b)          # w: wxh矩阵
        Y1 = g(wH1 + b)            # w: why矩阵
        h2 = g(wX2 + wH1 + b)        # w: wxh矩阵, whh矩阵
        Y2 = g(wH2 + b)   # 最终输出结构 
    总结一下: 
        ht = g1(wxhXt  + whhHt-1 + bh)
        yt = g2(whyHt + by)
    问题: 
        无法捕捉长期依赖: 有的词离另一个很远,但有关系
        无法并行计算: 必须一个算完,另一个算

请添加图片描述

GRU 公式
重置门(Reset Gate) $r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r)$
更新门(Update Gate) $z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z)$
候选隐藏状态 $\tilde{h}_t = \tanh(W \cdot [r_t \odot h_{t-1}, x_t] + b)$
最终隐藏状态  $h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t$


LSTM 公式
输入门(Input Gate)  $i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$
遗忘门(Forget Gate)  $f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$
候选记忆单元  $\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$
记忆单元更新  $C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$
输出门(Output Gate)  $o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)$
隐藏状态输出  $h_t = o_t \odot \tanh(C_t)$


transformer (重中之重, 反复背诵)

示例图片
图片解释: 
左侧为encoder, 右侧为decoder
左侧: 计算出来: K,V矩阵, 输入到右侧
右侧: 中间的输入是: Q矩阵(为什么这里是Q矩阵, 原因在于输入做了Mask, 也就是翻译任务中, mask了后面的字符, 需要给定前面的字符, 猜下一个字符了
decoder之后: 经过一个Linear层(全连接层)线性变换,投射到词表向量中。 softmax计算概率 


特点: 

  • 位置编码(position encoding)
  • 自注意力机制
  • 多头注意力
  • 前馈神经网络FFN
  • 堆叠编码器-解码器层实现序列建模


总体架构(编码器部分 Encoder)
编码器层的计算公式:$$ \text{EncoderLayer}(x) = \text{LayerNorm}(x + \text{Dropout}(\text{MultiHeadAttention}(x, x, x))) $$ $$ \text{Output} = \text{LayerNorm}(z + \text{Dropout}(\text{FFN}(z))) $$

其中$z$为第一个子层的输出。


训练优化技术

  • 残差连接与层归一化加速收敛
  • 标签平滑(Label Smoothing)提升泛化能力
  • 学习率预热(Learning Rate Warmup)策略稳定训练过程

残差连接(Residual Connection)

  • 残差连接的公式如下:$y = F(x) + x$
  • 其中:$x$ 是输入,$F(x)$ 是神经网络的变换函数,$y$ 是输出

Bert

模型: 

1. Encoder-only模型: 

  • 预训练的任务: MLM( mask language model: mask一部分词, 训练完猜这些词)+ NSP: 
  • 与原Transformer不同的结构变化
    • 位置编码: 可学习的位置嵌入, 与transformer固定位置编码不同。
    • 思考: 已经有一个可训练的词向量, 为什么还要加一个位置的向量?我的理解是, 词embedding与位置embedding的维度不同, 词可以有上万个, 位置embedding如bert是512长度; 维度不同会导致学习后的矩阵信息压缩的程度不同, 信息压缩覆盖的信息范围不同
  • vs transformer 
    • 设计目标: transformer: 序列2序列, bert: NLU任务, 分类, 问答
    • 上下文建模: tranformer, encoder双向, decoder单向。 bert: 全双向
    • 训练范式: transformer: 端到端生成, bert: 预训练 + 微调
    • 生成能力: transformer: 原生支持生成, bert: 需要后面添加decoder层?或生成head

2. transformer: 

  • 优点: 通用性强, decoder生成能力原生支持
  • 缺点: decoder的结构导致理解能力有缺失, 计算成本高
  • 发展方向: decoder-only的各种生成式模型、多模态
  • 目标场景: 机器翻译、文本摘要、代码生成、对话系统
    • 需要统一建模 理解 + 生成

bert:

  • 优点:理解能力强 + 训练效率高 + 微调适配性好
  • 缺点: 生成能力弱 + 长序列处理受限
  • 发展方向: 
    •  优化训练策略: Roberta(动态掩码)、Albert(参数轻量化)、ELECTRA(替换检测任务)。 
    •  长文本增强: Longformer(滑窗注意力)、BigBerd(稀疏注意力)
  • 目标方向: 纯语义理解、意图识别、信息检索、事实核查
    •  效率敏感的场景(实时推荐?边缘设备上的语义分析)

尝试融合两种模式的论文: T5, UL2


层归一化(Layer Normalization)

层归一化的公式如下:$y = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \beta$
其中:$x$ 是输入,$\mu$ 是均值,计算方式为 $\mu = \frac{1}{H}\sum_{i=1}^{H}x_i$,$\sigma^2$ 是方差,计算方式为 $\sigma^2 = \frac{1}{H}\sum_{i=1}^{H}(x_i - \mu)^2$,$H$ 是隐藏层维度,$\epsilon$ 是防止除零的小常数,$\gamma$ 和 $\beta$ 是可学习的缩放和偏移参数,$y$ 是归一化后的输出

RMSNorm 

Layer Norm -> RMSNorm

Layer Norm:         

  • 公式: x = (x - 均值)/标准差。 标准差 = sqrt(power(x-均值))/d + 系数   标准差里带了个小系数, 防止除0. 
  • 为了可学习, 加一个w和b; y = r*x + b

RMSNorm: 

  • 公式: x = x/rms() 。 rms(sqrt([power(x) + 小系数] /d) 
  • 不要均值了, 做近似归一就行了

自注意力

计算查询(Q)、键(K)、值(V)矩阵的缩放点积注意力:$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$
其中\(d_k\)为键向量维度,**缩放**因子防止梯度消失。

QK相乘: 得到一个相似度系数的矩阵, query中的每一个词跟其他位置的词, 计算相关性
和V相乘: 得到一个包含上下文信息的词向量矩阵

QKV 分别表示什么

1. Q(Query,查询向量)
    •    表示“我要找什么信息”
    •    每个 token(例如一个词)会生成一个 Query,表示它希望从其他 token 中获取哪些相关信息。

2. K(Key,键向量)
    •    表示“我能提供什么信息”
    •    每个 token 会生成一个 Key,用来与其他 token 的 Query 进行匹配。

3. V(Value,值向量)
    •    表示“具体要传递给对方的信息内容”
    •    如果 Query 和 Key 匹配得高(注意力高),对应的 Value 就会被加权加入到输出中。

多头注意力

(给多次机会, 从n个不同角度的向量)
并行执行多组自注意力计算,增强模型捕捉不同子空间信息的能力:
多头注意力机制公式(拼接各个头, 并*全连接层):$$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O $$
每个注意力头的计算方式为:$$ \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) $$
$W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}$,$W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}$,$W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}$,$W^O \in \mathbb{R}^{hd_v \times d_{\text{model}}}$,$h$:注意力头的数量

每个注意力头独立学习不同表征模式。

MHA/MQA/GQA学习: 

https://www.bilibili.com/video/BV17CPkeEE5d/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cbhttps://www.bilibili.com/video/BV17CPkeEE5d/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cb

MHA:

Multi-Head Attention: 标准注意力, 每个注意力头的组成是标准attention

KV Cache问题: https://www.bilibili.com/video/BV1kx4y1x7bu?spm_id_from=333.788.player.player_end_recommend&vd_source=8ca92588511fc633026e558331f021cb&trackid=web_related_0.router-related-2206146-n6d7k.1763612784852.504https://www.bilibili.com/video/BV1kx4y1x7bu?spm_id_from=333.788.player.player_end_recommend&vd_source=8ca92588511fc633026e558331f021cb&trackid=web_related_0.router-related-2206146-n6d7k.1763612784852.504

问题: 越往每一个字的后面计算, 发现后面的字只用到了前面的KV, 空间换时间 , 所以缓存了每一个KV Cache

FlashAttention

FlashAttention1 (2022):  比传统attention快2-4倍

1. 将 Q/K/V 按 GPU 缓存容量分块,避免存储中间结果(如注意力矩阵),显著降低内存占用。计算过程中采用重计算(recomputation)策略,减少显存需求。

       注意这里: 计算 QK^T、softmax 和乘 V 的过程中分别调用多个 kernel

2. 同时通过nvidia cuda 融合内核(kernel fusion)减少内存读写操作,提升计算吞吐量。

提升: 

  • 速度提升:相比传统注意力实现,训练速度可提升2-4倍。
  • 显存节省:内存占用O(N2)降低为线性复杂度(O(N)),支持更长序列处理。
  • 精度保留:通过数值稳定化技术(如缩放),保持与标准注意力相同的模型精度。
FlashAttention2 (2023年): 比flashattention1 快2倍
  • FlashAttention的分块和nvidia融合内核都支持 
  • 计算修改: 
    • FlashAttention 2 将 QK^T→softmax→×V 三步全部融合在一个 CUDA kernel 中完成,无需中间写入 global memory,代码也更工程化。
    • 反向传播阶段,使用minimal FLOPs版本kernel,减少非matmul FLOPs,仅重建需要反向链条的部分。
  • 改进线程块划分:
    • 调整块大小,通常设置为{64, 128} × {64, 128}时效果较佳。
    • 同时,优化线程块内循环顺序,在前向传播中将Q设为外循环,KV设为内循环,使每个warp无需同步等待,加快运算。

vs v1: 

  • v1 在序列维度并行 (每个线程块处理一个序列位置)。Qi
  • v2 在序列维度切分块 (Tile),在块内并行计算。Q[block]
  • 效果: 将计算密集型操作 (如矩阵乘法) 集中在一起,减少了对高带宽显存的访问次数和同步开销。
FlashAttention3(2024)
  • 将分块计算和重计算融合成一个单一的操作符。效果: 避免了在分块计算中反复加载/存储中间状态的开销,进一步减少了显存访问次数。
  • 芯片从FlashAttention2适配的A100 转为H100, Hopper架构?, 所以适配了新算子?

总结

  • v1: 革命性地解决了显存瓶颈 ($O(N^2) \to O(N)$),通过分块计算和重计算。
  • v2: 在 v1 基础上,优化算法流程和并行策略,减少非矩阵乘法开销,提升速度。Qi -> Q[block], 一个block的attention放一个kernel里完成
  • v3: 引入新的计算范式 (融合分块与重计算),进行更深度的硬件感知优化,追求极致性能。

一些没用的碎碎念: 

H20:

  • 显存最大、带宽最高?所以deepseek,用KV缓存策略?
  • Hopper架构, 比A100架构好一点。
  • 支持多实例GPU技术(讲一个GPU画成多个实例)。 比H100砍掉RT Core。图像缺功能、安全缺功能

A100训推均衡, 能耗还可以。 Ampere架构

H100:极致性能

芯片显存: SRAM(计算最快最小)、HBM(带宽最大, 传输最快)、DRAM(便宜


MQA: 

  • 场景: 用于解决KV cache的体积过大的问题
  • 保留一个: 只保留一个KV并可以共享: 第i个查询头公式:        

GQA: 

  • 场景: MQA,KV只有一个, 提取的特征缺失
  • 处理: 几个头 group共享一个KV

MLA

重要链接:https://www.bilibili.com/video/BV1yspRzPEw8/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cbhttps://www.bilibili.com/video/BV1yspRzPEw8/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cb

策略1(投影矩阵):

  • 场景: GQA的KV 是Xi的直接投影、再复制、在分割,(硬切分损失语义)
  • 处理: KV都基于ci(简单理解成子kv)生成?

策略2: dot-attention 的恒等变换

  • 场景:策略1 导致问题: 会导致KV反而变大?
  • 处理:
    • 训练阶段照常。 推理阶段: qk = (x*wq) * (ci* wk).transpose() = x(wq * wk.transpose()) * ci.transpose()
    • (wq * wk.transpose()) 变成新的query投影阵, ki: ci.transpose()
    • 没太搞懂。 反正就是k、v都可转换为一个对ci的存储的计算
    • 附带问题: 当MLA+ RoPE 且RoPE放到attention里 + 相对位置编码(作为一个变量在Q* K中),这个位置开始对前一个位置有依赖了。 不能保证相对位置不变(RoPE目标)
      • 解决方式: Q、K新增一些维度用于跟RoPE

策略3: 

  • 问题: 模型训练时的显存占用来自于两部分: 模型参数(静态, 各种w), 激活值(动态, 各种激活函数弄出来的中间值)。要减少激活值占的显存。
  • 解决方式: 对Q做低秩投影

FFN 

Position-wise Feed-Forward Networks

前馈网络公式:$$ \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 $$

参数说明:$W_1 \in \mathbb{R}^{d_{\text{model}} \times d_{ff}}$,$W_2 \in \mathbb{R}^{d_{ff} \times d_{\text{model}}}$,$d_{ff}$:内部隐藏层维度(通常为2048)

MOE

重点视频

https://www.bilibili.com/video/BV1Gj9ZYdE4N/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cbhttps://www.bilibili.com/video/BV1Gj9ZYdE4N/?spm_id_from=333.337.search-card.all.click&vd_source=8ca92588511fc633026e558331f021cb

架构:

  • FFN层前加一个router: FFN+ softmax, 可以输出多个expert的概率
  • FFN层换成MOE层。 FFN切成几个group, 每个group是一个专家。 N.B.: 注意每一个decoder 层的FFN都是MOE专家
  • 聚合结果: F(MOEs), 加权求和
  • 每层专家的组合是一个path

演变: 大参数少专家-> 小参数多专家, 有负载均衡问题。 现在的趋势是看怎么解决负载均衡问题

小参数多专家优点:

  • 计算效率更高、扩展性更强、部署成本更低
  • 更高参数量、推理成本低、任务适配性高

问题: 有些专家算的慢, 有的快。 模型倾向于选算的快的

均衡负载(load-balancing)处理:

  • 加噪声: output = x * weight + N。 N指Gaussian noise,某些专家使唤太多了,就给他点噪声, 让别的能训练
  • keep top-k:  output 选前top-k个专家
  • 加个loss: 生成一个专家重要性系数矩阵CV(加总每个专家的调用次数), 加到loss上, 作为惩罚? (辅助损失 Auxiliary Loss)
    • 最后生成一个CV * weight(weight训练完后负责均衡)
  • 专家容量(expert capacity): 限制每个专家能处理的token数,硬逼专家不工作

位置编码(需要解决的问题: 1.位置需要数值化可计算 2.位置的含义应该是相对的 3.没见过的位置如何编码 4.使编码可训练?)

固定位置编码(transformer里 使用sin来做编码。 硬编码, 不能修改):

采用正弦位置编码注入序列顺序信息:$$ PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{\text{model}}}) $$ $$ PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{\text{model}}}) $$

其中:$pos$:位置序号,$i$:维度索引,$d_{\text{model}}$:模型维度

Bert:可训练的编码。 

问题: 对没见过的序列长度泛化能力差

相对位置编码: 

  • 将相对位置信息直接注入注意力计算,使用可学习的嵌入表编码相对距离。
  • 公式: Attention 公式中的qk -> qk + qr. r是相对位置

RoPE 旋转位置编码

  • 绝对位置信息融入自注意力机制中的键和查询向量。使得模型能够捕捉相对位置关系。
  • 其核心思想是对位置信息进行旋转操作,        
  • 具体实现中,每个位置通过复数域的旋转矩阵变换,将位置编码与词向量相结合。
  • 优势: 能够保持相对位置不变性,同时支持任意长度的序列扩展。

数学表达上,给定位置$m$和$n$,查询向量$q_m$和键向量$k_n$的注意力分数计算为: $$ \text{Attention}(q_m, k_n) = (q_m e^{im\theta})^T (k_n e^{in\theta}) = q_m^T k_n e^{i(m-n)\theta} $$ 其中$\theta$为旋转角度参数,$i$为虚数单位。


激活函数: 

1. 传统激活函数(基本不用了)

激活函数

特点

Sigmoid

易饱和、梯度消失;不再用于深层网络。

Tanh

比 sigmoid 好,但仍易梯度消失。

ReLU

目前最经典;计算简单;但会有 “ReLU 死亡” 问题。cv很有效, nlp不行

Leaky ReLU

减少死亡 ReLU,负区间给一点斜率。

PReLU

leaky 斜率可学习。

2. 平滑类 / 优化类激活函数

激活函数

特点与用途

GELU

Gaussian Error Linear Unit;光滑 ReLU;Transformer 系列最经典。

Swish

x * sigmoid(x),Google 提出的;性能好。

SiLU

swish 的另一个名字(Pytorch 名称)。

ELU / SELU

比 ReLU 更平滑,但不用于 LLM。

3. 支持大模型稳定训练的激活函数

激活函数

特点

GLU (Gated Linear Units)

有门控机制;经常用在 LLM 中。

SwiGLU

swish + GLU;现在最主流 LLM 激活函数。

GeGLU

gelu + GLU;性能强,部分 LLM 使用。

ReGLU

relu + GLU;也有使用,但较少。

公式: (todo)

结论:现代主流大模型(GPT-4 / GPT-4o / Qwen2 / LLaMA3 / Mistral / Claude3 / Baichuan2 等)几乎都使用 GLU 家族,特别是 SwiGLU。

原因:

  1. 收敛更稳定,梯度更平滑

  2. 在 Transformer FFN 中更强表达能力

  3. 训练巨型模型(>10B 参数)时更稳定

  4. 比 GELU 实测能提升 2–5% 任务性能

  5. 计算量不大,适合大模型


优化器

类型

1. 经典优化器

优化器

特点

SGD

最基础;收敛稳定但慢。

SGD + Momentum

加速收敛、减少震荡。

Nesterov Momentum

更快的动量版本。

2. 自适应学习率(Adaptive)优化器

这些是深度学习主流:

Optimizer

特点

Adam

最经典;适合 NLP;收敛快。

AdamW

Adam + decoupled weight decay;🔥 成为最常用优化器。

RMSProp

更适合 RNN;现在少用了。

Adagrad

老牌;学习率随时间下降。

Adadelta

Adagrad 改进版。

3. 面向大规模训练的新型优化器

Optimizer

特点

LAMB

可训练 100B+ 参数,适合大 batch。

LARS

ResNet、CNN 用的多;大 batch 稳定。

Adafactor

节省显存;T5 默认优化器。

Lion(2023)

比 Adam 更省显存,优化效果好(By Google)。

Sophia-g(2023)

用二阶 Hessian 信息;训练 LLM 更快。

LLM使用的优化器

结论:现今几乎所有主流 LLM 都使用 AdamW(含特定变体,如 Decoupled Weight Decay + Warmup)。(0.9, 0.95))

选AdamW原因

1. 收敛稳定

  • 对深层 Transformer 友好

  • 对稀疏梯度、长序列非常稳

2. 权重衰减与 Adam 解耦

减少 overfitting,训练更平滑。

3. 对超大模型更 robust

LLM 往往训练几万亿 tokens,AdamW 更可靠。

4. 实现成熟、高效

如:

  • FusedAdamW(NVIDIA)

  • DeepSpeed ZeRO 优化器

生态完善。

有哪些新优化器在挑战 AdamW?

1. Lion(Google 2023)

  • 优势:更少内存,更快训练。

  • 部分开源 LLM(如 Pythia)开始尝试,但仍不是主流。

2. Sophia-g(2023)

  • 利用 Hessian 近似,二阶信息优化

  • 在 LLM 训练中加速效果明显

  • 学界关注度高,但工业界采用较少

3. PagedAdamW(DeepSpeed)

  • 针对大模型分布式训练

  • 更省显存


推理加速:

vllm

重点视频: 

https://www.bilibili.com/video/BV1kx4y1x7bu?t=27.2https://www.bilibili.com/video/BV1kx4y1x7bu?t=27.2

出现的目的: 为了处理attention机制中, KV cache缓存导致的碎片问题

具体策略: 

Page Attention(os: 处理内存碎片):

  • 把预分配一大块(不知道未来要生成多少个字, 所以按最大字数分配) ->   变成切成一个块, 按需分配, 不提前占用
  • 虚拟内存: 逻辑和物理存储弄个映射表

KV blocks的共享, share KV : 

  • 场景: 一个prompt想生成多个output ? 不知道这个是咋用。 Beam Search场景
  • 解决方式:blocks设一个引用计数器, 被引用实现一次, 计数-1。如果剩余计数是1, 说明直接用就行。 如果> 1, 复制一份再用

成果:系统可以吞吐更大的batch_size

代码:

from vllm import LLM, SqmplingParams
sampling_params = SamplingParams()
llm = LLM (model =')
output = llm.generate(prompts, sampling_params)

主流大模型核心信息对比表

架构 调优特性 算法结构
GPT-4

openAI

1. 核心为多头自注意力机制,精准捕捉序列中局部与全局依赖关系;
2. 采用多层 Transformer 堆叠设计,每层包含自注意力模块与前馈神经网络模块;
3. 通过残差连接与层归一化优化训练稳定性,提升模型收敛效率。
LLaMA 3 预训练中,覆盖多语种, 适合多语种微调

基于 Transformer 架构,

Grouped-Query Attention(GQA),多个注意力头共享相同的键和值投影,减少内存使用,降低模型参数量,在推理期间也能减少键值缓存(KV cache)的内存带宽使用。

百川   百川智能
文心一言 百度

通义千问 阿里

基于 Transformer 架构,

旋转位置嵌入(RoPE)等技术,长文本优秀

Grouped-Query Attention 

DeepSeek-V3

以 DeepSeek-V3 为例,

采用多头潜在注意力(MLA)和专家混合(MoE)架构。

MLA 将键和值张量压缩到低维空间后存储到 KV 缓存中,推理时再投影回原始大小,可显著减少内存使用量,且性能优于传统的多头注意力(MHA)。

MoE 则是将 Transformer 块中的每个前馈模块替换为多个专家层,由路由器为每个 token 选择一小部分专家处理,DeepSeek-V3 有 256 个专家,推理时每次只激活 9 个专家,其中包括 1 个共享专家。

微调工具: 

在线平台

离线工具: llama factory ,ms-swift

python库: tr1

https://www.bilibili.com/video/BV1NSk6B8E67?spm_id_from=333.788.videopod.sections&vd_source=8ca92588511fc633026e558331f021cbhttps://www.bilibili.com/video/BV1NSk6B8E67?spm_id_from=333.788.videopod.sections&vd_source=8ca92588511fc633026e558331f021cb

llama Factory: (todo)

  • 框架特性: 
  • 模型种类: LLaMA, Qwen
  • 训练算法: (增量)预训练, (多模态)指令监督微调,奖励模型训练, PPO训练, DPO训练, KTO训练, ORPO训练
  • 运算精度: 16bit全参微调、冻结微调、LoRA微调、基于AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的2/3/4/5/6/8 bit QLoRA微调
  • 优化算法: GaLore、BAdam、DoRA、LongLoRA、LLaMAPro、Mixture-of-Depths、LoRA+、LoftQ和PiSSA
  • 加速算子: FlashAttention-2 和 Unsloth
  • 推理引擎: Transformers 和vllm
  • 实时监控:LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab

数据集格式: 

  • Alpaca: (instruction, input, output)
  • ShareGPT (messages role, content)            

算法

使用标注数据直接进行微调
LoRA(todo)

一些思考: 

Lora/ PCA:

  • 都是在尝试解决线性空间中一组wb与另一组wb不是线性独立的
  • 通过扔掉这些没用的wb, 降低复杂度, 减少计算量

使用tr1 & swift 

unsloth 


强化学习RLHF: 各种PO(todo): PPO, PRO, DPO, GRPO
指令微调

闲聊

热词: 

  • temperature: 控制随机性, temerature升高, 随机性升高, 使模型生成下一个词并不是之前概率最高的那个词
  • top-k: 使模型从概率最高的top-k个值里做选择

幻觉: 

  • 问题原因: 
    • transformer本身是一种预测下一个词概率的模型, 本身没有逻辑性,
    • 所以进一步分析: 语料本身,没这个内容, 或者频率不够大
  • 解决方式:  
    • context里加上检索信息, 拼起来发给大模型。 
    • 两种方式: 拼上搜索引擎的公开答案 or RAG( 使用公司内部信息。文字 -> embedding -> 上向量数据库中搜索(向量检索))

llm 发展快到极限
- 模型大小到极限: 一个顶级大模型, 训练成本1亿美元
- 模型能力到极限: 顶级模型间能力差距越来越小, 2023年顶级模型间差距12%, 2025年5.4%. 前两名4.9% -> 0.7%

所以开始卷其他方向: 

  •  模型压缩: 
    •  量化、
    •  蒸馏: 大模型教小模型
    •  剪枝: 去掉不重要的神经元     
  •   Lora、Qlora、adapter: 更低成本微调             
  •   推理方向: CoT, 思维链     
  •   RLHF: 人类反馈强化学习     
  •   套壳: 封装并提供服务     
  •   周边: 卖铲子

NLP: ChatGPT、Claude、Gemini、 DeepSeek、豆包、通义千问、腾讯元宝

CV: Midjourney, Stable Diffusion, ComfyUI(会话工作流?)
文本转语音: TTS
语音转文字: ASR
视频: Sora、Kling、即梦
数字人: 

GPU
TPU: 专门针对人工智能训练、推理
NPU: 终端设备推理, 终端加速芯片

AI编程助手 : 
    软件: cursor
    插件: Github Copilot 

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐