简单理解TensorFloat32

目录

目录

1. NVIDIA TF32

1.1 数据格式比较

1.2 使用方法及条件

1.2.1 前置条件

1.2.2 调用方式

1.3 NVIDIA TF32开关

2. Pytorch

2.1 Pytorch对NVIDIA TF32的支持

2.2 Pytorch自动混合精度AMP

参考



1. NVIDIA TF32

TensorFloat-32,是NVIDIA在Ampere架构的GPU上推出的专门运用于TensorCore的一种计算格式。

1.1 数据格式比较

TF32仅仅是在使用TensorCore时的一种中间计算格式,它并不是一个完全的数据类型

简单理解TensorFloat32_第1张图片

1.2 使用方法及条件

1.2.1 前置条件

  • 矩阵乘法及卷积相关运算,且输入数据类型位FP32,才可以使用TF32作为TensorCore的中间计算类型 
  • Ampere架构的GPU

NVIDIA GPU架构

路线

说明

Fermi 费米

图形处理(游戏市场)/计算方向(AI领域)

Kepler 开普勒

图形处理(游戏市场)/计算方向(AI领域)

Maxwell 麦克斯韦

图形处理(游戏市场)/计算方向(AI领域)

Pascal 帕斯卡

图形处理(游戏市场)/计算方向(AI领域)

Volta 沃特

计算方向(AI领域)

第一个专门面向计算方向的GPU架构, 首次使用Tensor Cores

Truing 图灵

侧重图形处理(游戏市场)

该架构带来了全新的RTX系列品牌,并衍生出很多消费级GPU图形卡

Ampere 安培

计算方向(AI领域/大数据分析/科学计算)

第三代Tensor Cores,多实例GPU(MIG),第三代NVLink互联技术,细粒度结构稀疏性等新技术的特性组合,使Ampere架构GPU在计算方向统一了大数据分析、科学计算、深度学习训练和推理等主流计算场景。

ps: GPU架构最初被用于图像数据处理,随后被发现具有离散化和分布式特征,可以在矩阵运算时替代布尔运算,十分适合处理深度学习所需要的非线性离散数据,尤其在进行深度学习算法训练时非常高效。

1.2.2 调用方式

通常情况下使用TF32,都是由cuBLAS,cuDNN等NVIDIA的计算库来在内部进行调用的。
因此无论上层的深度学习框架使用的是什么,必须保证cuBLAS>=11.0,cuDNN>=8.0

如何查询版本号?

简单理解TensorFloat32_第2张图片

1.3 NVIDIA TF32开关

在Ampere架构的GPU上,默认启用了TF32来进行计算加速,但是并不是每一个矩阵及卷积计算都一定会使用FP32。如果想强制关闭TF32,可以通过设置环境变量:
export NVIDIA_TF32_OVERRIDE=0

2. Pytorch

2.1 Pytorch对NVIDIA TF32的支持

Pytorch 1.7中添加了对TensorFloat32运算的支持,allow_tf32 标志在PyTroch1.7到PyTroch1.11中默认为True,在PyTorch1.12及更高版本中默认为False。

此标志控制PyTorch是否允许使用TensorFloat32 TensorCore。

# The flag below controls whether to allow TF32 on matmul. This flag defaults to False# in PyTorch 1.12 and later.

torch.backends.cuda.matmul.allow_tf32=True

# The flag below controls whether to allow TF32 on cuDNN. This flag defaults to True.

torch.backends.cudnn.allow_tf32=True

查询开关的默认值

简单理解TensorFloat32_第3张图片

2.2 Pytorch自动混合精度AMP

PyTorch自1.6版本开始增加内置 torch.cuda.amp, 采用Float32和Float16的自动混合运算,注意与TF32计算模式是不同的。

参考

NVIDIA TF32 — DeepRec latest 文档https://deeprec.readthedocs.io/zh/latest/NVIDIA-TF32.html

CUDA semantics — PyTorch 1.13 documentationhttps://pytorch.org/docs/stable/notes/cuda.html

https://arxiv.org/pdf/1710.03740.pdfhttps://arxiv.org/pdf/1710.03740.pdf

TF32和AMP训练为何可以保证训练精度收敛_来自底层的仰望的博客-CSDN博客目标自NV的Ampere架构后,越来越多的AI研究者使用TF32或者AMP(混合精度)进行网络训练。在网络训练精度的同时,也极大的提升了训练速度。(其中更多的应用者选择TF32)相对于原先深度学习领域使用FLOAT32进行训练,明明训练中降低了数据表示精度,为什么还能取得满意的训练和推理结果呢?本文主要基于这个基本问题展开讨论。下面先简单看一下A100支持的浮点运算单元和其对应算力。基本数据类型介绍:各数据类型算力介绍:问题解答如果想要解答上面这个问题,最主要还是要探https://blog.csdn.net/weixin_43969854/article/details/124185741

环境:pytorch-gpu源码编译_迷途小书童的Note的博客-CSDN博客

 

你可能感兴趣的:(Pytorch,深度学习,人工智能,计算机视觉)