BFloat16 (BF16)
探索深度学习中的 BFloat16 (BF16)。了解这种 16 位格式如何提升 Ultralytics YOLO26 等模型的训练速度和效率。
BFloat16 或称 Brain Floating Point,是一种针对 机器学习 应用进行深度优化的 16 位计算机数值格式。它最初由 Google Brain 团队 开发,代表了一种高效处理海量 模型权重 和梯度的专业方法。与标准的 32 位浮点数 (FP32) 不同,BFloat16 的数学属性 将 8 位分配给指数,7 位分配给小数(尾数)。这种独特的结构提供了与 FP32 完全相同的动态范围,但降低了精度,从而在不遭受旧版 16 位格式常见数值不稳定性影响的情况下,有效地将复杂 深度学习 架构的内存需求减半。
Link to this sectionBFloat16 与 Float16 (FP16):主要区别#
在比较 半精度格式 时,BF16 与标准 FP16(基于 IEEE 浮点算术标准)之间的区别对于 AI 工程师来说至关重要。
FP16 使用 5 位作为指数,10 位作为尾数。这种结构赋予了 FP16 更高的数值精度,但动态范围却窄得多。因此,FP16 训练工作流通常需要复杂的 损失缩放技术 来防止梯度下溢——即微小的梯度更新变为零的情况。BFloat16 的 8 位指数通过匹配 FP32 的动态范围解决了这个问题。这意味着开发者可以无缝地将 BF16 应用到 神经网络 中,而无需调整超参数或进行损失缩放,使其成为稳定训练超大规模 大语言模型 (LLM) 的首选格式。详细的数值规范可在 维基百科的 BFloat16 页面 上进一步了解。
Link to this section深度学习训练的优势#
近期关于 BFloat16 用于深度学习训练的研究 强调了它是如何显著加速整体 训练过程 的。通过减少读取和存储张量所需的内存带宽,BFloat16 允许从业者在现有硬件上将其 批大小 加倍,或扩展到拥有十亿参数的 基础模型。有趣的是,尾数精度的轻微降低在训练过程中表现得就像一种温和的 正则化 技术,有时还能提高模型对未见数据的泛化能力。它目前是现代 混合精度 机制的中坚力量。
Link to this section硬件兼容性与执行#
为了充分利用 BFloat16 的速度优势,需要专用的硬件支持。它在 Cloud TPU 上实现了 高性能,并且从 NVIDIA Ampere 架构(如 RTX 30 系列、A100 以及如 RTX A6000 等专业工作站显卡)开始,一直到更新的 NVIDIA Hopper 和 Blackwell 代系,都得到了原生加速。
通过使用具有 PyTorch 自动混合精度 (AMP) 的框架,开发者可以利用 torch.autocast 自动将支持的数学运算通过专门的 BF16 Tensor Cores 进行路由。这可以在最大限度减少 推理延迟 的同时实现吞吐量最大化。
Link to this section现实世界的 AI 应用#
BFloat16 正迅速成为众多领域的行业标准:
- 生成式 AI 和 LLM:训练 OpenAI 最新生成模型 或 Anthropic Claude 的研究机构正在使用 BFloat16 训练最先进的网络。此外,它们在推理过程中利用 BF16 进行 KV 缓存。这种格式对于在 云计算 环境中服务数百万并发聊天请求时防止内存耗尽至关重要。
- High-Resolution Computer Vision: When processing 4K video streams or large satellite imagery, VRAM limits are tight. By deploying advanced architectures like Ultralytics YOLO26 using BFloat16, automated security or manufacturing systems can achieve high-speed object detection on hardware-constrained edge AI setups, such as NVIDIA Jetson devices, while preserving strict accuracy requirements.
Link to this section使用 Ultralytics 实现 BFloat16#
由 PyTorch 驱动的 ultralytics 软件包使得以 BFloat16 执行模型变得异常简单。下方是一个简明示例,演示了如何在 BF16 autocast 上下文块内加载模型并执行推理。
import torch
from ultralytics import YOLO
# Initialize the latest Ultralytics YOLO26 nano model
model = YOLO("yolo26n.pt")
# Verify that the active GPU architecture supports BFloat16
if torch.cuda.is_available() and torch.cuda.is_bf16_supported():
# Use PyTorch autocast to run inference purely in BFloat16
with torch.autocast(device_type="cuda", dtype=torch.bfloat16):
results = model.predict("https://ultralytics.com/images/bus.jpg")
print("Inference completed successfully using BFloat16 precision.")对于希望轻松扩展这些优化的团队,Ultralytics Platform 会自动管理复杂 云训练流水线 中的精度格式,确保用户在无需管理底层硬件代码的情况下获得尽可能高的速度和精度。






