-
Notifications
You must be signed in to change notification settings - Fork 21
global
global用于控制适用于全局的参数
-
dataset_pre_load数据集是否提前加载并共享,用于节省内存以及处理多进程等待io,建议开启。提前加载的数据集以Tensor形式存储在内存中,客户端在初始化时会直接从内存中获取数据集,而不是从io中加载数据集。 -
mutli_gpu是否使用多GPU,如想使用cpu,请运行export CUDA_VISIBLE_DEVICES="" -
experiment实验名称,用于保存实验结果 -
stale客户端的延迟设置,用于模拟客户端的系统异构,详细请跳转stale -
dataset数据集的设置-
path数据集类的路径 -
params数据集类的初始化参数
-
-
iid数据集分布设置,详细请跳转iid -
client_num客户端数量 -
save[optinal] 是否保存实验结果 -
seed[optinal] 随机数种子,用于完全复现实验,每次实验后会将本次实验的随机数种子添加至config -
mode[optinal] 运行模式,详细请跳转mode -
use_file_system[optinal] 是否启用torch.multiprocessing.set_sharing_strategy('file_system') -
message_queue[optinal] 消息队列设置, 详细请跳转message_queue-
port[optinal] 端口号
-
-
mqtt[optinal] mqtt设置 mqtt设置,用于分布式模式下的设备间通信-
host[optinal] mqtt服务器地址 -
port[optinal] mqtt服务器端口
-
stale支持三种设置,其一是上述配置文件中提到的
"stale": {
"step": 5,
"shuffle": true,
"list": [10, 10, 10, 5, 5, 5, 5]
}程序会根据提供的step和list生成一串随机整数,例如上述代码,程序会生成10个0,10个(0,5),10个[5,10)......,并会根据shuffle判断是否进行打乱。最后将随机数串赋给各客户端,客户端根据数值在每轮训练结束后,自动sleep对应秒。
其二是设置为false,程序会给各客户端延迟设置为0。
"stale": false其三是延迟列表,程序直接会将列表指定延迟设置给客户端。
"stale": [1, 2, 3, 1, 4]自行编写特定类,实现generate_staleness_list方法,返回延迟列表,通过配置文件中的path和params进行设置
"stale": {
"path": "stale_generator.stale_generator.stale_generator",
"params": {
"param1": "value1",
"param2": "value2"
}
}当iid设置为true时(其实false也是默认为iid),会以iid的方式将数据分配给各客户端。
"iid": true当iid中customize设置为false或者不设置时,会以dirichlet分布的方式将数据分配给各客户端。
其中beta是dirichlet分布的参数。
"iid": {
"customize": false,
"beta": 0.5
}或者
"iid": {
"beta": 0.5
}customize non-iid设置分为两部分,一个是标签的non-iid设置,一个是数据量的non-iid设置。目前数据量仅提供随机生成,在未来的版本中将引入个性化设置。
在启用customize设置时,需要将customize设置为true并分别对label和data进行设置
"iid": {
"customize": true
}label的设置stale的设置类似,支持三种方式,其一为配置文件中提到的
"label": {
"step": 1,
"list": [10, 10, 30]
}其上配置程序会生成10个拥有1个标签数据的客户端,10个拥有2个标签数据的客户端,30个拥有3个标签数据的客户端 step是标签数量的步长,当step为2时,程序会生成10个拥有1个标签数据的客户端,10个拥有3个标签数据的客户端,30个拥有5个标签数据的客户端
其二为随机数二维数组,程序将二维数组直接设置给客户端
"label": {
"0": [1, 2, 3, 8],
"1": [2, 4],
"2": [4, 7],
"3": [0, 2, 3, 6, 9],
"4": [5]
}其三为一维数组,该一维数组为每个客户端拥有的标签数,该数组长度应和客户端数量一致。
"label": {
"list": [4, 5, 10, 1, 2, 3, 4]
}上述配置即客户端0拥有4个标签数据,客户端1拥有5个标签数据...以此类推。
目前label_iid生成的随机化分为两种方法,一种纯随机化,这种情况可能会导致所有客户端均缺少一个标签,导致精度下降(虽然概率极低),另一种方式采用洗牌算法,保证每个标签均会选到,这也会导致无法生成标签分布不均匀的数据情况。洗牌算法的开关由shuffle控制,示例如下:
"label": {
"shuffle": true,
"list": [4, 5, 10, 1, 2, 3, 4]
}data的设置比较简单,目前有两种方式,其一为空
"data": {}也就是不对数据量进行非独立同分布设置。
其二为配置文件中提到的
"data": {
"max": 500,
"min": 400
}也就是说客户端的数据量范围在400-500,程序会自动平均分配到各标签
数据量分布还较初始,之后将会逐步完善
继承data_dist_generator类,实现相关方法。并通过配置文件中的path和params进行设置
"iid": {
"path": "data_dist_generator.data_dist_generator.data_dist_generator",
"params": {
"param1": "value1",
"param2": "value2"
}
}Getting Started - 整体流程 - Module Guide - 现有算法 - Contact Us