大语言模型书籍已经发布,欢迎关注、购买。
本文涉及到的详细测试代码和测试步骤放置于:
https://github.com/DeepLearning/david-share.git下的:Deep-Learning/Easy-way-to-Understand-Training,本文中不再赘述代码实现。
欢迎给repo点亮Star,您的点赞是作者持续创作的动力。
获取激活值:
从模型中获取特定批次(如2和3)的输入激活值。这里的批次编号指的是数据集中的具体批次索引。每个批次的数据量由批次大小(batch size)决定,批次大小定义了一次训练迭代中处理的数据样本数量。
图中绿色部分表示输入层的激活值。
加载权重:
为层0和1加载权重。
图中绿色部分表示加载的权重。
前向传播:
使用权重将激活值通过网络的层进行前向传播。
图中黄色部分表示经过前向传播后的激活值。
绘制当前激活值:
绘制当前内存中的激活值。
不同颜色表示不同层的激活值。
计算损失:
在最后一层计算损失,并将其转换为梯度激活值。
图中红色部分表示损失计算后的梯度激活值。
反向传播:
执行反向传播,计算每层的梯度。
图中黄色部分表示反向传播过程中计算的梯度。
内存管理:
删除不再需要的内存以优化资源使用。
图中显示内存使用的变化。
梯度权重:
绘制梯度权重,显示它们对应的批次。
图中绿色和黄色部分表示不同批次的梯度权重。
错误处理:
尝试更新权重时处理错误。在这一步中,错误可能是因为尝试更新权重时,所需的梯度信息不完整或不匹配。具体来说,代码可能只计算了批次2和3的梯度,而在更新权重时需要所有批次的完整梯度信息。如果缺少某些批次的梯度,就会导致错误。这个错误信息提示用户当前只有批次2和3的梯度可用。
显示错误信息,提示只有批次2和3的梯度。
假设梯度:
模拟需要的梯度以继续训练。
图中绿色部分表示假设的梯度。
合并梯度和更新权重:
合并梯度以获得完整的梯度。
更新权重并检查结果。
图中黄色和绿色部分表示更新后的权重。
最终结果:
展示整个训练过程的结果,包括前向和反向传播的批次以及内存使用。
图中条形图表示不同时间步的内存使用和批次处理。
参考:https://github.com/srush/LLM-Training-Puzzles/tree/main