Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
Wang Li b501ab904f | 1 year ago | |
---|---|---|
pretrain&test | 1 year ago | |
alpha_enhanced_model.py | 1 year ago | |
distilation_evolution.py | 1 year ago | |
readme.md | 1 year ago | |
small10w.txt | 1 year ago | |
small10wt3.txt | 1 year ago | |
training.py | 1 year ago |
盘古增强版模型蒸馏,pytorch
在 https://git.openi.org.cn/PCL-Platform.Intelligence/pcl_pangu 这个工程的基础上运行的。
由于原工程一直在迭代,在他的基础上fork工程或者自己把整个工程传上去都太麻烦了。所以单独拎出来几个文件和有改动的文件写到这个项目里了。
欲压缩的模型是 pangu-alpha-evolution_2.6B_fp16.zip
https://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha-Applications/src/branch/master/model/pangu_evolution
https://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha-Applications/datasets?type=0
参数如下 num-layers : 31 hidden-size : 2560 num-attention-heads : 32
工程中有如下六个文件
路径:pcl_pangu/model/panguAlpha_pytorch/megatron/training.py
由于主程序distilation_evolution.py需要在执行pretrain函数之前执行initialize_megatron进行arguments的初始化,第71行的initialize_megatron被注释掉了。(没想到特别好的解决方案,也许重复执行initialize过程没有影响?)
320行新增了add_to_logging('forward-teacher')与add_to_logging('forward-student'),用于分别统计teacher模型和student模型的forward耗时。
路径:pcl_pangu/pcl_pangu/model/panguAlpha_pytorch/megatron/model/alpha_enhanced_model.py
在forward函数计算loss的过程中加入teacher_logits的输入,在有此输入的情况下计算学生模型与教师模型的kl div。
(将这一部分loss的计算改到distilation_evolution.py中,会导致loss在backward中计算错误)
由于需要调用输入的args.alpha参数,将args改为了self.args。
路径:pcl_pangu/model/panguAlpha_pytorch/distilation_evolution.py
MODEL_CONFIG为压缩前及压缩后模型的参数,这部分参数没有写到arguments中(不然执行起来有点太冗长了,其实该给用户这种自定义的接口)
MODEL_CONFIG = {
'350M': { # 蒸馏后模型参数
'num_layers': 23, 'hidden_size': 1024, 'num_attention_heads': 16,
'load': '',
'save': '/workspace/models/pangu-alpha-evolution_small'
},
'2B6': { # 蒸馏前模型参数
'num_layers': 31, 'hidden_size': 2560, 'num_attention_heads': 32,
'load': '/workspace/models/pangu-alpha-evolution_2.6b_fp16',
}
}
参考执行参数(模型加载在MODEL_CONFIG中已指定,包括路径在内的参数都无意义)
/opt/conda/bin/python -u -m torch.distributed.launch --nproc_per_node=4 --nnodes=1 --node_rank=0 --master_addr=localhost --master_port=6000 /workspace/pcl_pangu/pcl_pangu/model/panguAlpha_pytorch/distilation_evolution.py --seq-length=1024 --max-position-embeddings=1024 --model-parallel-size=1 --batch-size=8 --train-iters=10000 --lr-decay-iters=6400 --vocab-file=/workspace/pcl_pangu/pcl_pangu/tokenizer/bpe_4w_pcl/vocab --merge-file=gpt2-merges.txt --data-impl=mmap --split=949,50,1 --distributed-backend=nccl --lr=0.00015 --lr-decay-style=cosine --min-lr=1e-05 --weight-decay=0.01 --clip-grad=1.0 --warmup=0.01 --checkpoint-activations --log-interval=100 --save-interval=1000 --eval-interval=1000 --eval-iters=10 --fp16 --tokenizer-type=GPT2BPETokenizer --data-path=/workspace/data_bin/text_document --finetune
测试蒸馏算法使用的数据为CMRC2017数据集 https://hfl-rc.com/cmrc2017/
由于pcl_pangu工程已有的切割数据集的代码不便作出修改,只使用train部分数据。
train部分总共有30W条,所有的数据都为完型填空,没有阅读理解作答的题目。
该脚本将输入数据转换为pcl_pangu适合识别的格式
问题格式参考 https://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha-Evolution (“填空:”,题干,问句前缀)
输入数据格式参考 https://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha-GPU/src/branch/master/panguAlpha_pytorch (每两段数据中换两行)
填空:
张家大院内鼠患成灾,白天黑夜闹得主人不得安宁。主人忍无可忍,花重金购回一只猫王,准备对鼠辈们痛下杀手。猫王者,猫中之王也,言下之意即捕鼠能手。其他尚且别论,单凭那强壮的身躯、闪电的目光以及雄浑敏捷的步伐,就足以让主人信心倍增,使鼠辈望风披靡。果然不负众望,老鼠越猖獗的场所,就越是猫王大显身手之处。几天下来战果辉煌,被扑杀的老鼠不可胜数,逃得快的也吓得绻缩在鼠洞中不敢吱声。主人大喜过望,为了表彰猫王的忠诚和立下的赫赫战功,同时也为了使鼠辈日后未见猫王即闻声而丧胆,主人别出心裁,定制了一个小铃铛挂在猫王脖子上以壮声威。猫王戴上了铃铛,给频临危机的鼠辈带来福音,它们奔走相告,庆幸鼠族从此脱离厄运。因为铃声响到哪里,就意味着猫王出现在哪里;如果铃声没响,就告诉鼠辈们—可以大胆行动了,猫王不在这里!猫王再也捉不到老鼠,几天以后,铃声也听不到了。主人在一个角落里找到了()的尸体,原来它已经饿死了。
主人在一个角落里找到了猫王
填空:
小猪兜兜要换牙了,妈妈嘱咐猪爸爸要看好兜兜,不能让兜兜吃巧克力、糖果、还有太硬的东西。这天猪妈妈出去买菜,小猪兜兜想吃巧克力,可是被坐在客厅的猪爸爸发现制止了,于是小猪趁爸爸不注意的时候偷偷的把巧克力顶在头顶上,悄悄的回到自己的房间,回到房间后,兜兜发现头顶上的()不见了,原来是猪爸爸偷偷跟在后面,从兜兜的头顶上拿走了。小猪兜兜看到巧克力在楼下茶几上,爸爸正在看报纸,小猪兜兜拿来钓鱼竿、黏上口香糖、正打算粘到巧克力的时候被爸爸拿剪子剪断。猪爸爸把巧克力藏在高高的柜子上,不小心摔倒伤了脚,小猪兜兜急忙上前问:“爸爸……爸爸……你没事吧?”猪爸爸笑笑说:“没事没事,马上就好了。”兜兜说:“爸爸吃块巧克力就好了。”爸爸摸摸兜兜的头说:“唉!你啊,这么大块的巧克力我也吃不完,你和我一起吃吧。”猪妈妈这时候回到家,看见正在吃巧克力的猪爸爸和兜兜,生气的吼道:“你不紧不看着儿子,还带儿子一起吃巧克力,看我怎么收拾你。”猪爸爸……嗖……的一声从沙发上跳起来,跑掉了。小猪兜兜摇摇头说:“爸爸真的没骗我,脚真的马上就好了。”
这天猪妈妈出去买菜,小猪兜兜想吃巧克力,可是被坐在客厅的猪爸爸发现制止了,于是小猪趁爸爸不注意的时候偷偷的把巧克力顶在头顶上,悄悄的回到自己的房间,回到房间后,兜兜发现头顶上的巧克力
填空:
……
这个程序只是为了执行txt2bin函数,生成 text_document.bin 和 text_document.idx
读入盘古增强模型,测试推理结果。参考执行参数
/opt/conda/bin/python -u /workspace/PanGu-Alpha-Applications/model/pangu_evolution/inference/infer_generate.py --model-parallel-size 1 --num-layers 23 --hidden-size 1024 --num-attention-heads 16 --max-position-embeddings 1024 --tokenizer-type GPT2BPETokenizer --seq-length 1024 --load /workspace/models/pangu-alpha-evolution_small --vocab-file /workspace/PanGu-Alpha-Applications/megatron/bpe_4w_pcl/vocab --merge-file gpt2-merges.txt --no-load-rng --make-vocab-size-divisible-by 1 --fp16 --task_id 1
测试结果
alpha==0.3,iteration==10W,batch_size==4, 四卡并行跑。总共蒸馏了三天。
蒸馏后的模型文件还是挺大的4.9G->4.5G,不知道为啥。
蒸馏前
填空任务准确率0.846
阅读理解任务准确率0.648
蒸馏后
填空任务准确率0.724 (具体输出结果:small10w.txt)
阅读理解任务准确率0.112 (具体输出结果:small10wt3.txt)
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》