简单理解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时的一种中间计算格式,它并不是一个完全的数据类型

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

如何查询版本号?

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

查询开关的默认值

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博客

 

要利用NVIDIA A100 GPU上的CUTLASS库优化矩阵运算,首先需要了解CUTLASS提供的API和内核模板,这些都能帮助你利用Tensor Cores实现高性能计算。CUTLASS库支持多种数据类型,包括Bfloat16和TensorFloat32,这些是专为加速深度学习和高性能计算设计的低精度浮点格式。 参考资源链接:[NVIDIA A100 Tensor Cores优化策略:加速矩阵运算与高效数据移动](https://wenku.csdn.net/doc/2e7vrasj3u?spm=1055.2569.3001.10343) 具体实现方法包括: 1. **选择合适的数据类型**:根据你的应用需求选择Bfloat16或TensorFloat32。Bfloat16提供了比标准单精度浮点数更宽的动态范围,而TensorFloat32则提供了一个比标准单精度浮点数更宽的动态范围和更高的数值精度。 2. **内存布局优化**:合理安排内存布局以减少全局内存访问次数,可以显著提升数据传输效率。使用CUDA中的共享内存和常量内存可以减少全局内存访问次数。 3. **使用CUTLASS模板和库函数**:利用CUTLASS提供的各种模板函数,例如矩阵乘法模板,可以轻松地实现高性能矩阵运算。这些模板已经针对Tensor Cores进行了优化。 4. **异步数据移动**:利用CUDA流来实现异步数据传输,这样可以重叠数据传输和计算操作,从而提高整体性能。 5. **性能调优**:通过调整线程块大小、网格大小等参数,进行性能调优以适应你的特定用例。 6. **利用CUTLASS的性能分析工具**:CUTLASS提供了一些工具来分析和调试你的代码,这些工具可以帮助你理解内核执行情况,从而进一步优化性能。 通过上述步骤,可以确保在使用NVIDIA A100 GPU时,通过CUTLASS库充分利用Tensor Cores的性能优势,实现高效的矩阵运算。此外,为了更深入地理解如何结合不同数据类型进行性能优化,建议详细阅读《NVIDIA A100 Tensor Cores优化策略:加速矩阵运算与高效数据移动》这份资料。其中不仅涵盖了CUDA Tensor Cores的开发策略和性能提升,还特别强调了数据移动策略和不同数据类型的支持,这将为你的开发工作提供更全面的理论和实践指导。 参考资源链接:[NVIDIA A100 Tensor Cores优化策略:加速矩阵运算与高效数据移动](https://wenku.csdn.net/doc/2e7vrasj3u?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值