跳至主要內容
BradZhone's BlogBradZhone's Blog

BradZhone's Blog

It's never too late to pursue your dreams

Linux 快捷指令

docker相关

查看相关

command 定义 备注
tee [-ai][--help][--version][文件...] 用于读取标准输入的数据,并将其内容输出成文件
-a或--append  附加到既有文件的后面,而非覆盖它.
-i或--ignore-interrupts  忽略中断信号。
常用方法
1. `[command]
cpufreq-info 查看cpu状态:
apt-get install cpufrequtils
查看cpu模式:
cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
调为性能模式:cpufreq-set -g performance
调为节能模式:cpufreq-set -g powersave

BradZhone大约 3 分钟LinuxLinux
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
Markdown 语法

链接

运算符

名称 解释 示例
行内公式 将公式插入到本行内,符号:$公式内容$ $xyz$
独行公式 将公式插入到新的一行内,并且居中,符号:$$公式内容$$ $$xyz$$
上标符号 符号:^ $x^4$
下标符号 符号:_ $x_1$
组合符号 符号:{} ${16}_{8}O{2+}_{2}$
汉字形式 符号:\mbox{} $V_{\mbox{初始}}$ $v_{初始}$
字体控制 符号:\displaystyle $\displaystyle \frac{x+y}{y+z}$
下划线符号 符号:\underline $\underline{x+y}$
标签 符号\tag $\tag{11}$
上大括号 符号:\overbrace $\overbrace{a+b+c+d}^{2.0}$
下大括号 符号:\underbrace $a+\underbrace{b+c}_{1.0}+d$
上位符号 符号:\stacrel{上位符号} $\vec{x}\stackrel{\mathrm{def}}{=}{x_1,\dots,x_n}$
两个quad空格 符号:\qquad $x \qquad y$
quad空格 符号:\quad $x \quad y$
大空格 符号: | $x \ y$
中空格 符号: : $x : y$
小空格 符号: , $x , y$
紧贴 符号: ! $x ! y$
括号 符号:()\big(\big) \Big(\Big) \bigg(\bigg) \Bigg(\Bigg) $()\big(\big) \Big(\Big) \bigg(\bigg) \Bigg(\Bigg)$
中括号 符号:[] $[x+y]$
大括号 符号:{} ${x+y}$
自适应括号 符号:\left \right $\left(x\right)$,$\left(x{yz}\right)$
组合公式 符号:{上位公式 \choose 下位公式} ${n+1 \choose k}={n \choose k}+{n \choose k-1}$
组合公式 符号:{上位公式 \atop 下位公式} $\sum_{k_0,k_1,\ldots>0 \atop k_0+k_1+\cdots=n}A_{k_0}A_{k_1}\cdots$
分段函数 符号:\begin{cases} 公式1, 条件1 \\ 公式2, 条件2 \end $y=\begin{cases} -x, \quad x\leq 0 \ x, \quad x>0 \end{cases}$
加法运算 符号:+ $x+y=z$
减法运算 符号:- $x-y=z$
加减运算 符号:\pm $x \pm y=z$
减加运算 符号:\mp $x \mp y=z$
乘法运算 符号:\times $x \times y=z$
点乘运算 符号:\cdot $x \cdot y=z$
星乘运算 符号:\ast $x \ast y=z$
除法运算 符号:\div $x \div y=z$
斜法运算 符号:/ $x/y=z$
分式表示 符号:\frac{分子} $\frac{x+y}{y+z}$
分式表示 符号:{分子} \voer ${x+y} \over {y+z}$
绝对值表示 符号:| $
平均数运算 符号:\overline $\overline{xyz}$
开二次方运算 符号:\sqrt $\sqrt x$
开方运算 符号:\sqrt[开方数] $\sqrt[3]{x+y}$
对数运算 符号:\log $\log(x)$
极限运算 符号:\lim $\lim^{x \to \infty}_{y \to 0}{\frac{x}{y}}$
极限运算 符号:\displaystyle \lim $\displaystyle \lim^{x \to \infty}_{y \to 0}{\frac{x}{y}}$
求和运算 符号:\sum $\sum^{x \to \infty}_{y \to 0}{\frac{x}{y}}$
求和运算 符号:\displaystyle \sum $\displaystyle \sum^{x \to \infty}_{y \to 0}{\frac{x}{y}}$
积分运算 符号:\int $\int^{\infty}_{0}{xdx}$
积分运算 符号:\displaystyle \int $\displaystyle \int^{\infty}_{0}{xdx}$
微分运算 符号:\partial $\frac{\partial x}{\partial y}$
矩阵表示 符号:\begin{matrix} \end $\left[ \begin{matrix} 1 &2 &\cdots &4\5 &6 &\cdots &8\\vdots &\vdots &\ddots &\vdots\13 &14 &\cdots &16\end{matrix} \right]$
等于运算 符号:= $x+y=z$
大于运算 符号:> $x+y>z$
小于运算 符号:< $x+y<z$
大于等于运算 符号:\geq $x+y \geq z$
小于等于运算 符号:\leq $x+y \leq z$
不等于运算 符号:\neq $x+y \neq z$
不大于等于运算 符号:\ngeq $x+y \ngeq z$
不大于等于运算 符号:\not\geq $x+y \not\geq z$
不小于等于运算 符号:\nleq $x+y \nleq z$
不小于等于运算 符号:\not\leq $x+y \not\leq z$
约等于运算 符号:\approx $x+y \approx z$
恒定等于运算 符号:\equiv $x+y \equiv z$
属于运算 符号:\in $x \in y$
不属于运算 符号:\notin $x \notin y$
不属于运算 符号:\not\in $x \not\in y$
子集运算 符号:\subset $x \subset y$
子集运算 符号:\supset $x \supset y$
真子集运算 符号:\subseteq $x \subseteq y$
非真子集运算 符号:\subsetneq $x \subsetneq y$
真子集运算 符号:\supseteq $x \supseteq y$
非真子集运算 符号:\supsetneq $x \supsetneq y$
非子集运算 符号:\not\subset $x \not\subset y$
非子集运算 符号:\not\supset $x \not\supset y$
并集运算 符号:\cup $x \cup y$
交集运算 符号:\cap $x \cap y$
差集运算 符号:\setminus $x \setminus y$
同或运算 符号:\bigodot $x \bigodot y$
同与运算 符号:\bigotimes $x \bigotimes y$
实数集合 符号:\mathbb $\mathbb{R}$
自然数集合 符号:\mathbb $\mathbb{Z}$
空集 符号:\emptyset $\emptyset$
无穷 符号:\infty $\infty$
虚数 符号:\imath $\imath$
虚数 符号:\jmath $\jmath$
数学符号 符号\hat $\hat{a}$
数学符号 符号\check $\check{a}$
数学符号 符号\breve $\breve{a}$
数学符号 符号\tilde $\tilde{a}$
数学符号 符号\bar $\bar{a}$
矢量符号 符号\vec $\vec{a}$
数学符号 符号\acute $\acute{a}$
数学符号 符号\grave $\grave{a}$
数学符号 符号\mathring $\mathring{a}$
一阶导数符号 符号\dot $\dot{a}$
二阶导数符号 符号\ddot $\ddot{a} $
上箭头 符号:\uparrow $\uparrow $
上箭头 符号:\Uparrow $\Uparrow$
下箭头 符号:\downarrow $\downarrow $
下箭头 符号:\Downarrow $\Downarrow$
左箭头 符号:\leftarrow $\leftarrow$
左箭头 符号:\Leftarrow $\Leftarrow$
右箭头 符号:\rightarrow $\rightarrow$
右箭头 符号:\Rightarrow $\Rightarrow$
底端对齐的省略号 符号:\ldots $1,2,\ldots ,n$
中线对齐的省略号 符号:\cdots $x_1^2 + x_2^2 + \cdots + x_n^2$
竖直对齐的省略号 符号:\vdots $\vdots$
斜对齐的省略号 符号:\ddots $\ddots$

BradZhone大约 5 分钟学习笔记Markdown
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
LLM

1. Conceptions

  • 概念 内容 备注
    token/word segmentation 将原始文本切分成子单元的过程就叫做 Tokenization。即,按照特定需求把文本中的句子、段落切分成一个字符串序列(其中的元素通常称为token 或叫词语),方便后续的处理分析工作。它是一个离散的文本单元,它可以是单词、标点符号、数字或其他语言元素,这些元素被用作训练和生成文本的基本单位。Token有粒度之分,如:词、字符或subword 解读资料:https://zhuanlan.zhihu.com/p/444774532
    困惑度 Perplexity (PPL) 困惑度是一种用来评估语言模型的指标。它衡量了一个语言模型在给定数据集上的预测能力和概率分布的复杂性。较低的困惑度表示模型对数据集的拟合效果更好,也就是说,模型更能准确地预测下一个词或下一个句子。
    SFT 监督微调(Supervised Fine-Tuning)
    RLHF 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback)
    embedding (词)嵌入,可用于降维或升维,将特征拉近拉远到一个合适的观察点,将不同特征联系起来 https://zhuanlan.zhihu.com/p/616419336
    seq2seq 序列到序列,该技术突破了传统的固定大小输入问题框架,提出了一种全新的端到端的映射方法。技术的核心是 Encoder-Decoder 架构,Encoder 负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,称为编码。而 Decoder 则负责根据语义向量生成指定的序列,这个过程也称为解码。Seq2Seq 是输出的长度不确定时采用的模型,因此在机器翻译、对话系统、自动文摘等自然语言处理任务中被广泛运用。 https://zhuanlan.zhihu.com/p/558138527
    https://zhuanlan.zhihu.com/p/520657912?utm_id=0
    attention 注意力机制(Attention Mechanism)源于对人类视觉的研究,主要理论原理是:信息处理时选择性地关注所有信息的一部分,同时忽略其他可见的信息。在计算能力有限情况下,注意力机制是解决信息超载问题的主要手段的一种资源分配方案,将计算资源分配给更重要的任务。 attention机制:https://zhuanlan.zhihu.com/p/46990010
    atention图解:https://zhuanlan.zhihu.com/p/342235515
    https://zhuanlan.zhihu.com/p/42724582
    https://zhuanlan.zhihu.com/p/53682800
    如何理解attention中的QKV:https://www.zhihu.com/question/298810062
    transformer中的attention为什么scaled:https://www.zhihu.com/question/339723385
    attention计算公式中的softmax:https://zhuanlan.zhihu.com/p/157490738
    transformer Transformer最早起源于论文Attention is all your need,是谷歌云TPU推荐的参考模型。 目前,在NLP领域当中,主要存在三种特征处理器:CNN、RNN以及Transformer,当前Transformer的流行程度已经大过CNN和RNN,它抛弃了传统CNN和RNN神经网络,整个网络结构完全由Attention机制以及前馈神经网络组成。论文中给出Transformer的定义是:Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequence aligned RNNs or convolution。 论文 :https://arxiv.org/abs/1706.03762
    源码参考:https://github.com/huggingface/transformers
    解读资料:https://blog.csdn.net/m0_67505927/article/details/123209347
    https://blog.csdn.net/qq_52302919/article/details/122207924
    B站李宏毅的视频,有几节专门讲attention和transformer的,比较清晰:https://www.bilibili.com/video/BV1Wv411h7kN?p=23
    Beam search 集束搜索。一种搜索算法,是对greedy search的一个改进,相对greedy search扩大了搜索空间,但远不及穷举搜索指数级的搜索空间,是二者的一个折中方案。在文本生成任务中常用的解码策略。 https://zhuanlan.zhihu.com/p/82829880
    AIGC (Artificial Intelligence Generated Content / AI-Generated Content) 人工智能生成内容,一种利用人工智能技术自动生成文章、音频、视频等多媒体内容的方法。
    LLM ( Large Language Model) 大语言模型,使用大量文本数据训练的深度学习模型,可以生成自然语言文本或理解语言文本的含义。特点是规模庞大(包含数十亿参数),能学习到语言数据中的复杂模式。
    GPT (Generative Pre-trained Transformer) 生成式预训练Transformer模型, 由OpenAI提出的一系列强大的预训练语言模型,兼具“大规模”和“预训练”两种属性。
    BERT (Bidirectional Encoder Representations from Transformers) 基于Transformer的双向编码表征,谷歌提出的一个LLM,对NLP研究产生了重大影响。该模型使用双向方法从一个词的左右两边捕捉上下文,使得各种任务的性能提高,如情感分析和命名实体识别。
    Bloom ( BigScience Large Open-science Open-access Multi-lingual Language Model) BLOOM是一种基于trasnformer架构的解码器(Decoder-Only)自回归大语言模型,由BigScience社区开发和发布。该模型除了176B 之外,还提供了几个较小的模型,其模型参数规模为:560M,1.1B,1.7B,3B 和7.1B。 论文:https://arxiv.org/abs/2211.05100
    解读:https://zhuanlan.zhihu.com/p/640016830
    Flash Attention FlashAttention 是一种重新排序注意力计算的算法,它无需任何近似即可加速注意力计算并减少内存占用,主要解决Transformer计算速度慢和存储占用高的问题,所以作为目前LLM的模型加速它是一个非常好的解决方案。 论文:
    https://arxiv.org/abs/2205.14135
    解读资料:
    https://zhuanlan.zhihu.com/p/639228219
    https://zhuanlan.zhihu.com/p/647364218
    https://baijiahao.baidu.com/s?id=1774803715921029316&wfr=spider&for=pc

BradZhone大约 12 分钟LLMLLM