24 Matching Annotations
  1. Last 7 days
    1. 并行归约

      并行归约是指:在并行计算中,将分布在 N 个不同处理单元(线程/核心) 上的大量数据,通过某个满足结合律(Associative)和交换律(Commutative)的二元运算符(如 +、*、max、min),“多对一”地合并成最终的一个(或一小批)结果的过程。

      串行思维:for i in range(N): sum += arr[i](需要 N 步,依次等待)。

      并行思维:N 个人各拿一个数,两两配对相加,不断合并,直到剩下最后一个人拿着总和。 2^k=N,经过k轮运算,每轮处理一半的数据,处理完N个样本。复杂度为O(log(N))

      并行归约的本质是利用树形拓扑将对一维数组的累加复杂度从 O(N) 降到 O(log N)

    2. exp 溢出、除零、消减或长归约误差

      溢出:exp指数超出float 除零错误 消减误差:大数相减,小精度丧失 长规约误差:多个小数相加,后面的小数省略产生误差。

    3. 广播、转置或非连续 stride

      广播:多个变量访问一块内存 转置:矩阵转置 stride是矩阵的访问步长,矩阵元素在gpu中连续存储,用stride控制如何访问(如访问第几行第n个元素),当stride和尺寸不一致,访问不连续

    4. 理论最小访存量

      这个问题分析:一个 kernel 到底是算力瓶颈还是内存瓶颈。 假设矩阵A(MK),B(KN),C(MN),则共需要读写MN+MK+KN次。 好的kernel希望一次加载,多次复用,计算强度AI=FLOPS/memory. 优化后一个tile,可以供多个计算步骤使用。

    5. 能否分块?

      分块 tileling 不能分块的情况: (1). 前面一个对后面一个存在强依赖关系,前面结果是后面的输入 (2) 数据量太小,分块后通信开销比不分块大 (3)计算需要全局信息。分块后前面信息丢失,无法计算完整结果

    6. 分布式均值

      每个GPU计算的样本数量不一定相同,每个GPU有一个均值计算所有GPU就要分布式均值。将一个batch切分,放到多个GPU上并行运行。accuracy,loss等都需要所有batch计算后的整体均值

    7. Online Softmax 的分块合并

      把大块attention切分成小块attention减少显存开销。 原来大块attention需要保存S^2矩阵在显存中,计算小块attention,不用保存完整attention.用完就丢,节省显存

    8. Dh\sqrt{D_h}Dh​

      每个head的Q,K维度为S*D, attention score =QK^T,每个token和哪个token有关。

      QK^T得到矩阵维度为S*S,但每个元素的长度都是Dh,由Dh次乘法加法得到,用于归一化

    9. X

      X乘权重W,维度是W(H,H),乘完后Q,K,V维度为BSH。 1. 因为Transformer使用多头注意力机制,有N个头,每个都维度为D。所以BSND 2. 因为attention需要计算QK^T, 希望每个head单独计算,因此希望维度为BNSD。(每个head单独计算的Q,K维度为S*D).因为一次batch和head.都希望作为并行维度,所以前面要再乘B,N.

      使用transpose可以交换指定轴的维度transpose(1,2),交换1,2维维度

    10. 反向传播中的 FP16 小梯度可能下溢为 0

      混合精度训练(FP16/BF16)中的 Loss Scaling(损失缩放)技术,反向传播时FP16能表示的最小为6*10^-8,若最小梯度为10^-8,则下溢为0。

      把梯度先放大,反向传播后再除S恢复正确数值。

    11. 不能被二进制浮点精确表

      无限循环小数只能被二进制有限表示。当绝对数值越大,精度越差。 如1.m2^e, m是尾数,e是指数,如1.2310^4.e越大,数值范围越大,尾数固定,由于指数导致的范围很大,可表示的精度就越小

    12. 7.8 RMSNorm

      Layernorm的简化版本,RMSEnorm计算更快 LayerNorm:需要: 求mean 求variance 标准化

      RMSNorm:只需要: 求平方和 开根号

      减少: reduction次数 memory访问 kernel计算

    13. Adam

      反向传播时需要参数更新,SGD是传统参数更新方法。然而只考虑当前梯度,当batchsize太小时,会出现噪声而导致更新不准确。(batch中一次全是猫,一次全是狗)。

      动量把历史值通过权重考虑进去,Adam在动量的基础上又考虑了多个参数更新时量级不一致的问题。如w1=10000eta,w2=0.00001eta, 可能一次更新某个参数基本无变化。Adam通过一阶m(梯度方向),二阶v(步长大小),解决不同参数的更新问题

  2. Jul 2026