P)NSg{0}DTIRp;f43>+
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
literal 0
HcmV?d00001
diff --git a/docs/mindspore/source_zh_cn/features/amp.md b/docs/mindspore/source_zh_cn/features/amp.md
new file mode 100644
index 0000000000..5e51462526
--- /dev/null
+++ b/docs/mindspore/source_zh_cn/features/amp.md
@@ -0,0 +1,81 @@
+# 自动混合精度
+
+[](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/features/amp.md)
+
+混合精度(Mix Precision)训练是指在训练时,对神经网络不同的运算采用不同的数值精度的运算策略。在神经网络运算中,部分运算对数值精度不敏感,此时使用较低精度可以达到明显的加速效果(如conv、matmul等);而部分运算由于输入和输出的数值差异大,通常需要保留较高精度以保证结果的正确性(如log、softmax等)。
+
+## 原理
+
+浮点数据类型主要分为双精度(FP64)、单精度(FP32)、半精度(FP16)、brain floating point(BF16),每一种都有符号位、指数位、浮点位三个不同的部分来表示。FP64表示采用8个字节共64位;FP32表示采用4个字节共32位;FP16、BF16表示采用2字节共16位。如图所示:
+
+
+
+从图中可以看出,与FP32相比,FP16的存储空间是FP32的一半。类似地,FP32则是FP64的一半。因此使用低精度进行运算具备以下优势:
+
+- 减少内存占用:FP16、BF16的位宽是FP32的一半,因此权重等参数所占用的内存也是原来的一半,节省下来的内存可以放更大的网络模型或者使用更多的数据进行训练。
+- 计算效率更高:在特殊的AI加速芯片如华为Atlas训练系列产品和Atlas 200/300/500推理产品系列,或者NVIDIA VOLTA架构的GPU上,使用FP16、BF16的执行运算性能比FP32更加快。
+- 加快通讯效率:针对分布式训练,特别是在大模型训练的过程中,通讯的开销制约了网络模型训练的整体性能,通讯的位宽少了意味着可以提升通讯性能,减少等待时间,加快数据的流通。
+
+但是使用低精度计算同样会带来一些问题:
+
+- 数据溢出:FP16的有效数据表示范围为 $[5.9\\times10^{-8}, 65504]$,FP32的有效数据表示范围为 $[1.4\\times10^{-45}, 1.7\\times10^{38}]$。可见FP16相比FP32的有效范围要窄很多,使用FP16替换FP32会出现上溢(Overflow)和下溢(Underflow)的情况。而在深度学习中,需要计算网络模型中权重的梯度(一阶导数),因此梯度会比权重值更加小,往往容易出现下溢情况。
+- 舍入误差:Rounding Error是指当网络模型的反向梯度很小,一般FP32能够表示,但是转换到FP16会小于当前区间内的最小间隔,会导致数据溢出。如`0.00006666666`在FP32中能正常表示,转换到FP16后会表示成为`0.000067`,不满足FP16最小间隔的数会强制舍入。
+
+因此,在使用混合精度获得训练加速和内存节省的同时,需要考虑低精度引入问题的解决。一般的,混合精度会配套损失缩放(Loss Scale)一起使用,其主要思想是在计算损失值loss的时候,将loss扩大一定的倍数。根据链式法则,梯度也会相应扩大,然后在优化器更新权重时再缩小相应的倍数,从而避免了数据下溢。
+
+根据上述原理介绍,典型的混合精度计算流程如下图所示:
+
+
+
+## 混合精度使用示例
+
+```python
+import mindspore
+from mindspore import amp
+
+loss_scaler = amp.DynamicLossScaler(scale_value=1024, scale_factor=2, scale_window=1000)
+ori_model = Net()
+# 使能自动混合精度
+model = amp.auto_mixed_precision(ori_model, amp_level="auto", dtype=mindspore.float16)
+loss_fn = Loss()
+optimizer = Opimizer()
+
+# 构建前向网络
+def forward_fn(data, label):
+ logits = model(data)
+ loss = loss_fn(logits, label)
+ # 对loss做scale
+ loss = loss_scaler.scale(loss)
+ return loss, logits
+
+# 生成求导函数,用于计算给定函数的前向计算结果和梯度
+grad_fn = mindspore.value_and_grad(forward_fn, None, model.trainable_params(), has_aux=True)
+
+# 构建训练函数
+def train_step(data, label):
+ (loss, _), grads = grad_fn(data, label)
+ # unscale loss到真实的loss值
+ loss = loss_scaler.unscale(loss)
+ # 检查梯度是否没有溢出
+ is_finite = amp.all_finite(grads)
+ if is_finite:
+ # 梯度没有溢出,unscale梯度到真实的梯度值
+ # 在unscale梯度之后可以对梯度做一些梯度裁剪、梯度惩罚等操作
+ grads = loss_scaler.unscale(grads)
+ # 优化器更新模型参数
+ optimizer(grads)
+ # 动态更新loss_scaler的值
+ loss_scaler.adjust(is_finite)
+ return loss
+
+# 构建数据迭代器
+train_dataset = Dataset()
+train_dataset_iter = train_dataset.create_tuple_iterator()
+
+for epoch in range(epochs):
+ for data, label in train_dataset_iter:
+ # 执行训练并获取loss
+ loss = train_step(data, label)
+```
+
+关于自动混合精度,更多细节可以参考[amp.auto_mixed_precision](https://www.mindspore.cn/docs/zh-CN/master/api_python/amp/mindspore.amp.auto_mixed_precision.html)。
diff --git a/docs/mindspore/source_zh_cn/features/images/fp16_vs_fp32.png b/docs/mindspore/source_zh_cn/features/images/fp16_vs_fp32.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f8e07801600a15f3fe20010f59f5669afad34d5
GIT binary patch
literal 36113
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
qF
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 |