赞
踩
大模型为当下最热门的技术之一,目前市面上充斥着五花八门的资讯,如何让自身保持高度的清醒以及鉴别能力尤为重要。鉴于大部分的人员都非算法或者工程师背景出生,那么如何在免疫底层技术基础上,在特定的“社交场合”优雅的谈论大模型且能够保持一定的专业度将至关重要。本系列为居家旅行,“拔草灭口”的必备系列。
FLOPS,即每秒浮点运算次数,另外的称呼为每秒峰值速度。英文全称为Floating-point operations per second,缩写FLOPS。注意,其中的S不能忽略,因为它代表着秒。
例如以GPT大模型为例,GPT-3模型参数约为1746亿个,训练一次需要的总算力为3640PF-days。若1天只有1P的算力则需要3640天。
在对比国内外显卡的时候,FLOPS也是一个很重要的指标。
学会FLOPS,另外的一个知识点就是浮点数类型。浮点数在计算机内部还是用二进制存储,类似“100100110……”。浮点数的类型最经常见的有FP32,FP16,BP16,它们的差异在于存储时候二进制的长度N,以及N中多少位存储指数(Exponent),多少位存储尾数(Mantissa)。指数的位数决定了它的范围,即它可以测量的对象有多大。尾数的位数(浮点数的基数或小数点后面的部分)则决定了它的精度——尺子上的线条有多细。
这个知识点最具价值的就是BP16这种类型,它拥有和FP32相同的数值范围,且长度又能和FP16保持一致,当然不是所有的GPU都支持BP16。
#编程的时候可以通过这个来判断
import transformers
transformers.utils.import_utils.is_torch_bf16_gpu_available()
若有计算机背景的同学可以继续深入阅读,浮点数据类型在IEEE 754-2019(2008)的标准中进行约定,不同精度的浮点数格式,如binary16、binary32和binary64,分别用16位、32位和64位二进制来表示。
以下进入技术宅领域:
FP16称呼为Half-precision floating-point(半精度浮点数),在IEEE 754标准中的名称即为binary16。它由1(符号位)+5(指数位)+10(尾数位)组成。二进制转为十进制的换算公式如下:
按照上面的换算公式,下图为特殊值的换算案例:
BF16也叫做bfloat16,全称brain floating point,它也是采用16位二进制表示,由Google Brain开发的。它和FP16的差异是1(符号位)+8(指数位)+7(尾数位),二进制转为十进制的换算公式如下:
训练模式的时候,浮点数的精度越高越好,可是也要考虑运算的效率尤其是在资源不充足的前提下。因此Nvidia 在 Ampere GPU推出的专门运用于 TensorCore的浮点数格式。
TF32 使用与半精度FP16数有着相同的10位尾数。事实证明,它能够满足AI的精度要求,并且它采用与FP32相同的8位指数,因此支持与FP32相同的数值范围。这样的设计使TF32成为FP32的绝佳替代品。
TF32仅限于Tensor Core操作模式,而不是一种类型。在运算过程中,将FP32输入舍入为TF32,在不损失精度的情况下计算乘积,然后将这些乘积累加到 FP32 输出中。
TF32与Volta GPU的单精度浮点数(FP32)相比,在A100 GPU的Tensor Core 上运行的TF32可以提供高达10倍的加速。将TF32与A100上的结构化稀疏性相结合,可使性能比Volta提高高达20倍。下图则展示了在各种AI场景的训练中,准确率两者不相上下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。