spikingjelly.activation_based.distributed package#
本子包提供基于 torch.distributed、DTensor、tensor parallel 与 FSDP2 的实验性分布式训练工具,面向 spikingjelly.activation_based 的多步 SNN。
This package provides experimental distributed-training helpers for multi-step SNNs in spikingjelly.activation_based based on torch.distributed, DTensor, tensor parallelism, and FSDP2.
Distributed Helpers#
Analyze an SNN model and find stateful modules and tensor-parallel candidates. |
|
Build a structured distributed plan from analysis, topology, objective, and backend. |
|
Apply a structured plan and return |
|
|
Low-level compatibility configuration for manual DTensor-ready SNN distribution. |
Capability analysis for stateful modules and tensor-parallel candidates. |
|
Initialize |
|
Build a |
|
|
Low-level compatibility entry for manual DTensor-ready SNN distribution. |
|
Convert a |
中文
分布式训练支持模块,包含张量并行和数据并行工具。
English
Distributed training support module with tensor and data parallelism utilities.
- class spikingjelly.activation_based.distributed.DistributedFeatureSet(allow_experimental_conv_tp: 'bool' = False, allow_experimental_spikformer_tp: 'bool' = False, allow_pipeline: 'bool' = True, allow_zero_optimizer: 'bool' = True)[源代码]#
基类:
object- 参数:
- class spikingjelly.activation_based.distributed.SNNDistributedPlan(mode: 'str', objective: 'str', topology: 'SNNDistributedTopology', model_family: 'str', backend: 'str', batch_size: 'int', optimizer_strategy: 'str', memopt_level: 'int', rationale: 'Tuple[str, ...]', notes: 'Tuple[str, ...]', tensor_parallel_roots: 'Optional[Tuple[str, ...]]' = None, mesh_shape: 'Optional[Tuple[int, ...]]' = None, tp_mesh_dim: 'int' = 0, dp_mesh_dim: 'Optional[int]' = None, pp_microbatches: 'Optional[int]' = None, pp_schedule: 'str' = '1f1b', pp_virtual_stages: 'int' = 1, pp_layout: 'Optional[Tuple[int, ...]]' = None, pp_delay_wgrad: 'bool' = False, experimental_features: 'DistributedFeatureSet' = DistributedFeatureSet(allow_experimental_conv_tp=False, allow_experimental_spikformer_tp=False, allow_pipeline=True, allow_zero_optimizer=True))[源代码]#
基类:
object- 参数:
mode (str)
objective (str)
topology (SNNDistributedTopology)
model_family (str)
backend (str)
batch_size (int)
optimizer_strategy (str)
memopt_level (int)
tp_mesh_dim (int)
dp_mesh_dim (int | None)
pp_microbatches (int | None)
pp_schedule (str)
pp_virtual_stages (int)
pp_delay_wgrad (bool)
experimental_features (DistributedFeatureSet)
- experimental_features: DistributedFeatureSet = DistributedFeatureSet(allow_experimental_conv_tp=False, allow_experimental_spikformer_tp=False, allow_pipeline=True, allow_zero_optimizer=True)#
- topology: SNNDistributedTopology#
- class spikingjelly.activation_based.distributed.SNNDistributedAnalysis(memory_module_names, tensor_parallel_candidate_names, unsupported_tensor_parallel_names, notes, tensor_parallel_roots=None)[源代码]#
基类:
object
中文
SNN 分布式训练分析器。分析模型结构并推荐并行策略。
English
SNN distributed training analyzer.
Initialize distributed capability analysis results.
Chinese
初始化 SNN 分布式能力分析结果,包括状态模块、张量并行候选模块和提示信息。
- 参数:
memory_module_names (tuple[str, ...]) -- Names of stateful memory modules.
tensor_parallel_candidate_names (tuple[str, ...]) -- Names of modules that can use tensor parallelism.
unsupported_tensor_parallel_names (tuple[str, ...]) -- Names seen under tensor-parallel roots but not supported.
tensor_parallel_roots (tuple[str, ...] or None) -- Roots used by the analysis.
- class spikingjelly.activation_based.distributed.SNNDistributedRuntime(kind: 'str', model: 'nn.Module', mesh: 'Optional[object]', analysis: 'Optional[SNNDistributedAnalysis]', plan: 'Optional[SNNDistributedPlan]' = None, mode: 'str' = 'none', pipeline_runtime: 'Optional[SNNPipelineRuntime]' = None)[源代码]#
基类:
object- 参数:
kind (str)
model (Module)
mesh (object | None)
analysis (SNNDistributedAnalysis | None)
plan (SNNDistributedPlan | None)
mode (str)
pipeline_runtime (SNNPipelineRuntime | None)
- build_optimizer(optimizer_cls=<class 'torch.optim.adam.Adam'>, lr=0.001, weight_decay=0.0, **kwargs)[源代码]#
- classmethod from_legacy(*, kind, model, mesh, analysis, mode, pipeline_runtime=None)[源代码]#
- 参数:
kind (str)
model (Module)
mesh (object | None)
analysis (SNNDistributedAnalysis | None)
mode (str)
pipeline_runtime (SNNPipelineRuntime | None)
- 返回类型:
- plan: SNNDistributedPlan | None = None#
- reset_state()[源代码]#
-
中文
重置模型中所有有状态模块(如神经元膜电位)。
English
Reset all stateful modules in the model (e.g. neuron membrane potentials).
- analysis: SNNDistributedAnalysis | None#
- class spikingjelly.activation_based.distributed.SNNDistributedTopology(world_size: 'int', dims: 'Mapping[str, int]')[源代码]#
基类:
object
- spikingjelly.activation_based.distributed.TensorShardMemoryModule(source, shard_dim, logical_dim_size=None, process_group=None)[源代码]#
Deprecated callable alias for
make_tensor_shard_memory_module().- 参数:
source (MemoryModule)
shard_dim (int)
logical_dim_size (int | None)
process_group (Any | None)
- 返回类型:
- spikingjelly.activation_based.distributed.make_tensor_shard_memory_module(source, shard_dim, logical_dim_size=None, process_group=None)[源代码]#
-
中文
返回
source的深拷贝,并通过前向传播预钩子验证输入张量的局部分片 维度。返回值保留source的具体类型、参数和记忆状态接口。输入张量必须作为首个位置参数或
x关键字参数传入。必须使用module(...)调用返回的模块;直接调用module.forward(...)会绕过 PyTorch 的前向传播钩子及分片验证。若source已包含该验证钩子,则 原样返回source。- 参数:
source (MemoryModule) -- 待复制并添加分片验证的有状态模块
shard_dim (int) -- 输入张量中局部分片所在的维度
logical_dim_size (Optional[int]) -- 分片前对应逻辑维度的大小;为
None时不验证局部大小process_group (Optional[Any]) -- 用于计算局部大小的张量并行进程组;为
None时按单进程处理
- 返回:
带局部分片输入验证钩子的有状态模块
- 返回类型:
- 抛出:
TypeError -- 前向调用未通过首个位置参数或
x关键字参数提供输入张量ValueError -- 逻辑维度无法被进程数整除,或前向输入的分片维度或大小无效
English
Return a deep copy of
sourcewith a forward pre-hook that validates the local-shard dimension of its input tensor. The returned module preserves the concrete type, parameters, and memory-state interface ofsource.Pass the input tensor as the first positional argument or the
xkeyword argument. Invoke the returned module throughmodule(...). Callingmodule.forward(...)directly bypasses PyTorch forward hooks and shard validation. Ifsourcealready has this validation hook,sourceis returned unchanged.- 参数:
source (MemoryModule) -- Stateful module to copy and equip with shard validation
shard_dim (int) -- Input dimension containing the local shard
logical_dim_size (Optional[int]) -- Corresponding logical dimension size before sharding;
Nonedisables local-size validationprocess_group (Optional[Any]) -- Tensor-parallel process group used to compute the local size;
Noneuses single-process semantics
- 返回:
Stateful module with local-shard input validation
- 返回类型:
- 抛出:
TypeError -- If the forward call does not provide an input tensor as the first positional argument or the
xkeyword argumentValueError -- If the logical dimension is not evenly shardable or the forward input has an invalid shard dimension or local size
- spikingjelly.activation_based.distributed.analyze(model, *, model_family=None, roots=None)[源代码]#
Analyze an SNN model for distributed execution.
Chinese
分析 SNN 模型中可用于分布式执行的状态模块、张量并行候选模块和 不支持项。
- 参数:
- 返回:
Structured distributed capability analysis.
- 返回类型:
- spikingjelly.activation_based.distributed.apply(*, model, plan, device_type='cuda', device_mesh=None)[源代码]#
Apply an eager distributed plan to a model.
Chinese
将
SNNDistributedPlan应用到模型并返回包含已包装模型、mesh 和 分析结果的运行时对象。- 参数:
model (Module) -- Model to configure. DDP-style
.modulewrappers are unwrapped.plan (SNNDistributedPlan) -- Plan returned by
plan().device_type (str) -- Device type used when constructing a mesh.
device_mesh -- Optional pre-built PyTorch
DeviceMesh.
- 返回:
Runtime wrapper for the configured model.
- 返回类型:
- spikingjelly.activation_based.distributed.apply_pipeline_stage_memopt(runtime, *, memopt_level, compress_x=False, stage_budget_ratio=0.5, use_plan_cache=True)[源代码]#
Apply memory optimization to selected local pipeline stages.
Chinese
根据 stage 代价选择本 rank 持有的 pipeline stage,并对其内部模块应用 SpikingJelly 内存优化。
- 参数:
runtime (SNNPipelineRuntime) -- Pipeline runtime returned by a pipeline configurator.
memopt_level (int) -- Memory optimization level. Values
<= 0disable it.compress_x (bool) -- Whether to enable activation compression.
stage_budget_ratio (float) -- Fraction of stages to optimize.
use_plan_cache (bool) -- Whether to use memopt plan cache when supported.
- 返回:
(runtime, optimize_ms, applied).- 返回类型:
- spikingjelly.activation_based.distributed.build_snn_optimizer(module, mode, lr, weight_decay=0.0, optimizer_sharding='none', foreach=None, optimizer_cls=<class 'torch.optim.adam.Adam'>, **optimizer_kwargs)[源代码]#
Build an optimizer for an SNN distributed training mode.
Chinese
为 SNN 分布式训练构造优化器,并在纯数据并行模式下可选启用
ZeroRedundancyOptimizer。- 参数:
module (Module) -- Model whose parameters are optimized.
mode (str) -- Distributed mode, such as
"dp".lr (float) -- Learning rate.
weight_decay (float) -- Weight decay.
optimizer_sharding (str) --
"none"or"zero".foreach (bool or None) -- Optional foreach flag passed to the optimizer.
optimizer_cls -- Optimizer class to instantiate.
- 返回:
Optimizer instance.
- spikingjelly.activation_based.distributed.build_device_mesh(device_type='cuda', mesh_shape=None, mesh_dim_names=None)[源代码]#
Create a PyTorch
DeviceMeshfor the initialized process group.Chinese
基于当前已初始化的进程组创建 PyTorch
DeviceMesh,并校验 mesh 大小 与world_size一致。- 参数:
- 返回:
PyTorch DTensor
DeviceMesh.- 返回类型:
torch.distributed._tensor.DeviceMesh
- spikingjelly.activation_based.distributed.enable_tp_communication_debug(enabled=True)[源代码]#
Enable or disable tensor-parallel communication counters.
Chinese
启用或关闭张量并行通信计数器。
- 参数:
enabled (bool) -- Whether debug counting is enabled.
- 返回类型:
None
- spikingjelly.activation_based.distributed.ensure_distributed_initialized(backend=None, init_method=None, rank=None, world_size=None)[源代码]#
Initialize the default process group if needed.
Chinese
如果默认
torch.distributed进程组尚未初始化,则使用给定参数初始化。- 参数:
- 返回:
Trueif this call initialized the group, otherwiseFalse.- 返回类型:
- spikingjelly.activation_based.distributed.get_tp_communication_debug_stats()[源代码]#
Return a snapshot of tensor-parallel communication counters.
Chinese
返回张量并行通信调试计数器的快照。
- spikingjelly.activation_based.distributed.plan(*, analysis, objective, topology, backend, batch_size, model_family=None, mode=None, features=None)[源代码]#
Build an eager distributed execution plan from analysis results.
Chinese
根据模型分析结果、目标、拓扑和后端选择 SNN eager 分布式执行策略。
- 参数:
analysis (SNNDistributedAnalysis) -- Capability analysis returned by
analyze().objective (str) -- Optimization objective, for example
"speed".topology (Mapping[str, int] or SNNDistributedTopology) -- Logical topology mapping or topology object.
backend (str) -- Execution backend name.
batch_size (int) -- Per-step batch size used by the recommender.
model_family (str or None) -- Optional model-family hint.
mode (str or None) -- Optional explicit distributed mode override.
features (DistributedFeatureSet or None) -- Optional feature gates for experimental or optional behavior.
- 返回:
Distributed execution plan.
- 返回类型:
- spikingjelly.activation_based.distributed.recommended_pipeline_microbatches(batch_size, num_stages)[源代码]#
-
中文
推荐流水线并行的微批次数量。
English
Recommend microbatches for pipeline parallelism.
- 抛出:
ValueError -- If no recommended microbatch count evenly divides
batch_size.- 参数:
- 返回类型:
- spikingjelly.activation_based.distributed.recommend_snn_distributed_strategy(model, world_size, prefer, batch_size, backend='inductor', zero_redundancy_optimizer_available=None, pipelining_available=None, fsdp2_available=None, tensor_parallel_available=None)[源代码]#
-
中文
推荐 SNN 分布式训练策略。
English
Recommend SNN distributed strategy.
- spikingjelly.activation_based.distributed.recommend_pipeline_memopt_stages(stage_costs, stage_budget_ratio=0.5)[源代码]#
Select pipeline stages that should receive memory optimization.
Chinese
按 stage 代价从高到低选择需要应用内存优化的 pipeline stage。
- spikingjelly.activation_based.distributed.reset_tp_communication_debug_stats()[源代码]#
Reset tensor-parallel communication counters to zero.
Chinese
将张量并行通信调试计数器清零。
- 返回类型:
None
- spikingjelly.activation_based.distributed.resolve_data_parallel_partition(device_mesh, dp_mesh_dim, sharded_by_data_parallel)[源代码]#
Resolve data-parallel partition count and local partition index.
Chinese
根据
DeviceMesh和数据并行维度解析数据分片数量以及当前 rank 所属的 分片编号。
- spikingjelly.activation_based.distributed.resolve_tensor_parallel_group_size(device_mesh, tp_mesh_dim, tensor_parallel_enabled)[源代码]#
Resolve the tensor-parallel group size from a mesh.
Chinese
根据
DeviceMesh和张量并行维度解析张量并行组大小;未启用张量并行时 返回1。- 参数:
device_mesh (DeviceMesh | None) -- Optional device mesh.
tp_mesh_dim (int) -- Tensor-parallel mesh dimension.
tensor_parallel_enabled (bool) -- Whether tensor parallelism is enabled.
- 返回:
Tensor-parallel group size.
- 返回类型: