SP18 Item02: secagg context save/load in node database
Covered by MR !159 (merged):
-
extend SecaggRequest
message withexperiment_id
job_id
field (empty string ifNone
)- researcher adds job_id for secagg servkey; adds
Noneempty string for secagg biprime - node handles
- adapt unit tests
- researcher adds job_id for secagg servkey; adds
WIP in feature/355-secagg-context-save-load
:
-
create SecaggManager
class with CRUD (CRD?) methods for managing secagg configurations on a node -
add SecaggServkey
table in DB and manage it withSecaggManager
(or a subclassSecaggServkeyManager
?)- table saves
(secagg_id,
job_id, "all_params_for_this secagg_element")
entries
- table saves
-
add SecaggBiprime
table in DB and manage it withSecaggManager
(or a subclassSecaggBiprimeManager
?)- table save
(secagg_id, "all_params_for_this secagg_element")
entries
- table save
- save secagg servkey in DB when it is negotiated (in secagg payload)
-
check secagg request has job_id
!= None (a secagg servkey belongs to an experiment) => in MR !159 (merged) -
check secagg_id
does not exist in DB or it belongs to ourjob_id
(cannot reuse a secagg servkey from another experiment) -
if secagg_id
not existing in DB, generate the secagg servkey (payload) and save it in the DB -
return the secagg parameters for secagg_id
-
- save secagg biprime in DB when it is negotiated (in secagg payload)
-
check job_id
== None (a secagg biprime does not belong to an experiment) => in MR !159 (merged) -
if secagg_id
not existing in DB, generate the secagg biprime (payload) and save it in the DB -
return the secagg parameters for secagg_id
-
-
delete secagg element from DB when receiving a secagg-delete
request -
unit tests -
[ ] documentation needed ?no user function at this point
Notes about current implementation:
- we do not clean
SecaggServkey
when an experiment completes. We do not even try to detect when an experiment completes in the current version, this is left to future enhancement. - it is expected that
TrainRequest
will be extended withsecagg_servkey_id / secagg_biprime_id
fields (None
when no secagg, secagg id if using secagg). Check thatsecagg_servkey_id
belongs to that experiment. Node refuses to perform training issecagg_id
is None and the node wants secure aggregation (eg: add parameter to node such asREQUIRE_SECAGG
True/False) - we implemented the minimum node-side experiment status for secure aggregation. The path for more general node-side experiment status would be to create an
Experiment
DB table, with an entry for each active experiment (need to detect expired/failed/completed experiments). Possible structure:
exp_id: {
# some general exp status params
...
# keep history of all used params for all rounds
'rounds': {
'0': {
'secagg_servkey': secagg_id1 or None
'secagg_biprime': secagg_id2 or None
...
}
...
}
}
...
Edited by VESIN Marc