Repository navigation
Conversation
Add qualified single-host MPI and MirroredStrategy sample-parallel BPTT without changing omitted-distribution behavior or per-replica batch semantics. Preserve canonical gradient/weight ordering, Poisson replay and explicit complete-state synchronization while avoiding temporal peer-copy and checkpoint host-staging overhead. Integrate rank-safe configuration/output ownership, early GPU binding and failure propagation with normal BMTK entry points. Include real-process CPU CI, independent numerical probes, a runnable SONATA example and a dedicated MPI-first multi-GPU manual with explicit support and qualification limits. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Python 3.8 buffers captured stderr, while MPI Abort bypasses interpreter shutdown. Explicitly flush the traceback and pending standard streams before aborting, including nonzero SystemExit failures. Keep abort in finally so an output failure cannot strand other ranks. Add subprocess regressions with deliberately buffered streams and an immediate abort, and run them in both MPI CI environments. Keep the matrix running independently so a Keras 2 failure does not cancel Keras 3 coverage. Document the diagnostic boundary without changing training semantics. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Explain full-network replication and the distinction between GPU memory and duplicated host runtime/staging storage. Record historical per-device TensorFlow allocator lifetime peaks from the qualified two-V10032 runs, with separate-run, driver-snapshot and VRAM-capacity caveats. Do not imply that MPI necessarily increases GPU memory or that either sample-parallel backend pools device memory or halves model storage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add explicitly opt-in, single-host sample-parallel DPointNet training:
mpirun -n N python -m bmtk.utils.dpointnet_mpi .... The launcher binds inherited GPU allocation tokens before TensorFlow imports and aborts the job on uncaught worker failure.run.batch_sizeremains per replica, optional global size must match, and one global batch produces one optimizer update. This is not neuron partitioning or pooled GPU memory.run.distributionpreserves previous execution and batch behavior. Neither new sample-parallel mode is automatically selected.Implementation
Config.build_env()/directory/log/resolved-config handling rank-aware and chief-owned. Reject incorrect launcher/config pairs before output writes; use noncollective fatal logging so worker failures reach the launcher.dpointnet-mpidependency extra, a complete SONATA JSON/runner example, real-process CPU CI for Keras 2/3, and a dedicated multi-GPU manual linked from the guide, training and performance pages. Preserve existing documentation anchors.Supported scope and explicit limits
Initial admitted scope: single host, full FP32, BPTT, one condition, equal full local batches, zero-state initialization, no optimizer clipping, and independently qualified sample-separable mean losses.
TargetFiringRateretains its default Hz objective;spikes_per_stepis an explicit alternative.Unqualified mixed precision, condition accumulation/parallelism, local learning rules, cached/warmup initial states and nonlinear batch-statistic losses fail explicitly. MPI combined training/inference is rejected to prevent duplicate output ownership. This backend uses host MPI, not CUDA-aware MPI or NCCL. Multi-node execution, all-GPU qualification and convergence are not claimed.
Validation
The publication tree is based directly on current
develop(8381b54c439df0745417f62e96a92f4e69ceafac). All 663 tracked Python files match the immutable CPU-qualified source; the later manual revisions change documentation only.The extra nine local Keras 2 skips are explicit real-process cases because the existing immutable environment lacks
mpi4py; it was not modified. The new OpenMPI CPU workflow installs the optional dependency and must supply real Keras 2 MPI coverage on this PR. GitHub Actions results are pending, not claimed green.Historical physical-GPU evidence
Frozen pre-I/O-integration qualification on two V10032 GPUs used full V1 (66,658 neurons / 24,450,554 recurrent edges), 500 timesteps, FP32/NEST, checkpoint interval 25, recurrent-only Adam, seeded host LGN and count-valued Poisson background, with full spike outputs/diagnostic writes. Twenty synchronized samples followed three excluded warmups; MPI timings use rank-MAX walltime.
These are separate qualification runs with matched single-GPU controls, not a simultaneous head-to-head benchmark or proof that MPI transport is intrinsically superior. Physical-GPU numerical/state/update/restore gates passed on those frozen parent snapshots; no new physical-GPU benchmark is claimed for subsequent config-I/O/documentation revisions. The earlier GTX1080Ti 1.953x prototype used a different counts-only workload and is not a matched comparison.