BFloat16 (BF16)
探索用于深度学习的 BFloat16 (BF16)。了解这种 16 位格式如何提升 Ultralytics YOLO26 等模型的训练速度和效率。
BFloat16,即大脑浮点数,是一种针对机器学习应用高度优化的 16 位计算机数字格式。它最初由Google Brain 团队开发,采用专门的方法,高效处理海量的模型权重和梯度数组。与标准的 32 位浮点数(FP32)不同,BFloat16 的数学特性为指数分配 8 位,为小数部分(尾数)分配 7 位。这种独特的结构提供了与 FP32 完全相同的动态范围,但精度有所降低,从而将复杂深度学习架构的内存需求有效减半,同时避免了旧式 16 位格式中常见的数值不稳定问题。
BFloat16 与 Float16(FP16)的对比:主要区别#
比较半精度格式时,BF16 与标准 FP16(基于浮点算术 IEEE 标准)之间的区别对 AI 工程师至关重要。
FP16 使用 5 位表示指数,使用 10 位表示尾数。这种结构赋予 FP16 更高的数值精度,但动态范围明显更窄。因此,FP16 训练工作流通常需要复杂的损失缩放技术,以防止梯度下溢——即微小的梯度更新变为零。BFloat16 的 8 位指数通过匹配 FP32 的动态范围解决了这一问题。这意味着开发者可以将 BF16 无缝应用于神经网络,无需调整超参数或缩放损失,因此它成为稳定超大大型语言模型(LLMs)训练的首选格式。你还可以在Wikipedia 的 BFloat16 页面上进一步了解详细的数值规格。
深度学习训练的优势#
近期关于BFloat16 用于深度学习训练的研究表明,它能大幅加快整体训练过程。通过减少获取和存储张量所需的内存带宽,BFloat16 让实践者能够将批量大小增加一倍,或在现有硬件上扩展至包含数十亿参数的基础模型。有趣的是,尾数精度的轻微降低在训练过程中类似于一种温和的正则化技术,偶尔可以提升模型对未见数据的泛化能力。目前,它已成为现代混合精度方案的核心。
硬件兼容性与执行#
要充分发挥 BFloat16 的速度优势,需要专用的硬件支持。它在云端 TPU上可以实现高性能,并且从NVIDIA Ampere 架构开始(例如 RTX 30 系列、A100 以及 RTX A6000 等专业工作站显卡),就在现代 NVIDIA GPU 上获得原生加速,直到更新的NVIDIA Hopper和 Blackwell 代际产品亦是如此。
借助使用PyTorch 自动混合精度(AMP)的框架,开发者可以利用 torch.autocast,自动将受支持的数学运算路由至专用的 BF16 Tensor Core。这可以在最大化吞吐量的同时,最大限度地降低推理延迟。
真实世界中的 AI 应用#
BFloat16 正在迅速成为众多领域的行业标准:
- 生成式 AI 和 LLM:训练OpenAI 最新生成式模型的研究机构或 Anthropic 的 Claude,都使用 BFloat16 训练最先进的网络。此外,它们还在推理过程中使用 BF16 进行 KV 缓存。在为数百万个并发聊天请求提供服务时,这种格式对于防止云计算环境中的内存耗尽至关重要。
- 高分辨率计算机视觉:处理 4K 视频流或大型卫星图像时,VRAM 容量往往十分有限。通过使用 BFloat16 部署Ultralytics YOLO26等先进架构,自动化安防或制造系统可以在资源受限的边缘 AI设备上实现高速目标检测,例如使用NVIDIA Jetson 设备,同时保持严格的精度要求。
使用 Ultralytics 实现 BFloat16#
由 PyTorch 驱动的 ultralytics 软件包让以 BFloat16 执行模型变得格外简单。下面是一个简洁示例,演示如何加载模型,并在 BF16 自动转换上下文代码块中执行推理。
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可以自动管理复杂云端训练流水线中的精度格式,确保用户无需管理底层硬件代码,就能获得尽可能高的速度和精度。









