跳至主要內容
Floating Point precision formats

参考:https://developer.nvidia.com/blog/accelerating-ai-training-with-tf32-tensor-cores/

在深度学习中,范围比精度更重要。

FP64

img

双精度

FP32

img

单精度

TF32

用于A100架构TensorCore,指数范围i与FP32相同,尾数范围与FP16相同。兼容FP32和FP16,只需截断就可相互转换。先截断为TF32计算再转为FP32对历史工作无影响,且无需更改代码即可使用。


BradZhone小于 1 分钟DeepLearningprecision
DL相关

0.WTN

  • [ ] Dataloader的worker对训练推理的影响 https://zhuanlan.zhihu.com/p/673642279
  • [ ] train & val & inference
  • [ ] gradient accumulation
  • [ ] mixed precision
  • [ ] datasets (type, data structure)
  • [ ] fully finetune, finetune, lora, pretrain
  • [ ] prompt, 幻读, difficulties
  • [ ] llama1,2, chatgpt
  • [ ] bert,transformers
  • [ ] deepspeed, fastchat, megatron, colossalAi ...
  • [ ] torch.run, torch.launch, mp.spawn

BradZhone大约 3 分钟DeepLearningDeepLearning
Loss 相关问题
  1. loss 不收敛

    • 欠拟合

      • 特征:训练集上loss始终和初始大小相当,accuracy很低

      • 网络拟合能力不足

        • 每一个batch使用相同的数据训练,检查loss和acc是否有变化来判断
        • 改进:增加网络深度(层数),宽度(神经元数量)
      • 网络配置问题

        • 权重初始化是否合理

        • 初始化方式 备注
          全零初始化 Zeros 造成网络对称,所有神经元进行相同参数更新
          全1初始化 Ones 造成网络对称,所有神经元进行相同参数更新
          初始化为固定值value Constant 造成网络对称,所有神经元进行相同参数更新
          随机正态分布初始化 RandomNormal
          随机均匀分布初始化 RandomUniform
          截尾高斯分布初始化 TruncatedNormal
          VarianceScaling
          用随机正交矩阵初始化Orthogonal
          使用单位矩阵初始化 Identiy
          LeCun均匀分布初始化方法 lecun_uniform
          LeCun正态分布初始化方法 lecun_normal
          Glorot正态分布初始化方法 glorot_normal
          Glorot均匀分布初始化 glorot_uniform 一种均值为0,以0为中心的对称区间均匀分布的随机数;接近于0的均匀分布会导致梯度消失
          He正态分布初始化 he_normal
          He均匀分布初始化 he_uniform
        • 使用适当的激活函数

        • 激活函数 备注
          ReLU 一般用于卷积层、全连接层
          tanh 一般用于循环层
          softmax 一般用于全连接层做输出层
          sigmoid 不常用
        • 使用适当的优化器和学习率

        • 未进行归一化导致尺度不平衡,误差增大

      • 人工构造少量数据反复训练,看是否下降。若不下降,则可能脚本有问题,若下降,则超参可能有问题

      • 梯度检查

  2. loss 为nan,inf

    • 100个iter内出现可能是学习率过高
    • 若为rnn之类的网络,可能是梯度爆炸,可增加梯度截断(gradient clipping)
    • 梯度消失:导数特别小,导致连乘接近无穷小(输入数据太小,或输出数据落在激活函数饱和区),使loss不下降,但不会出现nan和inf
    • 梯度爆炸:导数特别大,导致连乘特别大,超出表示范围(输入数据未归一化(减均值,除方差,加入BN,L2等normalization方法)),可能出现inf
    • batchNorm层很多时,检查tensor输入该层后是否变为nan(可能因为训练集和验证集是不同的分布,使移动均值和移动方差为nan,可设置track_runing_stats=False禁用)
    • 每个batch前梯度要清零optimizer.zero_grad
    • 0做除数,0或负数做对数(loss正常下降,突然出现nan。可对预测数据增加最小值偏移,避免小于等于0),根号下要大于0,同时要加个Epsilon,因为开根号的导数,变量在分母上,不加Epsilon导数就成了nan
    • 计算loss的数组越界
    • 涉及指数计算时算得无穷:$\frac{e{x}}{e{y}}=\frac{INF}{INF}=NAN$ ,可减去最大值处理
    • label缺失
    • 输入数据就含有NAN(使用简单的网络读取输入进行检查)
    • 使用不同精度数据,loss超过精度类型最大范围
    • pooling步长大于核尺寸
  3. loss 为负

    • https://blog.csdn.net/qq_43733107/article/details/128915638

BradZhone大约 3 分钟DeepLearningLoss
Metrics

0. GOAL

各类评估指标整理汇总,影响因素,提升方法

1. 性能相关

  1. 基本概念

    • 名称 内容 备注
      NVLink 节点内device连接方式之一
      PCIe 高速串行计算机扩展总线标准 节点内device连接方式之一
      Infinit Band (IB) 节点间device连接方式(多机)
      ASIC 专用集成电路
      FPGA 现场可编辑门阵列
      SHArP 软硬结合的通信协议,实现在了NVIDIA Quantum HDR Switch的ASIC里 把聚合计算(reduce)从节点卸载到网络(交换机)中进行,相比tree和ring算法收发数据量大幅减少参考:https://www.zhihu.com/question/63219175/answer/206697974
  2. 性能指标

    • 名称 内容 备注
      Size(Bytes) 数据大小
      Description 测试描述(数据量*字节数)
      Duration 耗时
      Throughput(Gbps, fps, ...) 吞吐,每秒处理的图片/samples/文本/...数 一般用iter e2e时间来计算:$thoughput = \frac{n_{card}*batchsize}{e2e_time}$
      BusBW(Gbps) 带宽
      扩展率 网络训练效率与卡数关系的衡量指标 $扩展率=\frac{throghput_{n card}}{n*throughput_{1card}}*100%=\frac{e2e_time_{1card}}{e2e_time_{ncard}}*100%$
  3. 性能测试


BradZhone大约 4 分钟DeepLearningMetics