模型训练yaml详细配置项
MindSpore-Federated纵向联邦学习框架采用yaml配置文件,配置纵向联邦学习模型的训练与推理流程,包括网络、优化器、算子等模块的输入/输出和超参数信息。yaml配置文件的详细信息参见下表:
功能分类 |
配置参数 |
参数类型 |
取值范围 |
是否必选 |
---|---|---|---|---|
role |
role |
str |
‘leader’ or ‘follower’ |
是 |
model |
train_net |
dict |
是 |
|
train_net.name |
str |
否 |
||
train_net.inputs |
list |
是 |
||
train_net.inputs.name |
str |
是 |
||
train_net.inputs.source |
str |
‘remote’ or ‘local’ |
是 |
|
train_net.inputs.compress_type |
str |
‘min_max’ or ‘bit_pack’ or ‘no_compress’ |
否 |
|
train_net.inputs.bit_num |
int |
[1, 8] |
否 |
|
train_net.outputs |
list |
是 |
||
train_net.outputs.name |
str |
是 |
||
train_net.outputs.destination |
str |
‘remote’ or ‘local’ |
是 |
|
train_net.outputs.compress_type |
str |
‘min_max’ or ‘bit_pack’ or ‘no_compress’ |
否 |
|
train_net.outputs.bit_num |
int |
[1, 8] |
否 |
|
eval_net |
dict |
是 |
||
eval_net.name |
str |
否 |
||
eval_net.inputs |
list |
是 |
||
eval_net.inputs.name |
str |
是 |
||
eval_net.inputs.source |
str |
‘remote’ or ‘local’ |
是 |
|
eval_net.inputs.compress_type |
str |
‘min_max’ or ‘bit_pack’ or ‘no_compress’ |
否 |
|
eval_net.inputs.bit_num |
int |
[1, 8] |
否 |
|
eval_net.outputs |
list |
是 |
||
eval_net.output.name |
str |
是 |
||
eval_net.output.destination |
str |
‘remote’ or ‘local’ |
是 |
|
eval_net.outputs.compress_type |
str |
‘min_max’ or ‘bit_pack’ or ‘no_compress’ |
否 |
|
eval_net.outputs.bit_num |
int |
[1, 8] |
否 |
|
eval_net.gt |
str |
否 |
||
opts |
type |
str |
mindspore.nn.optim内定义的优化器名称 |
是 |
grads |
list |
是 |
||
grads.inputs |
list |
是 |
||
grads.inputs.name |
str |
是 |
||
grads.output |
dict |
是 |
||
grads.output.name |
str |
是 |
||
grads.params |
list |
否 |
||
grads.params.name |
str |
否 |
||
grads.sens |
union(float, int, str) |
否 |
||
params |
list |
否 |
||
params.name |
str |
否 |
||
hyper_parameters |
dict |
否 |
||
grad_scalers |
inputs |
list |
否 |
|
inputs.name |
str |
否 |
||
output |
dict |
否 |
||
output.name |
str |
否 |
||
sens |
union(float, int, str) |
否 |
||
dataset |
name |
str |
否 |
|
features |
list |
否 |
||
labels |
list |
否 |
||
hyper_parameters |
epochs |
int |
否 |
|
batch_size |
int |
否 |
||
is_eval |
bool |
否 |
||
privacy |
label_dp |
dict |
否 |
|
label_dp.eps |
float |
否 |
||
ckpt_path |
str |
否 |
其中:
role (str) - 联邦学习参与方角色,必须是”leader”或”follower”。默认值:””。
train_net (dict) - 描述训练网络输入、输出等信息的数据结构。默认值:””。
train_net.name (str) - 训练网络名称标识符。默认值:””。
train_net.inputs (list) - 训练网络输入Tensor列表,每个元素均为描述一个输入Tensor的字典。元素的排列顺序和名称,必须与MindSpore建模的训练网络(nn.Cell)construct方法的输入Tensor顺序和名称保持一致。默认值:[]。
train_net.inputs.name (str) - 训练网络输入Tensor名称,必须与MindSpore建模的训练网络(nn.Cell)的输入Tensor名称保持一致。默认值:””。
train_net.inputs.source(str) - 训练网络输入Tensor的数据来源,必须是”remote”或”local”,”remote”代表数据来源于其它参与方的网络传输,”local”代表数据来源于本地。默认值: “local”
train_net.inputs.compress_type(str) - 压缩类型,必须是”min_max”或”bit_pack”或”no_compress”,”min_max”代表采用最小最大量化通信压缩方法,”bit_pack”代表采用比特打包通信压缩方法,”no_compress”代表不采用通信压缩方法。
train_net.inputs.bit_num(int) - 通信压缩算法中的比特数。
train_net.outputs - (list) - 训练网络输出Tensor列表,每个元素均为描述一个输出Tensor的字典。元素的排列顺序和名称,必须与MindSpore建模的训练网络(nn.Cell)的construct方法的返回值Tensor顺序和名称保持一致。默认值:[]。
train_net.outputs.name (str) - 训练网络输出Tensor名称,必须与MindSpore建模的训练网络(nn.Cell)的输出Tensor名称保持一致。默认值:””。
train_net.outputs.destination(str) - 训练网络输出Tensor的数据去向,必须是”remote”或”local”,”remote”代表数据将通过网络传输给其它参与方,”local”代表数据本地使用,不进行网络传输。默认值: “local”。
train_net.outputs.compress_type(str) - 压缩类型,必须是”min_max”或”bit_pack”或”no_compress”,”min_max”代表采用最小最大量化通信压缩方法,”bit_pack”代表采用比特打包通信压缩方法,”no_compress”代表不采用通信压缩方法。
train_net.outputs.bit_num(int) - 通信压缩算法中的比特数。
eval_net (dict) - 描述评估网络输入、输出等信息的数据结构。默认值:””。
eval_net.name (str) - 评估网络名称标识符。默认值:””。
eval_net.inputs (list) - 评估网络输入Tensor列表,每个元素均为描述一个输入Tensor的字典。元素的排列顺序和名称,必须与MindSpore建模的评估网络(nn.Cell)construct方法的输入Tensor顺序和名称保持一致。默认值:[]。
eval_net.inputs.name (str) - 评估网络输入Tensor名称,必须与MindSpore建模的训练网络(nn.Cell)的输入Tensor名称保持一致。默认值:””。
eval_net.inputs.source(str) - 评估网络输入Tensor的数据来源,必须是”remote”或”local”,”remote”代表数据来源于其它参与方的网络传输,”local”代表数据来源于本地。默认值: “local”。
eval_net.inputs.compress_type(str) - 压缩类型,必须是”min_max”或”bit_pack”或”no_compress”,”min_max”代表采用最小最大量化通信压缩方法,”bit_pack”代表采用比特打包通信压缩方法,”no_compress”代表不采用通信压缩方法。
eval_net.inputs.bit_num(int) - 通信压缩算法中的比特数。
eval_net.outputs - (list) - 评估网络输出Tensor列表,每个元素均为描述一个输出Tensor的字典。元素的排列顺序和名称,必须与MindSpore建模的评估网络(nn.Cell)的construct方法的返回值Tensor顺序和名称保持一致。默认值:[]。
eval_net.outputs.name (str) - 评估网络输出Tensor名称,必须与MindSpore建模的评估网络(nn.Cell)的输出Tensor名称保持一致。默认值:””。
eval_net.outputs.destination(str) - 评估网络输出Tensor的数据去向,必须是”remote”或”local”,”remote”代表数据将通过网络传输给其它参与方,”local”代表数据本地使用,不进行网络传输。默认值: “local”。
eval_net.outputs.compress_type(str) - 压缩类型,必须是”min_max”或”bit_pack”或”no_compress”,”min_max”代表采用最小最大量化通信压缩方法,”bit_pack”代表采用比特打包通信压缩方法,”no_compress”代表不采用通信压缩方法。默认值: “min_max”。
eval_net.outputs.bit_num(int) - 通信压缩算法中的比特数。
eval_net.gt(str) - 评估网络输出对应的ground truth标签名称。默认值: “”。
type (str) - 优化器类型,需采用mindspore.nn.optim内定义的优化器,如”Adam”,参考优化器。默认值:””。
grads (list) - 优化器关联的GradOperation列表,每个元素均为描述一个GradOperation算子的字典。默认值:[]。
grads.inputs (list) - GradOperation算子的输入Tensor列表,每个元素均为描述一个输入Tensor的字典。默认值:[]。
grads.inputs.name (str) - GradOperation算子的输入Tensor名称。默认值:””。
grads.output (dict) - 描述GradOperation算子对应的网络输出Tensor的字典。默认值:{}。
grads.output.name (str) - GradOperation算子对应的网络输出Tensor名称。默认值:””。
grads.params (list) - GradOperation算子计算梯度值的训练网络参数列表,每个元素对应一个网络参数名称。如果为空,则将计算关联优化器所更新参数的梯度值。默认值:[]。
grads.params.name (str) - GradOperation算子计算梯度值的训练网络参数名称。默认值:””。
grads.sens (union(float, int, str)) - GradOperation算子计算网络参数梯度的加权系数,对应GradOperation算子的”灵敏度”(参考mindspore.ops.GradOperation)。如果是float或int类型,则采用常量作为加权系数;如果是str类型,则从其它参与方经网络传输的加权系数中,解析名称与其对应的Tensor作为加权系数。默认值:””。
params (list) - 优化器根据梯度计算结果,更新的训练网络参数列表,每个元素对应一个网络参数名称。如果为空,则优化器将更新训练为例的所有可训练参数。默认值:[]。
params.name (str) - 优化器更新的训练网络的参数名称。默认值:””。
hyper_parameters (dict) - 优化器超参数字典,参考type所指定的MindSpore优化器算子的超参数。默认值:{}。
grad_scalers.inputs (list) - 用于计算梯度加权系数的GradOperation算子的输入Tensor列表,每个元素均为描述一个输入Tensor的字典。默认值:[]。
grad_scalers.inputs.name (str) - 用于计算梯度加权系数的GradOperation算子的输入Tensor名称。默认值:””。
grad_scalers.output (list) - 描述用于计算梯度加权系数的GradOperation算子对应的网络输出Tensor的字典.默认值:{}。
grad_scalers.output.name (str) - 描述用于计算梯度加权系数的GradOperation算子对应的网络输出Tensor名称。默认值:””。
grad_scalers.sens (str) - 描述用于计算梯度加权系数的GradOperation算子计算网络参数梯度的加权系数,对应GradOperation算子的”灵敏度”(参考mindspore.ops.GradOperation)。如果是float或int类型,则采用常量作为加权系数;如果是str类型,则从其它参与方经网络传输的数据中,解析名称与其对应的Tensor作为加权系数。默认值:””。
dataset.name (str) - 数据集名称。默认值:””。
dataset.features (list) - 数据集特征列表,每个元素均为一个str类型的特征名称。默认值:[]。
dataset.labels (list) - 数据集标签列表,每个元素均为一个str类型的标签名称。默认值:[]。
epochs (int) - 训练的epoch数。默认值:1。
batch_size (int) - 训练的数据batch size。默认值:1。
is_eval (bool) - 训练完成后是否执行评估。默认值:False。
label_dp (dict) - 差分隐私机制的配置参数。默认值:{}。
label_dp.eps (float) - 差分隐私机制的eps参数。默认值:1.0。
ckpt_path (str) - 保存训练网络checkpoint文件的路径。默认值:”./checkpoints”。
以本项目所提供的纵向联邦学习模型训练 - Wide&Deep推荐应用为例,其基于Wide&Deep模型和Criteo数据集,进行纵向联邦学习模型训练,其纵向联邦Leader参与方的yaml如下:
role: leader
model: # define the net of vFL party
train_net:
name: leader_loss_net
inputs:
- name: id_hldr
source: local
- name: wt_hldr
source: local
- name: wide_embedding
source: remote
compress_type: min_max
bit_num: 6
- name: deep_embedding
source: remote
compress_type: min_max
bit_num: 6
- name: label
source: local
outputs:
- name: out
destination: local
- name: wide_loss
destination: local
- name: deep_loss
destination: local
eval_net:
name: leader_eval_net
inputs:
- name: id_hldr
source: local
- name: wt_hldr
source: local
- name: wide_embedding
source: remote
compress_type: min_max
bit_num: 6
- name: deep_embedding
source: remote
compress_type: min_max
bit_num: 6
outputs:
- name: logits
destination: local
- name: pred_probs
destination: local
gt: label
opts: # define ms optimizer
- type: FTRL
grads: # define ms grad operations
- inputs:
- name: id_hldr
- name: wt_hldr
- name: wide_embedding
- name: deep_embedding
- name: label
output:
name: wide_loss
sens: 1024.0
# if not specify params, inherit params of optimizer
params: # if not specify params, process all trainable params
- name: wide
hyper_parameters:
learning_rate: 5.e-2
l1: 1.e-8
l2: 1.e-8
initial_accum: 1.0
loss_scale: 1024.0
- type: Adam
grads:
- inputs:
- name: id_hldr
- name: wt_hldr
- name: wide_embedding
- name: deep_embedding
- name: label
output:
name: deep_loss
sens: 1024.0
params:
- name: deep
- name: dense
hyper_parameters:
learning_rate: 3.5e-4
eps: 1.e-8
loss_scale: 1024.0
grad_scalers: # define the grad scale calculator
- inputs:
- name: wide_embedding
- name: deep_embedding
output:
name: wide_loss
sens: 1024.0
- inputs:
- name: wide_embedding
- name: deep_embedding
output:
name: deep_loss
sens: 1024.0
dataset:
name: criteo
features:
- id_hldr
- wt_hldr
labels:
- ctr
hyper_parameters:
epochs: 20
batch_size: 16000
is_eval: True
ckpt_path: './checkpoints'