pub enum ShardingStrategy {
FullShard,
ShardGradOp,
NoShard,
HybridShard {
intra_node_size: usize,
},
}Expand description
Sharding strategy for FSDP. Mirrors PyTorch’s ShardingStrategy.
FullShard— shard parameters, gradients, and optimizer state. Minimum memory, maximum communication. Equivalent to ZeRO-3.ShardGradOp— keep parameters replicated on every rank (no parameter all-gather in forward), but shard gradients and optimizer state. Equivalent to ZeRO-2. Afteroptimizer.step(), callFSDP::broadcast_updated_paramsto re-sync the updated param shards back to every rank.NoShard— equivalent to DDP: no sharding, allreduce the full gradient. Provided so the FSDP wrapper can be used as a drop-in replacement for DDP during debugging or for single-node experiments.HybridShard— shard within a node (intra-node FullShard) and replicate across nodes (inter-node DDP). Uses twoSubBackends derived from the global backend to run intra-nodeall_gather/reduce_scatterand inter-nodeallreduceindependently. CL-327.
CL-372.
Variants§
FullShard
Shard parameters + gradients + optimizer state (ZeRO-3 / full FSDP). This is the default and matches the behavior that existed before CL-372.
ShardGradOp
Shard gradients + optimizer state only, keep params replicated (ZeRO-2).
NoShard
No sharding (ZeRO-0 / DDP equivalent). gradients are allreduced.
HybridShard
Hybrid sharding: shard within a node (intra-node FullShard) +
replicate across nodes (inter-node DDP). The intra_node_size
is the number of ranks per node (i.e., local GPUs). The total
world_size must be a multiple of intra_node_size.
CL-327.
Trait Implementations§
Source§impl Clone for ShardingStrategy
impl Clone for ShardingStrategy
Source§fn clone(&self) -> ShardingStrategy
fn clone(&self) -> ShardingStrategy
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ShardingStrategy
impl Debug for ShardingStrategy
Source§impl Default for ShardingStrategy
impl Default for ShardingStrategy
Source§fn default() -> ShardingStrategy
fn default() -> ShardingStrategy
Returns the “default value” for a type. Read more
Source§impl PartialEq for ShardingStrategy
impl PartialEq for ShardingStrategy
Source§fn eq(&self, other: &ShardingStrategy) -> bool
fn eq(&self, other: &ShardingStrategy) -> bool
Tests for
self and other values to be equal, and is used by ==.impl Copy for ShardingStrategy
impl Eq for ShardingStrategy
impl StructuralPartialEq for ShardingStrategy
Auto Trait Implementations§
impl Freeze for ShardingStrategy
impl RefUnwindSafe for ShardingStrategy
impl Send for ShardingStrategy
impl Sync for ShardingStrategy
impl Unpin for ShardingStrategy
impl UnsafeUnpin for ShardingStrategy
impl UnwindSafe for ShardingStrategy
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
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>
Converts
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>
Converts
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