一次学习一个 Triton 内核:Softmax

关于快速、可读且支持 PyTorch 的 softmax 内核,您需要了解的所有信息这篇文章《一次学习 Triton 一个内核:Softmax》首先出现在《走向数据科学》上。

来源:走向数据科学

在本系列的上一篇文章中,计算机科学各个领域的运算:矩阵乘法。它在神经网络中大量用于计算线性层的激活。然而,激活本身很难解释,因为它们的值和统计数据(平均值、方差、最小-最大幅度)在层与层之间可能有很大差异。这是我们使用激活函数的原因之一,例如逻辑函数(又名 sigmoid),它可以投影 [0; 中的任何实数; 1]范围。

上一篇文章 [0; 1]

softmax函数,也称为归一化指数函数,是sigmoid的多维推广。它将原始分数 (logits) 向量转换为 M 个类别的概率分布。我们可以将其解释为加权平均值,其表现为平滑函数并且可以方便地微分。它是点积注意力、语言建模和多项逻辑回归的重要组成部分。

概率分布 中号 加权平均值 平滑函数 差异化

在本文中,我们将介绍:

    在 Triton 中实现高效的 softmax 内核。实现向后传递 (autograd)。优化:缓存修改器和自动调整。
  • 在 Triton 中实现高效的 softmax 内核。
  • 实现向后传递 (autograd)。
  • 自动分级
  • 优化:缓存修改器和自动调整。
  • 如果你还不熟悉 Triton,请参阅之前的文章!

    免责声明:除特别说明外,所有插图和动画均由作者制作。

    定义

    softmax 定义如下:

    归一化确保向量总和为 1,以便可以将其解释为有效的概率分布。

    1 数值溢出 float16 65 504 exp(11) exp(z_i) 溢出

    缓解此问题的常见技巧是从每个元素中减去输入向量的最大值,这样新的最大值在求幂之前为 0,在求幂之后为 1。

    0

    简单的实现

    两次归约操作 最大 总和

    在线 Softmax

    2 x