贝壳一面面试题
一.对推理参数Temperature,top_k和top_p的理解
- Temperature(温度) 工作原理: 模型在预测下一个词时,会为词汇表中的每个词输出一个原始分数(logits)。temperature 会对这些 logits 进行缩放,然后再通过 softmax 转换为概率分布。 公式:prob = softmax(logits / temperature) 取值影响: Temperature越小,输出越稳定,Temperature越大
2.Top-k采样 工作原理: 在每一步生成时,模型对所有词按概率降序排列。 只保留前 k 个最可能的词,其余词的概率设为 0。 然后在这 k 个词中按其调整后的概率进行随机采样。
3.Top-p(Nucleus Sampling,核心采样) 工作原理: 按概率从高到低排序所有候选词。 累加概率,直到总和 ≥ p(例如 0.9)。 只保留这些词,其余截断,然后在该子集中按比例采样。
二.用一些推理框架的时候,能否让大模型的输出绝对一致,比如推理100次输出一样?
用推理框架去推理大模型,在底层cuda的算子上可能会存在一些顺序问题,可能不满足交换律。 先计算算子A再计算算子B和先计算算子B再计算算子A得到的结果不等价。
三.大模型训练过程显存由哪几部分构成?那部分最容易超出显存?用什么技术解决这个问题?
1.模型在训练时的显存占用主要来源于以下四个部分: 模型参数:由模型结构决定,在整个训练周期的显存占用不变 模型梯度:在反向传播时逐渐增加,在优化器更新后释放,峰值大小和参数量相同 优化器状态:比如目前最常用的 AdamW,需要存储梯度的一阶矩和二阶矩,是参数量的两倍 激活值:激活值显存是指模型在前向传播过程中产生的中间计算结果所需的显存。由输入大小决定(batch_size x sequence_length),随着前向传播的进行不断增长,随着反向传播的进行不断减少。 2.针对transformer模型来说,激活值部分最容易超显存,因为要存储注意力分数矩阵这个中间计算结果。而该矩阵的参数量规模是上下文长度的平方,故如果大模型的输入长度很大则该矩阵所占用的显存会爆炸。 3.用flash attention技术可以解决显存随上下文长度平方倍增长的问题。 原理: a)通过核函数 在 GPU 的 SRAM(高速缓存)上进行分块计算,避免将庞大的 QK^T 矩阵写入到显存的HBM(高带宽内存) 中。 b)就是不直接将注意力矩阵存下来,而是通过分块计算的方式直接计算K,Q,V的attention结果。 c)不存储注意力分数矩阵,而是只存储softmax归一化的系数。在反向传播时由于记录下了softmax中的统计值,可以通过它快速计算还原激活值。可以看做是另一种形式的梯度(激活值)检查点。 效果: 它不仅大幅降低显存占用(从 O(L^2) 降到 O(L)),还通过减少 HBM 的 I/O 操作来提升计算速度。目前已成为训练长上下文模型的事实标准。
四.原始dpo强化学习算法有什么问题?该如何解决?
1.原始dpo算法会导致问题:会导致输出序列变长!! 原因:人类标注者或AI裁判(如GPT-4)倾向于给更详细、更全面的回答更高的分数。也就是说一般来说chosen的长度普遍大于rejected的长度,所以模型的输出会越来越长。 2.如何解决? a)长度匹配:在构建 (y_w, y_l) 配对时,有意识地选择长度相近的胜负对。如果无法找到,可以创建多个配对,确保数据集中长回答和短回答既出现在 y_w 也出现在 y_l 中,从而打破“长=好”的绝对关联。 b)算法层面:修改损失函数(最常用和有效),在DPO损失函数中显式地加入长度归一化或长度控制。 消除长度带来的累计优势,更公平地比较不同长度的响应,如下图显示。
发表评论