Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
zhangy03 89a027c83e | 1 year ago | |
---|---|---|
Docs | 1 year ago | |
dataset/wiki | 1 year ago | |
splitnn_pangu_alpha | 1 year ago | |
whl | 1 year ago | |
README.md | 1 year ago |
【保护用户隐私】:通过对模型切分成多个子网络进行跨域pipeline训练,保护用户的隐私数据,提升用户对话、问答等多个方面的用户体验。
【协同训练新的范式】:通过对模型切分成多个子网络进行跨域pipeline训练,根据实际算力情况,对算力大的智算中心分配较大的子网络,算力小的智算中心分配较小的子网络,减少客户端计算性能差异带来的影响,促进智算网络健康平衡发展。
如上图所示,该案例中,用户集群1拥有专业领域数据集,参与方包括用户集群1和用户集群2,模型子网络1参数占比20%左右,模型子网络2参数占比80%,并通过交换embedding向量和梯度向量,在不泄露原始特征和标签信息的前提下,实现对网络模型的协同训练。
pangu网络原理特性的详细介绍,可参考pangu-Alpha。
pangu网络切分详细介绍,可参考pangu-pipeline设计原理。
pangu跨域pipeline协同训练过程时序详细介绍,可参考pangu-pipeline时序分析。
本样例基于wiki数据集进行训练和测试
如需要对数据进行处理,可以参考 数据处理示例
样例提供将盘古模型切分成3个子网络,分别为embedding net、backbone net、head net,其中embedding net和head net在同一参与方,backbone net在另一参与方。
本样例提供2个示例程序,均以Shell脚本拉起Python程序的形式运行。
进入到目录 cd ./pangu_pipeline/splitnn_pangu_alpha
./scripts/run_distribute_split_pangu_gpu.sh:单线程示例程序,embedding、head参与方和backbone参与方在同一线程中训练,其以程序内变量的方式,直接传输embedding向量和梯度向量至另一参与方。
./scripts/run_distribute_split_pangu_gpu_socket.sh:多线程示例程序,embedding、head参与方和backbone参与方分别运行一个训练线程,其分别将embedding向量和梯度向量封装为protobuf消息后,通过socket通信接口传输至另一参与方。(to do)
以./scripts/run_distribute_split_pangu_gpu.sh为例,运行示例程序的步骤如下:
参考MindSpore官网指引,安装MindSpore 1.8.1。
推荐直接 docker pull swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.1:1.8.1
安装MindSpore Federated库,mindspore_federated是一款开源联邦学习框架,实现的主要功能包括:不同子网络前向输出结果的传输与反向计算梯度的传导等。
cd pangu_pipeline
pip install ./whl/mindspore_federated-0.1.0-cp37-cp37m-linux_x86_64_V4.whl
bash scripts/run_distribute_split_pangu_gpu.sh 1 ./scripts/hostfile_1gpus ./dataset/wiki/train/ 2 350M
log_local_gpu.txt
INFO:root:epoch 0 step 10/43391 loss: 10.642237
INFO:root:epoch 0 step 20/43391 loss: 10.378647
INFO:root:epoch 0 step 30/43391 loss: 10.172309
INFO:root:epoch 0 step 40/43391 loss: 9.891272
INFO:root:epoch 0 step 50/43391 loss: 9.643802
INFO:root:epoch 0 step 60/43391 loss: 9.478779
INFO:root:epoch 0 step 70/43391 loss: 9.460744
INFO:root:epoch 0 step 80/43391 loss: 9.285812
INFO:root:epoch 0 step 90/43391 loss: 9.370293
INFO:root:epoch 0 step 100/43391 loss: 8.724071
INFO:root:epoch 0 step 110/43391 loss: 8.522751
INFO:root:epoch 0 step 120/43391 loss: 8.876641
INFO:root:epoch 0 step 130/43391 loss: 8.514479
INFO:root:epoch 0 step 140/43391 loss: 7.996586
INFO:root:epoch 0 step 150/43391 loss: 7.899467
INFO:root:epoch 0 step 160/43391 loss: 7.661634
INFO:root:epoch 0 step 170/43391 loss: 9.237949
INFO:root:epoch 0 step 180/43391 loss: 7.449853
...
参数量 | 层数 | 词表大小(V) | embedding_size | Seq_length | Hidden size(D) | FFN size | Heads |
---|---|---|---|---|---|---|---|
350M(MindSpore) | 16 | 4W | 1280 | 1024 | 1280 | 5120 | 32 |
350M(Megatron) | 24 | 4W | 1024 | 1024 | 1024 | 4096 | 16 |
2.6B | 32 | 4W | 2560 | 1024 | 2560 | 10240 | 32 |
13B | 40 | 4W | 5120 | 1024 | 5120 | 20480 | 40 |
200B | 64 | 4W | 16384 | 1024 | 16384 | 65536 | 128 |
场景 | 算力分布 | 数据分布 | 场景Motivation |
---|---|---|---|
场景1 | 一方算力大、一方算力小 | 一方拥有领域数据、一方无数据 | 通过智算网络大算力方支持,实现领域数据拥有方大模型能力在领域任务中的性能增强 |
场景2 | 一方算力大、一方算力小 | 一方拥有领域数据、一方拥有通用数据 | 通过智算网络大算力方支持,实现领域数据和通用数据融合下得到更高性能的大模型 |
场景3 | 两方算力均衡 | 双方拥有同类型数据、数据分布不同 | 通过智算网络算力的协同,实现大模型训练在智算网络中的规模化扩展 |
场景4 | 两方算力均衡 | 双方拥有数据同分布 | 通过智算网络算力的协同,实现大模型训练在智算网络中的规模化扩展 |
场景5 | 两方算力均衡 | 双方拥有同一份数据 | 通过智算网络算力的协同,实现大模型训练在智算网络中的规模化扩展 |
在V100和A100上运行的耗时分析数据如下:
结论:目前在单线程模式下,切分后的训练效率较baseline有2倍效率的损失。还需进一步的性能优化
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》