- 博客(26)
- 收藏
- 关注
原创 Megatron-LM学习笔记(8)DDP Model,Optimizer,Scheduler
混合精度训练,优化器会在初始化时为所有FP16、BF16参数创造一份FP32的 main param参数,把optimizer里指向的内容替换成main_param,同时让原本的param指向main_param。最后set_up_model_and_optimizer也会额外导入bert模型的权重,转换可能的检查点格式(传统的torch pt和dist checkpoint的互相转换),返回初始化好的model optimizer和opt_param_scheduler三员大将。
2026-01-08 19:34:29
998
原创 Megatron-LM学习笔记(7)Megatron Model MLP和MoE和EP
此时再取本TP-EP rank上experts的切片,再把本TP-EP上所有expert接收到的token都求和 [tp_size, ep_size, num_local_experts] -> [tp_size, ep_size]。SiLU(x) = x × sigmoid(x) = x × (1 / (1 + e^(-x)))也叫 Swish,是一种平滑的非线性激活函数,当 x → +∞ 时,SiLU(x) → x,当 x → -∞ 时,SiLU(x) → 0,在 x=0 附近平滑过渡。
2025-12-30 19:37:03
815
原创 Megatron-LM学习笔记(6)Megatron Model Attention注意力与MLA
GQA可以看成一种低秩投影,把原本输入向量维度d,分别投影成k和v(d),然后又拆分给h个头(d/h),但是分成g个组,因此kv总维度变成了g * (d_k + d_v)=2gd/h。如果把q也吸收进入c,并且把R放在c之后乘W之前,中间的Wq和Wk确实能合并,但是R和R之间就不能乘法,导致结果里没有显式的相对位置编码,只是把绝对的编码加进去,相对的模型要自己学,这其实就违背了RoPE的初衷。前向传播的时候,输入的QKV是:np每个分区的头数,ng是每个分区有多少组,hn每个头的维度。
2025-12-26 12:39:03
836
原创 Megatron-LM学习笔记(5)Model Linear线性层
另外layer_spec.module是类TransformerLayer,因此build_module返回的是实例化的TransformerLayer,此时就是调用了transformerlayer的init。接下来,由于前向传播中的All Reduce操作Z=sum(Z)的Jacobian矩阵(partial Z/ partial Z_i)为单位对角阵I,因此对每个GPU来说所需的梯度就是完整的梯度g_Y(所以All Reduce操作的反向就是复制梯度到各个GPU)最后计算输入X的梯度。
2025-12-24 16:57:22
815
原创 Megatron-LM学习笔记(4) Megatron Model Embedding模型和部分并行
initialize_affine_weight_cpu()会创建模型主参数(master weight,但其实命名比较有误导性,不是optimizer里的master weight),这个参数硬编码了dtype=torch.float,32 bit先init,然后再转换成config params_dtype(例如bf16),用torch.split切分得到weight list,my_weight_list = weight_list[rank::world_size]获取自己的那部分;
2025-12-23 11:37:46
713
原创 Megatron-LM学习笔记(3)模型并行 Model Parallel
Megatron框架中的模型并行实现方法,重点分析了张量并行(TP)、流水线并行(PP)、数据并行(DP)和上下文并行(CP)等多维并行策略。文章阐述了MPU工具如何管理并行训练环境,包括并行组初始化、通信封装和资源协调。通过分析rank分配逻辑和不同并行维度的组织方式,解释了如何实现高效的大模型训练。特别讨论了各并行策略的特点及其组合应用,如TP优先分配以保证通信效率、PP的流水线特性等。最后指出模型初始化时会根据当前rank自动切分参数,实现分布式训练
2025-12-18 10:29:13
1044
原创 Megatron-LM学习笔记(番外)MindSpeed与MindSpeed-LLM
在现在的2025年,晟腾卡的torch使用体验已经好了很多了,当然也不是没有问题,比如使用transformers的库就有自己的各种各样的问题(精度不对齐),想要调优还很困难。我觉得这个方向是对的,因为尊重开源社区的成果以及有自信是很重要的,完全不需要重复造轮子的时候,没有需求的时候,尽量保持标准。毕竟话语权是自己靠贡献争取的。但是这不代表框架没有坑,最坑的就是megatron-adaptor这个玩意,使用了各种monkey patch的方式把megatron中的实现替换成了自己的实现。
2025-08-07 11:04:09
658
原创 Megatron-LM学习笔记(2)检查点checkpoint
Megatron中检查点会有普通的检查点和release检查点的区别。里面首先保存全部的args,然后是iteration,模型的state dict,optimizer里的state dict,scheduler的state dict等等。Megatron中,检查点的保存发生在train的主循环中每一个train step之后,根据args.save保存的路径以及args.save_interval保存的检查点间隔,调用save_checkpoint_and_time函数保存检查点。
2025-08-05 18:57:00
1318
原创 Megatron-LM学习笔记(1)训练主流程
这里传入构建模型(model provider),构建数据集函数(train valid test datasets provider,传入modeltype,传入每个forward step要做什么(计时,先获取一个batch的数据,然后传入model获取loss),传入损失函数(能从model output读出loss并做一些处理比如mask)可以优化的地方也有,比如有不少core和legacy混用的函数,vision训练和纯text训练划分的不太清晰。2、train函数,主训练入口。
2025-08-03 21:44:26
1095
原创 利用python下载BB上的作业方便批改
bb系统向来不当人且不好用。现在甚至不能在线预览了,更加蛋疼了。这下不得不下载下来改作业了。搜索了一些脚本,发现比较老了,一些项目也过时了。修改了一下亲测能用,直接贴代码,安装好selenium就能用。填好账号密码,能过统一验证就行。
2025-07-01 15:20:04
232
原创 Personalized Federated Learning: A Meta-Learning Approach 个性化联邦学习PerFedAvg开山鼻祖之作
简单回顾MAML。给定一组从底层分布中提取的任务,在MAML中,与传统的监督学习设置相反,目标不是找到一个在预期的所有任务上都表现良好的模型。相反,在MAML中,假设在新任务到达后,有限的计算预算来更新模型,在这个新设置中,寻找一个初始化,它在相对于这个新任务更新后表现良好,可能是通过一个或几个梯度下降步骤。这个公式的优势在于,保持FL的优势还捕获了用户之间的差异,无论是现有用户还是新用户都可以将这个新问题的解决方案作为初始点,并根据自己的数据稍微更新它。
2024-04-19 15:19:25
1208
原创 Personalized Federated Learning on Non-IID Data via Group-Based Meta-Learning 编解码器分组聚类联邦元学习G-FML
FL中,N客户端训练一个共享模型theta,各有各的数据集D,损失函数l,即最小化所有客户端上的经验损失函数。问题是前提要求iid数据分布,若为non iid则不好。iid: independent identical distribution,独立同分布。理解成所有客户端上的样本服从统一的分布。non iid导致global model无法在所有客户端上进行最小化经验损失。因此采用分组元学习的方法。问题定义后的全局目标如下。分了K组,共N客户端。这篇文章也是一个比较常规的工作。
2024-04-18 19:28:44
1645
原创 Multi-initial-Center Federated Learning with Data Distribution Similarity-Aware Constraint 聚类+联邦元学习
有类结构,但类之间仍然不完全相同。问题定义很简单:最小化所有类中样本损失之和,之后保证类之间客户端相似度最高。u是一个指示变量,表示i在不在集群c中。有三个变量要学习:类本地模型,客户端本地模型,和集群分配策略。因此采用交替优化策略,固定一个然后解决另一个。算法:每一轮收集local model和cluster model,通过在一批“指示样本”上计算预测结果后,用KL散度判断相似度。之后更新cluster assignment。其实就是K means由于目标是一次梯度下降,所以对损失函数求导。
2024-04-18 15:44:14
1125
1
原创 聚类联邦学习Clustered Federated Learning: Model-Agnostic Distributed Multitask Optimization
Clustered Federated Learning: Model-Agnostic Distrib不需要事先指定聚类数量?作为一种 后处理 ,让客户端准确度更高文章很好,行文清晰严谨,让人眼前一亮。数学证明严谨,简洁,巧妙。当然这个工作也是有缺陷的。每一类都要维护一个模型(或者说一个分类的树)
2023-08-07 21:31:46
3629
2
原创 【解读】通过客户端采样实现高效通信效率联邦学习 Communication-Efficient Federated Learning via Optimal Client Sampling
汇总本地模型需要在客户端和中央服务器之间频繁通信大量信息。本文提出了一种新颖、简单和有效的方法,在通信受限制的情况下基于从具有信息更新的客户端收集模型并估计未传递的本地更新来更新中央模型。特别地,通过奥恩斯坦-乌伦贝克过程对模型权重的进展进行建模,我们可以推导出一种选择具有显着权重更新的客户端子集的最佳采样策略。中央服务器仅从所选客户端收集更新的本地模型,并将其与未被选中进行通信的客户端的估计模型更新相结合。
2023-06-15 19:11:44
1326
原创 【解读】Client Selection for Federated Learning with Heterogeneous Resources in Mobile Edge FedCS 客户端选择
FedCS文章解读
2023-06-15 00:15:35
693
1
原创 联邦元学习笔记,A Collaborative Learning Framework via Federated Meta-Learning
边缘物联网设备需要实时智能决策,但是由于计算资源限制和本地数据限制往往做不到。于是提出一个目标是作为平台的合作学习框架。一个模型首先在一个客户集合上训练,然后在目标边缘节点上快速适应,只用很少的样本。同时也调查了算法的收敛性(温和条件下)和目标节点的适应性能。同时为了对抗脆弱的元学习算法的对抗攻击,又提出了更稳健的版本,基于分布健壮优化,同样分析了收敛性。不同数据集上的实验证明了其有效性。现在的边缘物联网设备很多都要求实时边缘智能,传统送数据到云服务器分析不现实(高延迟高带宽消耗)。
2023-01-17 13:27:40
970
原创 homebrew出现Calling `cellar` in a bottle block is deprecated! 的解决方法
本人某天升级到macOS Big Sur之后使用homebrew cleanup命令时出现了非常多的错误,场面颇为壮观。在stackoverflow上找到了一个类似的问题,但是也没有人给出解释。所以尝试使用了这个命令:brew style --fix /usr/local/Homebrew/Library/Taps/exolnet/homebrew-deprecated/Formula之后会等待很长一段时间,下载一个sorbet,搜索了一下好像是用来检查ruby文件的格式的工具。之后会自动运行这个工
2021-04-27 17:08:21
5806
3
原创 MySQL不用Cascade delete修改子表和safe mode
MySQL不用Cascade Delete修改子表和safe modemysql支持级联操作,但是并非所有DBMS都支持。所以不用cascade设计这样的存储过程主要有两种方法:删除原有的外键约束,对被参照或参照表修改,之后再将外键约束加回去。这个方法的好处是简单好理解,但是有的设备上或者数据库并不能使用。将被参照表中要修改的部分记录下来后,增加一条要修改的内容,之后就可以正常操作参照表了。最后删除旧内容即可。本人采用的就是后一种方法。举例如下方。Book表中的ID为主键,Borrow表中Boo
2021-04-16 09:56:56
337
1
原创 算法基础实验:Kruskal和Johnson
算法基础实验:Kruskal和Johnson实验报告文章目录算法基础实验:Kruskal和Johnson1. 实验内容2. 实验设备环境3. 实验方法4. 实验步骤5. 结果分析1. 实验内容实现求最小生成树的Kruskal算法。无向图的顶点数N的取值分别为: 8、 64、128、512,对每一顶点随机生成1~⌊N/2⌋条边,随机生成边的权重, 统计算法所需运行时间 ,画出时间曲线,分析程序性能。实现求所有点对最短路径的Johnson算法。有向图的顶点数 N 的取值分别为: 27、81、243、
2021-01-08 22:10:45
529
原创 yacc和lex细节解答以及实现反向自动微分
反向自动微分的yacc和lex实现文章目录反向自动微分的yacc和lex实现0. 写在前面2. lex词法分析器和yacc语法分析器lex难点解答yacc难点解惑3. 生成可执行文件4. 写在最后0. 写在前面为了完成编译原理的实验,本人在互联网上搜索yacc和lex相关的用法,但是解惑和细节的内容相对来说比较少,有的小部分也没有进行说明。于是在经历了很长时间的外文互联网搜索和阅读英语手册后,我完成了这个实验,并且决定写一写我对于yacc和lex工具的理解。当然源代码在GitHub上,如果觉得我的文章
2020-12-28 11:52:49
1179
原创 千岛湖岛屿问题 C++
千岛湖问题这是一道C/C++上机题。用递归解决。千岛湖,位于中国浙江省杭州西郊淳安县境内,东距杭州 129 千米、西距黄山 140 千米,是长江三角洲地区的后花园,是世界上岛屿最多的湖,因湖内拥有 1078 座翠岛而得名。现在小红手里有一张 n×n 的千岛湖地图,地图上「*」表示陆地,「.」表示水域,两块陆地相连当且仅当一块陆地在另一块陆地的东南西北(上下左右)四个方向的相邻格子上。小红想知...
2020-02-23 21:06:52
1080
原创 二叉树及其应用 表达式树 后序线索化和遍历
文章目录实验三 二叉树及其应用0: 背景1:二叉树的创建和遍历需求分析概要设计详细设计调试分析用户使用说明测试结果2:表达式树概要设计详细设计调试分析用户使用说明测试结果实验三 二叉树及其应用0: 背景这是一次数据结构的实验报告。源代码不另附,将文中散乱代码块合在一起即可。1:二叉树的创建和遍历需求分析通过添加虚结点,为二叉树的每一实结点补足其孩子,再对补足虚结点后的二叉树按层次遍历的...
2019-11-26 19:40:09
945
原创 私密日记问题 C语言 OJ
私密日记问题 C语言 OJNoder现在在上初中了,日记里面也会出现一些敏感话题,为了防止别人看自己的小秘密,他想对自己的日记进行加密。他的加密算法如下:日记长度是n,有一个长度为n的整形数组p,里面的数字两两不相同,(1<=i<=n,1<=pi,i<=n)。然后对日记进行m次轮换。每次轮换是将日记中的第i个字符换到第pi个位置去。输入的日记长度不会超过n。如果长...
2019-11-26 19:35:11
770
原创 C语言求1000内的完数
C语言求1000内的完数c语言作业,求完数注意,1不是完数,因为1是自身的因子,所以要去除。另外这因子不是完全分解,如28分成2,2,7,而是2,4,7,14,不包含自身。上代码。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#defi...
2019-11-01 14:26:31
1179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅