Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
yandasen fd363153f5 | 1 year ago | |
---|---|---|
.. | ||
examples | 3 years ago | |
images | 3 years ago | |
megatron | 3 years ago | |
tasks | 3 years ago | |
test | 3 years ago | |
tools | 2 years ago | |
3-minus-inference-en.md | 3 years ago | |
3-minus-inference.md | 1 year ago | |
LICENSE | 3 years ago | |
MANIFEST.in | 3 years ago | |
README-en.md | 1 year ago | |
README.md | 3 years ago | |
README_mgt.md | 3 years ago | |
mergeMpCkpt.py | 3 years ago | |
pretrain_bert.py | 3 years ago | |
pretrain_gpt2.py | 3 years ago | |
pretrain_ict.py | 3 years ago | |
requirements.txt | 3 years ago | |
setup.py | 3 years ago | |
testLayerNorm.py | 3 years ago |
这是盘古α模型的 pytorch 实现版本。可以在 pytorch 框架上进行推理、训练、finetune。
出发点:Mindspore 是新的深度学习框架,很多人没用过,所以把 mindspore 模型转成 pytorch 模型可以让更多人使用我们的盘古模型,让使用者不但可以体验我们的大模型,还可以对我们的模型进行 finetune 。
Megatron 是英伟达深度学习应用研究团队开发的一款大型、强大的 transformer 算法库。这次的移植是在 Megatron 的基础上修改得到,主要工作内容包括了模型文件的转换、增加 query layer、修改模型切分策略。
支持 python >= 3.6, pytorch >= 1.5, cuda >= 10, and nccl >= 2.6 版本.
推荐使用英伟达的官方 docker 镜像docker pull nvcr.io/nvidia/pytorch:20.03-py3
。需要安装 NLTK。
也可直接下载配好的镜像:
docker pull yands/pangu-alpha-megatron-lm-nvidia-pytorch:20.03.2
使用/opt/conda/bin/python
。
模型文件 | Md5 | 大小 | 参数配置 |
---|---|---|---|
Pangu-alpha_2.6B_fp16_mgt.zip | 28f6dd2ec5d1df2fd22ec5f4a66f51e7 | 4.6G | num-layers : 31 hidden-size : 2560 num-attention-heads : 32 |
Pangu-alpha_13B_fp16_mgt.zip | e6f7a05cbdf8ba8d69e6786e48344f6f | 22G | num-layers : 39 hidden-size : 5120 num-attention-heads : 40 |
注:num-layers
等于 Pangu 项目中的 num-layers - 1
模型文件目录结构:
Pangu-alpha_2.6B_fp16_mgt #模型目录,--load 参数需要填写的路径
-- iter_0001000 #迭代次数目录
--mp_rank_00 #模型并行时各个 GPU 的目录
--model_optim_rng.pt #模型文件
--latest_checkpointed_iteration.txt #记录 ckpt 的迭代次数文件
两个框架的mean
算子的结果有一定的差异,导致 LayerNorm
层的输出不一致,所以生成结果不完全一致。暂时还没解决,正在寻找解决方案 :-) 。
在 iflytek 任务上,pytorch 的 2.6b_fp16 模型的 few-shot 精度为0.78929,相对于论文的的0.81 下降了 2 个点。
###想快速体验??请查看3分钟实现推理教程!!可以白嫖 T4 服务器哦!!!
目前只有生成文本的推理脚本,如下:
需要配置参数:
--out-seq-length
:生成的最大 token 数
--top_k
:k 值越大生成样本多样性越高。可以尝试不同的 k。
python tools/generate_samples_Pangu.py \
--model-parallel-size 1 \
--num-layers 31 \
--hidden-size 2560 \
--load /dataset/Pangu-alpha_2.6B_mgt/ \
--num-attention-heads 32 \
--max-position-embeddings 1024 \
--tokenizer-type GPT2BPETokenizer \
--fp16 \
--batch-size 1 \
--seq-length 1024 \
--out-seq-length 50 \
--temperature 1.0 \
--vocab-file megatron/tokenizer/bpe_4w_pcl/vocab \
--num-samples 0 \
--top_k 2 \
--finetune
例子:
k=1
Input is: 书生:羌笛何须怨杨柳,春风不度玉门关。
飞云:(这诗怎么这么耳熟?且过去跟他聊聊如何。)
书生:小兄弟,要不要一起喝一杯?
飞云:你请我呀?你若是请我,我便和你喝一杯;你若不请我,我便一个人去喝。
书生:小兄弟,看你年纪轻轻,不至于这么势利吧?
飞云:
Output is: 我是个读书人,不势利,我只想和你喝酒。
书生:小兄弟,你是不是有什么心事?
Input is: 张无忌拿出屠龙宝刀,手起刀落,周芷若掉了一颗门牙,身旁的赵敏喜极而泣,
Output is: 张无忌道:“你这是做甚么?”赵敏道:“我要你做我的丈夫。”张无忌道:“我不配。”赵敏道:“你不配,我也不配
Input is: 四川的省会是?
Output is:
成都,简称蓉,别称“锦城”,是四川省省会,也是中国西部地区重要的中心城市,中国西部地区重要的经济中心、科技中心、金融中心和交通枢纽,中国西部地区重要的
k=2
Input is: 书生:羌笛何须怨杨柳,春风不度玉门关。
飞云:(这诗怎么这么耳熟?且过去跟他聊聊如何。)
书生:小兄弟,要不要一起喝一杯?
飞云:你请我呀?你若是请我,我便和你喝一杯;你若不请我,我便一个人去喝。
书生:小兄弟,看你年纪轻轻,不至于这么势利吧?
飞云:
Output is: 你这是在质疑本公子的人格?你若是不请我喝酒我就不去喝。你若不请我喝,那我就一个人走路。你要是不请我喝,那你便
k = 3
Input is: 中国和美国和日本和法国和加拿大和澳大利亚的首都分别是哪里?
Output is: 分别在哪个省的哪个市
中国的北京,美国纽约,加拿大多伦多,日本的大阪,法国的里昂,澳大利亚的墨尔本,新西兰的基督城,澳大利亚首都堪
目前只提供了不改变模型模型结构和数据格式的 finetune,也就是继续预训练。
参考数据部分
上面下载的模型是单机推理模型,所以在进行 finetune 的时候需要先对模型进行切割,切割成模型并行的模型。
参数:
model-parallel-size
:原始模型的分片个数,这里是 1
--num-mp-model
: 切分后的模型个数
--mp-model-save
:切分后,模型的保存路径
python tools/split_full_model_into_mp_model.py \
--model-parallel-size 1 \
--num-mp-model 2 \
--num-layers 31 \
--hidden-size 2560 \
--load /**ful model path**/ \
--mp-model-save /**mp model save path**/ \
--num-attention-heads 32 \
--max-position-embeddings 1024 \
--tokenizer-type GPT2BPETokenizer \
--fp16 \
--batch-size 1 \
--seq-length 1024 \
--model-type Pangu \
--vocab-file megatron/tokenizer/bpe_4w_pcl/vocab \
--finetune
运行脚本:
examples/finetune_pangu_distributed.sh
finetune 完后的模型是分片的,如果要进行单卡推理,则先需要对模型进行合并。
合并脚本:
--mp-model-parallel-size
:模型分片数
--load
:模型保存目录
python tool/merge_mp_partitions.py \
--model-parallel-size 1 \
--mp-model-parallel-size 2 \
--num-layers 31 \
--hidden-size 2560 \
--load /full model ckpt dir/ \
--num-attention-heads 32 \
--max-position-embeddings 1024 \
--tokenizer-type GPT2BPETokenizer \
--fp16 \
--batch-size 1 \
--seq-length 1024 \
--model-type Pangu \
--vocab-file megatron/tokenizer/bpe_4w_pcl/vocab \
--reset-attention-mask \
--finetune \
参考脚本
examples/pretrain_pangu_distributed_2.6B.sh
参考脚本:/tools/preprocess_data_pangu.py
在 train_dataset 目录下存放多个 xxx.txt
文件,如果训练数据较多,最好每个 txt
文件大小统一,且分开多个 txt
存放,大小可以 10M 一个文件。如果有繁体文字,需要转成简体,可以使用zhconv
。
每个 txt
文本格式为(需要空行分割不同样本):
sample 1 ***
***
***
sample 2 ***
***
***
sample 2 ***
***
***
python /tools/preprocess_data_pangu.py \
--input /train_dataset/*.txt \
--output-prefix /megatron/dataset/ \
--vocab-file /megatron/tokenizer/bpe_4w_pcl/vocab \
--dataset-impl mmap \
--append-eod
将会生成/path/to/dataset/xxx.idx 和 /path/to/dataset/xxx.bin 文件。
Finetune 和预训练时需要填写参数:--data-path=/path/to/dataset/xxx
PanGu-Alpha 模型在 GPU 上推理和训练
Python Markdown C++ Shell Cuda other
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》