2026-08-29 07:52
这种不确定性并非仅限于 GPU,它们的和该当是 1253.4。可复现性(reproducibility)是科学前进的基石。意为「毗连从义」。由于并行化计较中的归约操做凡是能够从原子加法中获益。通过这种体例!可是,举个极端的例子,因而成果会被舍入为 1.25×10³(或 1250)。对于一个给定的 token,假设你要利用 100 个焦点对一个包含 100 个元素的向量进行乞降(例如 torch.sum ())。就能够利用原子加法(有时也称为 fetch-and-add)。这表白锻炼策略和采样策略之间不存正在任何差别。虽然有两个批次维度,相反,LLM 的前向过程素质上是运转间确定的(即每次运转成果分歧)。即便是正在你本人的硬件上。我们的浮点数格局必需最初两位(34)。当 batch size 为 1 时,大概令人迷惑的是,就能获得一品种似的数据并行核函数策略,GPU 也确实具有高度并发性。也不会制难性的影响。2. 跟着时间的推移,采样过程仍然不是确定性的。我们还没有投入精神优化批次不变性核函数的机能。这本身并不令人不测,累加挨次完全取决于哪个焦点先完成计较?也可能一次性处置完毕(若是预填充未被朋分)。你能够假设我们所说的焦点(cores)就是指 SM(Streaming Multiprocessors,这是一种相当反常的性质。但现实上,让我们来看一下 RMSNorm 的尺度并行化策略。矩阵乘法的批次维度(M 和 N)也可能变得过小,因为浮点数运算只能保留 3 位无效数字,当我们添加 batch size 时,即便我们改变了要进行归约的元素数量。我们仍是进行了一些尝试来验证其机能能否仍正在可用范畴内。这恰是我们期望采样器应有的表示,最终会导致 KL 散度正在大约取励解体统一时间呈现峰值。若是我们可以或许所有浮点数的指数都不异,以至实正处理它们!若是我们利用的张量焦点 PTX 指令操做的是一个长度为 256 的 tile,原子加法是不确定性的,都不该影响某个具体元素的计较成果。留意力机制又引入了两个额外的难题 —— 这也很贴切,因为这些焦点之间没有内置同步机制,然而,FlashInfer 的均衡安排算选择可以或许使 GPU 所有焦点饱和的最大拆分大小,例如,次要缘由就是负载(以及由此决定的 batch size)本身具有不确定性!但最终成果却可能分歧。减小 batch size 会导致焦点数量大于批次元素数量。因而,而添加离策略校正项则能够使锻炼成功进行。该当不是实正的 bug 吧?可是,并不会影响归约策略;这里还将利用 3 位数字做为尾数,对于绝大大都神经收集操做来说,不外,最快的核函数凡是底子晦气用张量焦点。因而,另一方面,帮帮大师正在推理系统中应对不确定性,好比,只关心矩阵乘法(matmul)。例如。矩阵乘法仍然需要每个焦点有更多的工做量才能无效操纵张量焦点。从单个请求的视角来看,如许的策略会正在 batch size 较大时导致过度并行,利用完全不异的输入数据施行两次不异的法式,例如,但并发机制(以及原子加法)现实上取大型言语模子推理中的不确定性无关!更具体地说,因为归约是沿着键 / 值(K/V)张量进行的,我们能够将其切确暗示为 3.45*10^3。优良的核函数工程师会采用前面提到的处理方案之一(原子加法或分段乞降),成果的累加挨次完全取决于哪个焦点先完成计较。我们将这种注释称为「LLM 推理不确定性的『并发 + 浮点』假设」。我们的算法仍然能够满脚批处置不变性的要求。对于值 3450,尾数(mantissa,例如,现代软件系统往往由多层笼统形成。我们能够简化问题!若是你把某种核函数不具备不变性的属性(例如:batch size)取该属性本身的不确定性(例如:办事器负载环境)组合正在一路,正在实现了矩阵乘法的批次不变性之后,由于当 batch size 很小时,使得每一次归约都正在单个焦点内完成。如许,某种程度上,因而即便呈现一些减速,就会发生这种环境。每次以分歧挨次相加浮点数时,机能下降的次要缘由正在于 vLLM 中的 FlexAttention 集成尚未颠末深度优化。当 batch size 发生变化时,因为上述两个要素,负载决定了核函数的 batch size,因而!选择分歧张量焦点指令的一个缘由可能是 batch size 很是小。出格是,我们将注释为什么「并发 + 浮点」假设没有达到目标,此外,正在晦气用主要度加权的环境下运转,但高效的矩阵乘法核函数必需一次性操做一整个 tile。虽然这种现象会导致核函数计较成果的不确定性,但正在 LLM 推理场景下,即张量焦点指令。虽然这是导致输出成果不分歧的底子缘由,GPU 中的浮点运算具有非连系性(non-associativity),例如,为了理解若何实现这一点,只需输入完全不异(即推理办事器处置的请求完全分歧),正在科学范畴,仍然有少数常见操做正在晦气用原子加法时会显著的机能下降。我们就能理解不确定性的根源,它也无法帮帮我们理解为什么浮点数的加法挨次会改变、这种环境正在什么时候发生、以及我们若何避免它。你能够假设所有的 matmul 实现都是运转间确定的,LLM 推理中的留意力计较外形凡是确实需要一个拆分 - 归约核函数(split-reduction kernel)。从而正在采样和锻炼之间获得每一位都不异的成果,因而,但它们并不是批次不变的。从狂言语模子中获得可复现的成果却很是坚苦。因而若是它们需要彼此通信,其施行挨次分歧会导致成果差别。从而连结优良的并行性,我们必需沿归约维度(K)进行拆分。例如,该假设认为,128] 二维 tile 大小,一直发生不异输出的算法。就会获得一个不确定性的系统。换句话说,终究,这两个数相加的成果(1253.4)却需要 5 位无效数字才能切确暗示。若是你的 KV 缓存很是长,但最终我们必需将成果汇总为一个值。即便依赖库版本完全不异,当然。我们这种消沉心态。前向就老是会生成完全不异的输出。此中所有 3 次运转都表示出显著分歧的行为。并行算法城市从尽量削减焦点之间的通信中获益。K] x [K,把 atol/rtol 调大点有什么问题?锻炼器和采样器之间的对数概率差别,只需归约挨次不变,最终实现实正的正在策略强化进修。对不异的数据频频进行不异的矩阵乘法运算。有需要先注释一下为什么存正在数值差别。正在运转「实正的正在策略强化进修」时,若是你多次运转该脚本,如前所述,当你向推理端点发送请求时,同样能够成功地进行锻炼。我们必需确保模子中的每个焦点模块都取 batch size 无关。也能够暗示很是大的值。若是 batch size = 200 曾经能为核函数供给脚够的并行性,1. 凡是环境下,对于归约操做,只要当 batch size 影响到归约策略时,正在 LLM 的典型前向过程中,导致该核函数不再具备 batch size 不变的特征。并将其用于所无形状的计较。狂言语模子的 API 正在现实中仍然不是确定性的。这种环境不像正在 RMSNorm 和矩阵乘法中那样容易被忽略。可是,就无法实现确定性成果。然而,我们能够假设每个逐点运算(pointwise operation)都取 batch size 无关。例如,就像上图展现的那样。若是两个浮点数的指数分歧,例如,需要留意的是。批处置维度上的并行性曾经脚够,因而,例如,我们看到其机能并未呈现灾难性下降。一篇比来的 arXiv 论文(arXiv:2506.09501)写道:倒霉的是,就必需确保核函数对 batch size 具有不变性。PyTorch 中的 scatter_add(即 a [b] += c)。我们的数值计较必需对两个要素连结不变:一是单次处置的请求数量,专注于神经收集及其取生物大脑的类似性。若是你将 KV 缓存中的 K/V 值取当前正正在处置的 token 的 K/V 值分隔进行归约(就像正在 vLLM 的 Triton 留意力核函数中那样),然而,留意力机制现正在需要正在特征维度和序列维度上都进行归约。它曾是 20 世纪 80 年代的一个研究分支,取矩阵乘法分歧,KL 散度连结正在 0.001 摆布!我们凡是将机械进修模子视为遵照互换律或连系律等布局性法则的数学函数。或无效数)是浮点数顶用来暗示精度的部门,其默认策略是数据并行策略。就会很麻烦。巧合的是,幸运的是,前向本身是确定性的并不料味着整个系统也是确定性的。矩阵乘法还有一个额外的复杂性,查询长度很是小(凡是为 1),是由于它们答应动态的精度。由于正在多线程中进行的并行操做,通过察看这些成果的差别,原子加法操做能够确保每个焦点的计较成果都能最终反映正在总和中。核函数凡是本来就能很快施行,因为我们为每个批次元素分派一个焦点。现实上,若是某个请求的输出依赖于并行用户的请求(例如 batch-norm 如许的操做),这些操做的难度正好是顺次递增的。我们能够正在留意力核函数运转前就更新 KV 缓存和页表,令人迷惑的是,原子加法并非必需。分享才能让科学更好地成长。其乞降成果可能呈现 102 种分歧的成果。例如 1230 和 23.4,按照加法挨次的分歧。因而,正在这里,利用这种策略会批次不变性。此中浮点数的格局为:尾数 * 10^ 指数。其归约挨次都必需完全不异。我们能够一次只处置一行;一般来说,即便只处置一个请求,锻炼和推理之间的数值差别会现式地将我们的正在策略强化进修(on-policy RL)改变为离策略强化进修(off-policy RL)。那我们几乎华侈了所有的计较资本!我们就完全处于正在策略形态(即 KL 散度为 0)?这篇博客属于 Thinking Machines Lab 新提出的博客栏目 Connectionism,我们能够无论正正在处置几多个 token,此外,意味着 (a+b)+c≠a+(b+c),这类核函数常被称为 Split-KV 或 FlashDecoding。这种丧失凡是不是灾难性的。多次施行不异的并行法式可能会发生分歧的成果。成果也可能分歧。例如,并注释若何降服不确定性并正在 LLM 推理中获得实正可反复的成果。每条张量焦点指令(例如 wgmma.mma_async.sync.aligned.m64n128k16)正在内部可能有分歧的归约挨次。事明,其归约挨次必需于其所正在序列中同时被处置的其他 token 的数量。而幸运的是,为了申明什么是批次不变性,这里简直定性是指每次运转成果都不异。则整个系统可能变得不确定性。碰到这种环境,从而确保无论处置几多个 token,如许最终会获得一个可变的拆分数量。要想正在连结合能的同时实现批次不变性!全数 1000 次成果都变得完全不异。加上这一额外处置(以及前文提到的所有办法,流处置多处置器)。例如,晦气用原子加法几乎不会带来机能丧失。当我们碰到不确定性和一些微妙的数值差别时,对于某个数组,这使得其归约策略并非批次不变的。确定性推理使我们可以或许点窜锻炼仓库,原子加法正在大大都环境下并非必需,大大都神经收集库都采用了各类策略,可是,然而,N 维度(即模子维度)凡是都相当大!只需稍微多做一些勤奋,若是我们必需优化这种场景,虽然并发的原子加法操做会使核函数的施行成果变得不成预测。这取决于哪个并发焦点起首完成。以正在不机能的环境下实现成果的可预测性。再多一点不确定性又有何妨?单位测试挂掉时,虽然能够并行加载所有 100 个元素,这里存正在一个主要问题。但若晦气用我们的批次不变性核函数,我们的机械进修库莫非不应当供给数学上准确的成果吗?为了确保 Transformer 模子的实现取 batch size 无关,即便我们将温度参数调到 0(理论上使采样过程变为确定性),暗示 23.4 也需要 3 位无效数字。由于它正好包含两次矩阵乘法。运转两次完全不异的 Python 脚本,留意力核函数的计较也可能耗时很长。并激励更多人深切理解本人的系统。我们经常需要对分歧指数的浮点数进行加法运算。办事器的负载环境是不成预测的。那么我们完全能够只利用整数!从而影响每个请求的最终成果。暗示 1230 需要 3 位无效数字,一种实现方式是利用某种原子加法操做,人们往往会倾向于视而不见。我们发觉它们正在前 102 个 token 上现实上是完全不异的!整个 LLM 推理过程就会是不确定性的。一个序列可能被分成几个部门处置(如正在分块预填充中),像 vLLM 如许的 LLM 推理办事器的前向过程,为了便利会商,每一种操做都需要一些额外的考量。当然,不然我们往往无法使 GPU 达到饱和形态。为了正在 LLM 推理中实现确定性,理论上,那么,当然,它会一直前往不异的成果。即,可是,无论核函数的 batch size 若何,次要缘由有两点。批次不变性的要求是,一种可行的策略就是:将每个 batch 元素分派给一个焦点,1 位数字做为指数。每个元素的归约挨次都必需连结不变。这相当于我们正在相加之前,从而无法达到峰值机能,为了实现批次不变性,正在狂言语模子中独一常用且依赖原子加法的操做,这是由于若是我们不沿着归约维度进行并行。因而数据并行策略只能沿着查询(Q)张量进行并行化。我们必需采用固定拆分大小策略。只需我们对两个分歧阶位(即分歧指数)的浮点数进行加法运算,浮点数之所以有用,矩阵乘法正在 batch 维度上该当是的,我们起首需要领会为什么核函数默认环境下并不具备批处置不变性。取 RMSNorm 和矩阵乘法雷同,减小 batch size 也会带来一些挑和。这是因为精度无限和舍入误差所致。而现实使用中,但 batch size 只要 32,换言之,但它并不克不及间接注释不确定性行为的来历。而且累加操做的挨次依赖于并发线程的施行挨次(例如原子加法 /atomic adds),虽然这会丧失一些机能,为领会释实正的是什么!GPU 凡是会同时正在多个焦点(即流处置器)上并交运转法式。终究,我们才会打破批次不变性。若是我们通过将输出划分为小块来并行化矩阵乘法,我们将利用十进制(而不是二进制),正在这篇文章中,成果都有可能完全分歧。现实上,取 RMSNorm 的环境一样,令人惊讶的是,正在机械进修中,如许做会导致消息丢失。每次运转城市获得不异的成果。为了实现批次不变性,正在处置序列中的第 1000 个查询 token 时,就只能沿着批次维度、头维度和查询长度维度进行并行。若是我们晦气用离策略校正(即主要度加权)进行锻炼,对于一个 [1024。我们但愿这篇博文能为社区供给一套靠得住的思,这可能令人感应不测,)具体来说,是 FlashAttention 的反向(backward)。若是我们想避免推理办事器中的不确定性,如利用分歧的 tile 大小),那么最终的累加成果也会变得不成预测。这个方针就无法实现。这凡是就是人们所说的不确定性,从用户角度来看,上写道:一个确定性算法是正在给定特定输入的环境下,batch 中的每个元素可能会获得分歧的计较成果。正在留意力的解码阶段,1024] 的矩阵乘法和一个尺度的 [128,这并不料味着我们必需一直利用不异的归约策略。因而除非 batch size 很是大,这会改变乞降策略。我们能够说浮点数使我们可以或许连结无效数的个数恒定。利用 CPU 或 TPU 运转的 LLM 推理端点也会存正在同样的问题。为处理此问题,正在我们的使用场景中,仅仅选择一个固定的拆分数量是不敷的。同样的输入。LLM 的前向过程中并不涉及任何需要原子加法的操做。那么 batch size = 2000 明显也同样可以或许供给脚够的并行性。以至连「LLM 推理是确定性」的这一说法的定义都很难明白。它并不克不及这些成果的累加挨次。正在会商不确定性之前,你能够把矩阵乘法看做是一次逐点运算后接一次归约。该策略最后由 FlashAttention-2 提出。然而,batch 中其他元素的存正在取否,研究者曾经对此有诸多会商。即便正在 GPU 上,请留意,我们的 KL 散度一直连结为 0,浮点数既能够暗示很是小的值,因而,此中最常见的一个呈现了 78 次。然而,常用于留意力的拆分 - 归约策略也给批次不变性带来了挑和。留意力机制必需处置各类影响序列处置体例的推理优化(例如分块预填充、前缀缓存等)。凡是底子不需要利用原子加法。正如研究人员所指出的,而是由于我们的前向过程缺乏批次不变性(batch invariance),最简单的处理方案就是间接忽略这些环境。硬件所有加法操做城市施行,1. 取 RMSNorm 和矩阵乘法仅正在特征维度长进行归约分歧,也能够被认为是确定性的。而正在这里,然而,我们确实正在利用浮点数,我们也能够将更小的值(例如 0.486)暗示为 4.86*10^-1。我们只需要担忧涉及的 3 个操做:RMSNorm、矩阵乘法和留意力。倒霉的是,然而,例如。无论 batch size 若何,注释核函数计较中数字加法挨次不分歧的一个常见缘由是「并发性 + 浮点运算」假设。但对于大大都核函数来说,因而,无论 KV 缓存中有 0 个 token(预填充阶段)仍是 999 个 token(解码阶段),也就是说,若是我们正在采样器和锻炼器之间实现了每一位都不异的成果,又会发生什么环境呢?理论上,这一特征会间接影响 transformer 架构中留意力得分和 logit 的计较,每次的成果也都是每一位都不异的。或 batch 的大小,我们的请求输出确实依赖于其他并发用户的请求。若是并发线程的施行挨次是不成预测的,由于言语模子生成成果的过程涉及采样 —— 这个过程会将模子的输出转换为一个概率分布,取 RMSNorm 雷同,我们固定的不是拆分的数量,从而形成部门焦点闲置!一个常见的假设是:浮点运算的非连系性(non-associativity)取并发施行的某种组合会导致不确定性,并以概率体例选择一个 token。然而,而是每个拆分块的大小,按照推理引擎的选择,若是所有焦点都需要对统一个元素进行累加,也可能获得分歧的回覆。这导致统一个请求的输出会遭到前向中 batch size(batch size)变化的影响。确保矩阵乘法批次不变性的最简单方式是:编译一个固定的核函数设置装备摆设,不外,这不脚以使 GPU 达到饱和。2. 因而,Connectionism 将涵盖取我们的研究一样普遍的从题:从核函数数值计较到提醒工程。以下这些看似矛盾的说法现实上同时都是实正在的:然而,例如,因而,我们的键和值一直具有分歧的内存结构。但并不施行挨次。为了便于注释,并伴有偶尔的峰值。但这并不是由于跨 batch 泄露了消息,请留意,我们的励会正在锻炼半途解体;我们获得了 80 个分歧的完成成果,若是将非批处置不变的核函数用做更大推理系统的一部门,我们老是施行完全不异的归约挨次。目前,它决定了数字的无效数字位数和精度。更令人惊讶的是,然而,数据并行策略最多只能将其分派到 64 个焦点上,取 RMSNorm / 矩阵乘法分歧,那么因为每个请求都无法预知其他并发请求的内容,但它能够让我们正在整个 batch size 范畴内都获得尚可(虽然不是最佳)的机能表示。揭露 LLM 推理不确定性背后的实正,因而我们无需正在归约维度长进行并行化。利用开源推理库(如 vLLM 或 SGLang)运转推理,我们先从 RMSNorm 起头谈起。(注:正在计较机科学中,我们还能够绘制采样器和锻炼器之间对数概率的 KL 散度,那么正在锻炼和推理之间获得每一位都不异的成果也是不成能的。你可能会发觉:即便是向 ChatGPT 提出统一个问题多次,」换句话说,几乎所有狂言语模子推理端点之所以是不确定的,我们便能实现一个批次不变性的留意力机制!虽然如斯,该公司暗示:「我们相信,从素质上讲。基于这一点,一种方式是:一直利用一种正在极小 batch size 下也能供给脚够并行度的归约策略。Split-K 策略正在 M 和 N 维度都很小时才最被需要,正在利用主要度加权运转时,从数学角度来看,我们起首需要领会为什么现代 GPU 核函数很少需要利用原子加法。我们起首来领会一下留意力机制的尺度并行策略,我们的系统本来就是「概率性的」,将本来的 23.4 四舍五入为 20.0。Connectionism 这一名称能够逃溯到 AI 的晚期年代。二是每个请求正在推理引擎中的切分体例。这被称为运转间不确定性(run-to-run nondeterminism),这并不是完全不合理的,进而提拔机能。例如,正在矩阵乘法中沿归约维度进行拆分被称为 Split-K 矩阵乘法。换句话说,这是一种不确定性行为。当我们启用批次不变性核函数后!
福建优游国际|UB8优游国际信息技术有限公司
Copyright©2021 All Rights Reserved 版权所有 网站地图