AISynergy-core
AISynergy-core(AISyncore
)是一个面向协同训练任务的计算框架。
本项目是基于flower发展而来,我们基于此拓展了协同计算场景下AI计算需要的功能和优化策略,如大模型参数分片传输、模型参数压缩传输、模型参数加密等。
作为AISynergy套件的计算核心,用户需要在server服务器端配置通信端口,并启动AISyncore的服务端程序,在协同计算的参与节点上,稍加修改自定义的算法,启动client训练任务,并指定server服务器的EIP和端口,即可开始执行AISynergy协同计算任务。AISyncore框架设计的特性有:
-
易用性: AISynergy用户,只需准备好带有算法脚本的容器环境,然后在算法代码中封装一行代码(需传入【'dl_framework', 'model', 'train_ds', 'test_ds', 'train_func', 'test_func' , mindspore模型训练时可选的'callback'】),以及加入一句server端口配置的代码,即可快速启动协同训练任务。
-
框架自适应性: 用户初始化AISyncore.client.NumPyClientAdap时,传入当前算法使用的dl_framework深度学习框架字段,AISyncore即可自动适配不同框架特性,调用相应API,实现模型参数获取并上传server、server参数下拉及load进模型、模型训练、模型测试功能。用户只需执行一行代码,AISyncore.client.run_numpyAdap_client,即可启动协同训练任务。
-
可拓展性: AISyncore支持各种自定义的参数融合策略,支持训练各类自定义的算法,支持不同参与方使用异构深度学习框架。目前支持的通信协议为gRPC,后续将支持更多的通信方式,比如socket。
欢迎提问和交流,AISynergy!
[协同计算框架介绍]
[AISyncore安装]
[AISyncore快速使用手册]
协同计算框架介绍
協同計算架构如下图所示。协同计算的各参与方拥有自有数据,并且这些数据不会通过平台向第三方传播。各方参与方拥有私有的GPU、NPU、MLU、CPU算力,以及可控的本地深度学习框架(如Tensorflow、Pytorch、mindspore等)。各方参与方利用本地的算力和深度学习框架对私有数据进行训练,训练完成的结果通过协同计算平台进行融合计算。融合计算后的结果返回参与方。作为本地训练下一轮训练的模型初始值,由于本地模型训练过程中融入其他参与方的参数特征,此过程经过若干轮,本地模型的精度可以达到将数据集中训练时的模型精度。
内容简介
安装
项目拉取
git clone https://git.openi.org.cn/PCL-Platform.Intelligence/AISynergy.git
cd AISynergy/AISynergy-core
# 源码安装
python setup.py bdist_wheel
pip install dist/*
# 快速使用手册
用户编写好模型训练的算法后,此时算法应该定义了[model, train_dataset, test_dataset, train_function, test_function]。只需修改几行代码,并明确算法使用的深度学习框架dl_framework,即可自适应框架,启动协同训练的服务端和客户端。客户端自适应框架接口为run_numpyAdap_client,目前支持将mindspore、pytorch框架的模型参数自动转换为numpy list进行通信传输。
### 1、在配置外网IP的参数服务器上
# 导入AISyncore
import AISyncore as aisc
# 定义参数融合策略strategy,默认采用联邦平均
strategy = aisc.server.strategy.FedAvg()
# 启动参数服务器(分配端口、配置融合轮次、导入融合策略、【可选】配置gRPC通信传输pb序列的限制长度)
aisc.server.run_server(
server_address="[::]:30003",
config={"num_rounds": 3},
strategy=strategy,
grpc_max_message_length=1536870912,
)
### 2、在训练参与方服务器上
# 导入AISyncore
import AISyncore as aisc
# 传入算法使用深度学习框架字符串,如'pytorch', 'mindspore',定义参数融合策略strategy,默认采用联邦平均
client = aisc.client.NumPyClientAdap('{your_algorithm_framework}', model, train_dataset, test_dataset, train_function, test_function, callbacks=None) # 注意如果使用mindspore框架进行训练,通常需要定义相关的回调函数callbacks
# 启动参数服务器(分配端口、配置融合轮次、导入融合策略、【可选】配置gRPC通信传输pb序列的限制长度)
aisc.client.run_numpyAdap_client("your_server_EIP:port", client)