pub struct FederatedRound {
pub round_num: usize,
pub client_count: usize,
pub global_model: Cid,
pub aggregated_gradient: Option<Vec<f32>>,
pub start_time: i64,
pub end_time: Option<i64>,
pub completed_count: usize,
pub round_id: u32,
pub expected_clients: Vec<String>,
pub contributions: HashMap<String, Vec<f32>>,
/* private fields */
}Expand description
Federated learning round.
Supports two construction modes:
- Legacy:
FederatedRound::new(round_num, global_model, client_count) - Session:
FederatedRound::start(round_id, client_ids)+record_contribution+aggregate
Fields§
§round_num: usizeRound number
client_count: usizeClients participating in this round (stored as count for serialization)
global_model: CidGlobal model CID for this round
aggregated_gradient: Option<Vec<f32>>Aggregated gradient for this round (if computed)
start_time: i64Round start timestamp
end_time: Option<i64>Round end timestamp (if completed)
completed_count: usizeCompleted client count
round_id: u32Round ID (session mode)
expected_clients: Vec<String>Expected client IDs (session mode)
contributions: HashMap<String, Vec<f32>>Per-client gradient contributions (session mode)
Implementations§
Source§impl FederatedRound
impl FederatedRound
Sourcepub fn new(round_num: usize, global_model: Cid, client_count: usize) -> Self
pub fn new(round_num: usize, global_model: Cid, client_count: usize) -> Self
Create a new federated round (legacy mode).
Sourcepub fn mark_client_completed(&mut self)
pub fn mark_client_completed(&mut self)
Mark a client as completed (legacy mode).
Sourcepub fn is_complete(&self) -> bool
pub fn is_complete(&self) -> bool
Check if round is complete (works in both modes).
Sourcepub fn start(round_id: u32, client_ids: Vec<String>) -> Self
pub fn start(round_id: u32, client_ids: Vec<String>) -> Self
Start a new round with the given participating client IDs (session mode).
Sourcepub fn record_contribution(&mut self, client_id: &str, gradient: Vec<f32>)
pub fn record_contribution(&mut self, client_id: &str, gradient: Vec<f32>)
Record a client’s gradient contribution (session mode).
Sourcepub fn aggregate(
&self,
dp: Option<&DifferentialPrivacy>,
) -> Result<Vec<f32>, FederatedError>
pub fn aggregate( &self, dp: Option<&DifferentialPrivacy>, ) -> Result<Vec<f32>, FederatedError>
Aggregate all contributions using FedAvg, optionally applying DP noise.
Sourcepub fn stats(&self) -> RoundStats
pub fn stats(&self) -> RoundStats
Return statistics for this round.
Trait Implementations§
Source§impl Clone for FederatedRound
impl Clone for FederatedRound
Source§fn clone(&self) -> FederatedRound
fn clone(&self) -> FederatedRound
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FederatedRound
impl Debug for FederatedRound
Source§impl<'de> Deserialize<'de> for FederatedRound
impl<'de> Deserialize<'de> for FederatedRound
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for FederatedRound
impl RefUnwindSafe for FederatedRound
impl Send for FederatedRound
impl Sync for FederatedRound
impl Unpin for FederatedRound
impl UnsafeUnpin for FederatedRound
impl UnwindSafe for FederatedRound
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more