CUDA Academy · 课时

数值稳定性的权衡

降低精度时需要注意的地方

第 4 / 4 课13 个步骤

数值稳定性的权衡 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。

速度是有代价的

低精度张量核心运算速度很快,但位数减少意味着舍入误差。数值稳定性就是确保结果可信的技术。⚖️

什么是舍入误差

每个低精度值都会被舍入到最接近的可表示数值。一次出现时,这种微小的舍入误差通常无害,但经过许多步骤后可能不断累积。

FP16 下溢

FP16 的范围较窄,小数值可能变为零,这称为下溢。训练过程中的梯度和微小权重可能就这样消失。

FP16 上溢

同样狭窄的范围还会导致上溢:较大的值变成无穷大。一个错误的求和结果可能会继续污染后续的所有计算。

损失缩放来帮忙

一种常见的修复方法是损失缩放:在进行 FP16 运算前先放大数值,使其离开下溢区域,然后在运算后再缩小回来。

宽范围累加的好处

Tensor Cores 使用 FP32 进行累加是有原因的。更宽的累加器可以避免数千次微小加法产生严重偏移。

BF16 避开范围问题

由于 BF16 保留了 FP32 的指数,因此很少发生上溢或下溢。它的弱点是精度较低,而不是数值范围缩小。

灾难性消去

将两个接近的数字相减会抹去高位数字,这称为消去。低精度会让残留误差明显得多。

将关键部分保留为 FP32

一种安全模式是混合精度:使用 FP16 或 BF16 进行大量乘法,但将敏感的求和、范数和更新保留为 FP32。

始终验证准确性

不要假设快速内核就是正确的。将结果与 FP32参考结果进行比较,并检查误差是否保持在可接受的容差范围内。

测量误差

一种简单的检查方法是计算结果与可信结果之间的绝对差值。将这个误差与您选择的较小阈值进行比较。

float err = fabsf(gpu_result - cpu_result);

快速检查

即使输入为 FP16,Tensor Cores 为什么仍使用 FP32 累加部分和?

回顾

您已经了解了精度方面的取舍:注意 FP16 上溢和下溢,使用损失缩放和 FP32累加,并始终与参考结果进行验证。🎯

免费开始

用 AI 导师学习 C++ — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「数值稳定性的权衡」课时是免费的吗?

是的 — 「数值稳定性的权衡」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。

「数值稳定性的权衡」这节课中我会学到什么?

降低精度时需要注意的地方 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CUDA Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「数值稳定性的权衡」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CUDA Academy 课中编写并运行代码吗?

能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 张量核心计算什么
  2. 混合精度:FP16、BF16、TF32
  3. WMMA 片段 API
  4. 数值稳定性的权衡
← 返回 CUDA Academy