Configuration#
In this page, we provide an overview of all the main configuration groups and values that can be used in ARMLET when running FL experiments (with the federation mode of armlet).
See Configuration prerequisites for any information about the general configuration groups and values of ARMLET.
Main configuration categories of the federation mode#
The main configuration groups related to the federation mode are:
data: for everything related to data;eval: for the model evaluation;exp: generic settings for the FL experiment;logger: logger configuration;method: for the FL algorithm and its hyper-parameters;protocol: for the FL protocol;save: for saving models.
See also
All the essential config values are explained in the subpages, but the different options (i.e., config files) for each config group are not detailed.
Please look at the ARMLET_DIR/configs folder to explore the different config group possibilities.
Example#
In the following, we provide an example of a YAML configuration file that can be directly used to run an FL experiment with the federation mode.
Note that these configuration values are detailed in the next documentation pages.
# @package _global_
armlet:
mode: federation
paths:
root_dir: .
data_dir: ./datasets
log_dir: ./logs
output_dir: ${hydra:runtime.output_dir}
data:
dataset:
dataset_name: Adult
_target_: armlet.data.datasets.load_Adult_dataset
path: ./datasets/Adult/raw_data
sensitive_attributes: [age, gender, race]
splitter:
distribution:
_target_: armlet.data.splitter.ArmletDataSplitter.iid
_target_: armlet.data.splitter.ArmletDataSplitter
client_split: 0.2
client_val_split: 0.5
keep_test: false
server_test: false
server_test_union: true
server_split: 0.0
server_val_split: 0.0
uniform_test: false
cleaning:
missing_values:
_target_: armlet.data.cleaning.missing_values.RemoveMV
name: default
processing:
one_hot_encoding:
_target_: armlet.data.processing.feature_encoding.one_hot_encoding_pipeline
_apply_directly_to_subdata_: false
conversion_to_num:
_target_: armlet.data.processing.format_conversion.convert_bool_and_cat_to_num
_apply_directly_to_subdata_: true
normalization:
_target_: armlet.data.processing.normalization.normalization_pipeline
_apply_directly_to_subdata_: false
cols_to_exclude: ${data.dataset.sensitive_attributes}
conversion_to_tensors:
_target_: armlet.data.processing.format_conversion.convert_dataframes_to_tensors
_apply_directly_to_subdata_: true
sensitive_attributes: ${data.dataset.sensitive_attributes}
others:
sampling_perc: 1.0
seed: 42
exp:
device: cpu
seed: 42
inmemory: true
train: true
protocol:
eligible_perc: 1.0
n_clients: 10
n_rounds: 150
method:
_target_: armlet.FL_pipeline.FL_algorithms.ArmletCentralizedFL
hyperparameters:
client:
batch_size: 128
local_epochs: 10
loss:
_target_: torch.nn.BCELoss
optimizer:
lr: 0.001
name: SGD
weight_decay: 0.01
scheduler:
gamma: 1
name: StepLR
step_size: 1
model:
_target_: armlet.utils.net.LogRegression
input_size: 99
num_classes: 1
server:
loss:
_target_: torch.nn.BCELoss
time_to_accuracy_target: null
weighted: true
eval:
_target_: armlet.eval.evaluators.MultiCriteriaBinaryClassEval
eval_every: 1
locals: true
metrics:
fairness: armlet.eval.metrics.BinaryFairnessMetrics
post_fit: true
pre_fit: true
server: true
logger:
_target_: armlet.utils.log.ArmletLog
json_log_dir: ${paths.output_dir}
save: {}